summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2019-08-13 20:42:06 +0200
committerMarius Bakke <mbakke@fastmail.com>2019-08-13 20:42:06 +0200
commit462ad9f56b9665b8d22960acee73ad91f1052c9c (patch)
tree814be463d6d0517e7db9b9e6f15dbc7516955674
parent7f5f61ae99321a7a6e08b0100cd428e11ce6a837 (diff)
parent1b1b006afd31c5526f34d157baef492c7dde2e9c (diff)
downloadguix-462ad9f56b9665b8d22960acee73ad91f1052c9c.tar.gz
Merge branch 'master' into core-updates
-rw-r--r--doc/guix.texi27
-rw-r--r--gnu/local.mk14
-rw-r--r--gnu/machine.scm12
-rw-r--r--gnu/machine/ssh.scm174
-rw-r--r--gnu/packages/admin.scm46
-rw-r--r--gnu/packages/algebra.scm7
-rw-r--r--gnu/packages/audio.scm4
-rw-r--r--gnu/packages/bioconductor.scm45
-rw-r--r--gnu/packages/bioinformatics.scm455
-rw-r--r--gnu/packages/bittorrent.scm61
-rw-r--r--gnu/packages/certs.scm4
-rw-r--r--gnu/packages/chromium.scm98
-rw-r--r--gnu/packages/cran.scm337
-rw-r--r--gnu/packages/crates-io.scm890
-rw-r--r--gnu/packages/cups.scm4
-rw-r--r--gnu/packages/databases.scm39
-rw-r--r--gnu/packages/docbook.scm3
-rw-r--r--gnu/packages/docker.scm16
-rw-r--r--gnu/packages/education.scm4
-rw-r--r--gnu/packages/emacs-xyz.scm555
-rw-r--r--gnu/packages/emulators.scm20
-rw-r--r--gnu/packages/enchant.scm4
-rw-r--r--gnu/packages/engineering.scm47
-rw-r--r--gnu/packages/finance.scm43
-rw-r--r--gnu/packages/fonts.scm4
-rw-r--r--gnu/packages/fontutils.scm2
-rw-r--r--gnu/packages/freedesktop.scm6
-rw-r--r--gnu/packages/games.scm4
-rw-r--r--gnu/packages/gl.scm15
-rw-r--r--gnu/packages/gnome.scm115
-rw-r--r--gnu/packages/golang.scm10
-rw-r--r--gnu/packages/graphics.scm4
-rw-r--r--gnu/packages/gtk.scm6
-rw-r--r--gnu/packages/guile-xyz.scm21
-rw-r--r--gnu/packages/guile.scm44
-rw-r--r--gnu/packages/haskell-apps.scm18
-rw-r--r--gnu/packages/haskell-check.scm2
-rw-r--r--gnu/packages/haskell-crypto.scm63
-rw-r--r--gnu/packages/haskell-web.scm169
-rw-r--r--gnu/packages/haskell-xyz.scm276
-rw-r--r--gnu/packages/haskell.scm172
-rw-r--r--gnu/packages/image.scm17
-rw-r--r--gnu/packages/imagemagick.scm4
-rw-r--r--gnu/packages/kde.scm4
-rw-r--r--gnu/packages/libevent.scm4
-rw-r--r--gnu/packages/linux.scm46
-rw-r--r--gnu/packages/lisp.scm54
-rw-r--r--gnu/packages/machine-learning.scm17
-rw-r--r--gnu/packages/mail.scm16
-rw-r--r--gnu/packages/man.scm4
-rw-r--r--gnu/packages/maths.scm8
-rw-r--r--gnu/packages/mp3.scm3
-rw-r--r--gnu/packages/mpd.scm4
-rw-r--r--gnu/packages/multiprecision.scm25
-rw-r--r--gnu/packages/networking.scm4
-rw-r--r--gnu/packages/nss.scm5
-rw-r--r--gnu/packages/package-management.scm11
-rw-r--r--gnu/packages/patches/emacs-dired-toggle-sudo-emacs-26.patch49
-rw-r--r--gnu/packages/patches/flac-CVE-2017-6888.patch29
-rw-r--r--gnu/packages/patches/isc-dhcp-4.4.1-fixes-for-newer-bind.patch100
-rw-r--r--gnu/packages/patches/libmad-frame-length.patch199
-rw-r--r--gnu/packages/patches/libmad-length-check.patch819
-rw-r--r--gnu/packages/patches/libmad-md_size.patch60
-rw-r--r--gnu/packages/patches/libvirt-remove-ATTRIBUTE_UNUSED.patch34
-rw-r--r--gnu/packages/patches/mame-rapidjson-fix.patch37
-rw-r--r--gnu/packages/patches/nss-freebl-stubs.patch20
-rw-r--r--gnu/packages/patches/pcre2-fix-jit_match-crash.patch25
-rw-r--r--gnu/packages/patches/scribus-poppler.patch72
-rw-r--r--gnu/packages/patches/strace-ipc-tests.patch30
-rw-r--r--gnu/packages/pcre.scm2
-rw-r--r--gnu/packages/pdf.scm8
-rw-r--r--gnu/packages/perl.scm8
-rw-r--r--gnu/packages/photo.scm4
-rw-r--r--gnu/packages/php.scm10
-rw-r--r--gnu/packages/plotutils.scm3
-rw-r--r--gnu/packages/python-xyz.scm25
-rw-r--r--gnu/packages/regex.scm4
-rw-r--r--gnu/packages/ruby.scm6
-rw-r--r--gnu/packages/samba.scm4
-rw-r--r--gnu/packages/scanner.scm12
-rw-r--r--gnu/packages/scribus.scm106
-rw-r--r--gnu/packages/search.scm6
-rw-r--r--gnu/packages/security-token.scm4
-rw-r--r--gnu/packages/shells.scm9
-rw-r--r--gnu/packages/statistics.scm163
-rw-r--r--gnu/packages/syncthing.scm14
-rw-r--r--gnu/packages/terminals.scm6
-rw-r--r--gnu/packages/tex.scm4437
-rw-r--r--gnu/packages/text-editors.scm7
-rw-r--r--gnu/packages/version-control.scm10
-rw-r--r--gnu/packages/video.scm60
-rw-r--r--gnu/packages/vim.scm56
-rw-r--r--gnu/packages/virtualization.scm12
-rw-r--r--gnu/packages/vpn.scm18
-rw-r--r--gnu/packages/vulkan.scm8
-rw-r--r--gnu/packages/web.scm8
-rw-r--r--gnu/packages/wine.scm43
-rw-r--r--gnu/packages/wm.scm22
-rw-r--r--gnu/packages/xiph.scm5
-rw-r--r--gnu/packages/xorg.scm10
-rw-r--r--gnu/tests/reconfigure.scm32
-rw-r--r--guix/build-system/texlive.scm15
-rw-r--r--guix/build/ant-build-system.scm10
-rw-r--r--guix/build/cargo-build-system.scm48
-rw-r--r--guix/build/svn.scm9
-rw-r--r--guix/scripts/deploy.scm6
-rw-r--r--guix/scripts/system/reconfigure.scm27
-rw-r--r--guix/svn-download.scm59
108 files changed, 7408 insertions, 3428 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 4034948b2f..42acc3c7f3 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -5854,8 +5854,11 @@ should be added to the package definition via the
 
 In its @code{configure} phase, this build system will make any source inputs
 specified in the @code{#:cargo-inputs} and @code{#:cargo-development-inputs}
-parameters available to cargo.  The @code{install} phase installs any crate
-the binaries if they are defined by the crate.
+parameters available to cargo.  The @code{update-cargo-lock} phase will,
+when there is a @code{Cargo.lock} file, update the @code{Cargo.lock} file
+with the inputs and their versions available at build time.  The
+@code{install} phase installs any crate the binaries if they are defined by
+the crate.
 @end defvr
 
 @cindex Clojure (programming language)
@@ -25507,7 +25510,7 @@ evaluates to.  As an example, @var{file} might contain a definition like this:
             %base-services))))
 
 (list (machine
-       (system %system)
+       (operating-system %system)
        (environment managed-host-environment-type)
        (configuration (machine-ssh-configuration
                        (host-name "localhost")
@@ -25527,12 +25530,28 @@ complex deployment may involve, for example, starting virtual machines through
 a Virtual Private Server (VPS) provider.  In such a case, a different
 @var{environment} type would be used.
 
+Do note that you first need to generate a key pair on the coordinator machine
+to allow the daemon to export signed archives of files from the store
+(@pxref{Invoking guix archive}).
+
+@example
+# guix archive --generate-key
+@end example
+
+@noindent
+Each target machine must authorize the key of the master machine so that it
+accepts store items it receives from the coordinator:
+
+@example
+# guix archive --authorize < coordinator-public-key.txt
+@end example
+
 @deftp {Data Type} machine
 This is the data type representing a single machine in a heterogeneous Guix
 deployment.
 
 @table @asis
-@item @code{system}
+@item @code{operating-system}
 The object of the operating system configuration to deploy.
 
 @item @code{environment}
diff --git a/gnu/local.mk b/gnu/local.mk
index 41f4e4eec2..c6962aebd1 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -238,6 +238,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/haskell-check.scm		\
   %D%/packages/haskell-crypto.scm		\
   %D%/packages/haskell-web.scm			\
+  %D%/packages/haskell-xyz.scm			\
   %D%/packages/ham-radio.scm			\
   %D%/packages/hexedit.scm			\
   %D%/packages/hugs.scm				\
@@ -771,6 +772,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/elfutils-tests-ptrace.patch		\
   %D%/packages/patches/elixir-path-length.patch			\
   %D%/packages/patches/einstein-build.patch			\
+  %D%/packages/patches/emacs-dired-toggle-sudo-emacs-26.patch   \
   %D%/packages/patches/emacs-exec-path.patch			\
   %D%/packages/patches/emacs-fix-scheme-indent-function.patch	\
   %D%/packages/patches/emacs-json-reformat-fix-tests.patch	\
@@ -806,7 +808,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/findutils-localstatedir.patch		\
   %D%/packages/patches/findutils-makedev.patch			\
   %D%/packages/patches/findutils-test-xargs.patch		\
-  %D%/packages/patches/flac-CVE-2017-6888.patch		\
   %D%/packages/patches/flann-cmake-3.11.patch			\
   %D%/packages/patches/flint-ldconfig.patch			\
   %D%/packages/patches/foomatic-filters-CVE-2015-8327.patch	\
@@ -961,6 +962,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/inkscape-poppler-0.76.patch		\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/irrlicht-use-system-libs.patch		\
+  %D%/packages/patches/isc-dhcp-4.4.1-fixes-for-newer-bind.patch	\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
   %D%/packages/patches/jacal-fix-texinfo.patch			\
   %D%/packages/patches/jamvm-arm.patch				\
@@ -1026,7 +1028,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/libotr-test-auth-fix.patch		\
   %D%/packages/patches/libmad-armv7-thumb-pt1.patch		\
   %D%/packages/patches/libmad-armv7-thumb-pt2.patch		\
-  %D%/packages/patches/libmad-frame-length.patch		\
+  %D%/packages/patches/libmad-length-check.patch		\
+  %D%/packages/patches/libmad-md_size.patch			\
   %D%/packages/patches/libmad-mips-newgcc.patch			\
   %D%/packages/patches/libmp4v2-c++11.patch			\
   %D%/packages/patches/libmygpo-qt-fix-qt-5.11.patch		\
@@ -1047,7 +1050,6 @@ dist_patch_DATA =						\
   %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/libvirt-remove-ATTRIBUTE_UNUSED.patch	\
   %D%/packages/patches/libvpx-CVE-2016-2818.patch		\
   %D%/packages/patches/libvpx-use-after-free-in-postproc.patch	\
   %D%/packages/patches/libxslt-generated-ids.patch		\
@@ -1078,6 +1080,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/lxsession-use-gapplication.patch         \
   %D%/packages/patches/make-glibc-compat.patch			\
   %D%/packages/patches/make-impure-dirs.patch			\
+  %D%/packages/patches/mame-rapidjson-fix.patch			\
   %D%/packages/patches/mariadb-client-test-32bit.patch		\
   %D%/packages/patches/mars-install.patch			\
   %D%/packages/patches/mars-sfml-2.3.patch			\
@@ -1124,6 +1127,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/nfs-utils-missing-headers.patch		\
   %D%/packages/patches/ngircd-handle-zombies.patch		\
   %D%/packages/patches/nm-plugin-path.patch			\
+  %D%/packages/patches/nss-freebl-stubs.patch			\
   %D%/packages/patches/nss-increase-test-timeout.patch		\
   %D%/packages/patches/nss-pkgconfig.patch			\
   %D%/packages/patches/ntfs-3g-CVE-2019-9755.patch		\
@@ -1169,6 +1173,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/patchelf-rework-for-arm.patch		\
   %D%/packages/patches/patchutils-test-perms.patch		\
   %D%/packages/patches/patch-hurd-path-max.patch		\
+  %D%/packages/patches/pcre2-fix-jit_match-crash.patch		\
   %D%/packages/patches/perl-autosplit-default-time.patch	\
   %D%/packages/patches/perl-deterministic-ordering.patch	\
   %D%/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch \
@@ -1291,8 +1296,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/scheme48-tests.patch			\
   %D%/packages/patches/scotch-build-parallelism.patch		\
   %D%/packages/patches/scotch-integer-declarations.patch	\
-  %D%/packages/patches/scribus-poppler.patch			\
-  %D%/packages/patches/scribus-poppler-0.73.patch		\
   %D%/packages/patches/sdl-libx11-1.6.patch			\
   %D%/packages/patches/seq24-rename-mutex.patch			\
   %D%/packages/patches/sharutils-CVE-2018-1000097.patch		\
@@ -1308,6 +1311,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/soundconverter-remove-gconf-dependency.patch	\
   %D%/packages/patches/sssd-curl-compat.patch			\
   %D%/packages/patches/steghide-fixes.patch			\
+  %D%/packages/patches/strace-ipc-tests.patch			\
   %D%/packages/patches/streamlink-update-test.patch		\
   %D%/packages/patches/stumpwm-fix-broken-read-one-line.patch	\
   %D%/packages/patches/superlu-dist-awpm-grid.patch		\
diff --git a/gnu/machine.scm b/gnu/machine.scm
index 0b79402b0a..30ae97f6ec 100644
--- a/gnu/machine.scm
+++ b/gnu/machine.scm
@@ -34,7 +34,7 @@
             machine?
             this-machine
 
-            machine-system
+            machine-operating-system
             machine-environment
             machine-configuration
             machine-display-name
@@ -85,14 +85,14 @@
   make-machine
   machine?
   this-machine
-  (system        machine-system)       ; <operating-system>
-  (environment   machine-environment)  ; symbol
-  (configuration machine-configuration ; configuration object
-                 (default #f)))        ; specific to environment
+  (operating-system machine-operating-system) ; <operating-system>
+  (environment      machine-environment)      ; symbol
+  (configuration    machine-configuration     ; configuration object
+                    (default #f)))            ; specific to environment
 
 (define (machine-display-name machine)
   "Return the host-name identifying MACHINE."
-  (operating-system-host-name (machine-system machine)))
+  (operating-system-host-name (machine-operating-system machine)))
 
 (define (machine-remote-eval machine exp)
   "Evaluate EXP, a gexp, on MACHINE. Ensure that all the elements EXP refers to
diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm
index 552eafa9de..ba3e33c922 100644
--- a/gnu/machine/ssh.scm
+++ b/gnu/machine/ssh.scm
@@ -20,6 +20,9 @@
   #:use-module (gnu machine)
   #:autoload   (gnu packages gnupg) (guile-gcrypt)
   #:use-module (gnu system)
+  #:use-module (gnu system file-systems)
+  #:use-module (gnu system uuid)
+  #:use-module (guix diagnostics)
   #:use-module (guix gexp)
   #:use-module (guix i18n)
   #:use-module (guix modules)
@@ -29,6 +32,7 @@
   #:use-module (guix scripts system reconfigure)
   #:use-module (guix ssh)
   #:use-module (guix store)
+  #:use-module (guix utils)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-19)
   #:use-module (srfi srfi-26)
@@ -40,6 +44,7 @@
             machine-ssh-configuration
 
             machine-ssh-configuration-host-name
+            machine-ssh-configuration-build-locally?
             machine-ssh-configuration-port
             machine-ssh-configuration-user
             machine-ssh-configuration-session))
@@ -62,15 +67,17 @@
   make-machine-ssh-configuration
   machine-ssh-configuration?
   this-machine-ssh-configuration
-  (host-name machine-ssh-configuration-host-name) ; string
-  (port      machine-ssh-configuration-port       ; integer
-             (default 22))
-  (user      machine-ssh-configuration-user       ; string
-             (default "root"))
-  (identity  machine-ssh-configuration-identity   ; path to a private key
-             (default #f))
-  (session   machine-ssh-configuration-session    ; session
-             (default #f)))
+  (host-name      machine-ssh-configuration-host-name) ; string
+  (build-locally? machine-ssh-configuration-build-locally?
+                  (default #t))
+  (port           machine-ssh-configuration-port       ; integer
+                  (default 22))
+  (user           machine-ssh-configuration-user       ; string
+                  (default "root"))
+  (identity       machine-ssh-configuration-identity   ; path to a private key
+                  (default #f))
+  (session        machine-ssh-configuration-session    ; session
+                  (default #f)))
 
 (define (machine-ssh-session machine)
   "Return the SSH session that was given in MACHINE's configuration, or create
@@ -96,7 +103,149 @@ one from the configuration's parameters if one was not provided."
   "Internal implementation of 'machine-remote-eval' for MACHINE instances with
 an environment type of 'managed-host."
   (maybe-raise-unsupported-configuration-error machine)
-  (remote-eval exp (machine-ssh-session machine)))
+  (remote-eval exp (machine-ssh-session machine)
+               #:build-locally?
+               (machine-ssh-configuration-build-locally?
+                (machine-configuration machine))))
+
+
+;;;
+;;; Safety checks.
+;;;
+
+(define (machine-check-file-system-availability machine)
+  "Raise a '&message' error condition if any of the file-systems specified in
+MACHINE's 'system' declaration do not exist on the machine."
+  (define file-systems
+    (filter (lambda (fs)
+              (and (file-system-mount? fs)
+                   (not (member (file-system-type fs)
+                                %pseudo-file-system-types))
+                   (not (memq 'bind-mount (file-system-flags fs)))))
+            (operating-system-file-systems (machine-operating-system machine))))
+
+  (define (check-literal-file-system fs)
+    (define remote-exp
+      #~(catch 'system-error
+          (lambda ()
+            (stat #$(file-system-device fs))
+            #t)
+          (lambda args
+            (system-error-errno args))))
+
+    (mlet %store-monad ((errno (machine-remote-eval machine remote-exp)))
+      (when (number? errno)
+        (raise (condition
+                (&message
+                 (message (format #f (G_ "device '~a' not found: ~a")
+                                  (file-system-device fs)
+                                  (strerror errno)))))))
+      (return #t)))
+
+  (define (check-labeled-file-system fs)
+    (define remote-exp
+      (with-imported-modules '((gnu build file-systems))
+        #~(begin
+            (use-modules (gnu build file-systems))
+            (find-partition-by-label #$(file-system-label->string
+                                        (file-system-device fs))))))
+
+    (mlet %store-monad ((result (machine-remote-eval machine remote-exp)))
+      (unless result
+        (raise (condition
+                (&message
+                 (message (format #f (G_ "no file system with label '~a'")
+                                  (file-system-label->string
+                                   (file-system-device fs))))))))
+      (return #t)))
+
+  (define (check-uuid-file-system fs)
+    (define remote-exp
+      (with-imported-modules (source-module-closure
+                              '((gnu build file-systems)
+                                (gnu system uuid)))
+        #~(begin
+            (use-modules (gnu build file-systems)
+                         (gnu system uuid))
+
+            (define uuid
+              (string->uuid #$(uuid->string (file-system-device fs))))
+
+            (find-partition-by-uuid uuid))))
+
+    (mlet %store-monad ((result (machine-remote-eval machine remote-exp)))
+      (unless result
+        (raise (condition
+                (&message
+                 (message (format #f (G_ "no file system with UUID '~a'")
+                                  (uuid->string (file-system-device fs))))))))
+      (return #t)))
+
+  (mbegin %store-monad
+    (mapm %store-monad check-literal-file-system
+          (filter (lambda (fs)
+                    (string? (file-system-device fs)))
+                  file-systems))
+    (mapm %store-monad check-labeled-file-system
+          (filter (lambda (fs)
+                    (file-system-label? (file-system-device fs)))
+                  file-systems))
+    (mapm %store-monad check-uuid-file-system
+          (filter (lambda (fs)
+              (uuid? (file-system-device fs)))
+                  file-systems))))
+
+(define (machine-check-initrd-modules machine)
+  "Raise a '&message' error condition if any of the modules needed by
+'needed-for-boot' file systems in MACHINE are not available in the initrd."
+  (define file-systems
+    (filter file-system-needed-for-boot?
+            (operating-system-file-systems (machine-operating-system machine))))
+
+  (define (missing-modules fs)
+    (define remote-exp
+      (let ((device (file-system-device fs)))
+        (with-imported-modules (source-module-closure
+                                '((gnu build file-systems)
+                                  (gnu build linux-modules)
+                                  (gnu system uuid)))
+          #~(begin
+              (use-modules (gnu build file-systems)
+                           (gnu build linux-modules)
+                           (gnu system uuid))
+
+              (define dev
+                #$(cond ((string? device) device)
+                        ((uuid? device) #~(find-partition-by-uuid
+                                           (string->uuid
+                                            #$(uuid->string device))))
+                        ((file-system-label? device)
+                         #~(find-partition-by-label
+                            (file-system-label->string #$device)))))
+
+              (missing-modules dev '#$(operating-system-initrd-modules
+                                       (machine-operating-system machine)))))))
+    (mlet %store-monad ((missing (machine-remote-eval machine remote-exp)))
+      (return (list fs missing))))
+
+  (mlet %store-monad ((device (mapm %store-monad missing-modules file-systems)))
+    (for-each (match-lambda
+                ((fs missing)
+                 (unless (null? missing)
+                   (raise (condition
+                           (&message
+                            (message (format #f (G_ "~a missing modules ~{ ~a~}~%")
+                                             (file-system-device fs)
+                                             missing))))))))
+              device)
+    (return #t)))
+
+(define (check-deployment-sanity machine)
+  "Raise a '&message' error condition if it is clear that deploying MACHINE's
+'system' declaration would fail."
+  (mbegin %store-monad
+    (machine-check-file-system-availability machine)
+    (machine-check-initrd-modules machine)))
 
 
 ;;;
@@ -165,8 +314,9 @@ of MACHINE's system profile, ordered from most recent to oldest."
   "Internal implementation of 'deploy-machine' for MACHINE instances with an
 environment type of 'managed-host."
   (maybe-raise-unsupported-configuration-error machine)
-  (mlet %store-monad ((boot-parameters (machine-boot-parameters machine)))
-    (let* ((os (machine-system machine))
+  (mlet %store-monad ((_ (check-deployment-sanity machine))
+                      (boot-parameters (machine-boot-parameters machine)))
+    (let* ((os (machine-operating-system machine))
            (eval (cut machine-remote-eval machine <>))
            (menu-entries (map boot-parameters->menu-entry boot-parameters))
            (bootloader-configuration (operating-system-bootloader os))
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index c3b1e04901..bd3c14033e 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
-;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016, 2018, 2019 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015, 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
@@ -684,9 +684,9 @@ connection alive.")
 (define-public isc-dhcp
   (let* ((bind-major-version "9")
          (bind-minor-version "11")
-         (bind-patch-version "4")
-         (bind-release-type "-P")         ; for patch release, use "-P"
-         (bind-release-version "2")      ; for patch release, e.g. "6"
+         (bind-patch-version "9")
+         (bind-release-type "")         ; for patch release, use "-P"
+         (bind-release-version "")      ; for patch release, e.g. "6"
          (bind-version (string-append bind-major-version
                                       "."
                                       bind-minor-version
@@ -710,7 +710,18 @@ connection alive.")
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'replace-bundled-bind
-             (lambda* (#:key inputs #:allow-other-keys)
+             (lambda* (#:key inputs native-inputs #:allow-other-keys)
+               ;; XXX TODO: Remove the following invocation of 'patch' when
+               ;; isc-dhcp is updated.  It should be needed only for 4.4.1.
+               (let ((patch (string-append (assoc-ref (or native-inputs inputs)
+                                                      "patch")
+                                           "/bin/patch"))
+                     (the-patch (assoc-ref (or native-inputs inputs)
+                                           "fixes-for-newer-bind.patch")))
+                 (format #t "applying '~a'...~%" the-patch)
+                 (invoke patch "--force" "--no-backup-if-mismatch"
+                         "-p1" "--input" the-patch))
+
                (delete-file "bind/bind.tar.gz")
                (copy-file (assoc-ref inputs "bind-source-tarball")
                           "bind/bind.tar.gz")
@@ -743,15 +754,18 @@ connection alive.")
                ;; shell is used.
                (with-directory-excursion "bind"
                  (substitute* "Makefile"
-                   (("\\./configure")
+                   (("\\./configure ")
                     (let ((sh (which "sh")))
                       (string-append "./configure CONFIG_SHELL="
-                                     sh " SHELL=" sh))))
+                                     sh " SHELL=" sh " "))))
 
                  (let ((bind-directory (string-append "bind-" ,bind-version)))
                    (invoke "tar" "xf" "bind.tar.gz")
                    (for-each patch-shebang
                              (find-files bind-directory ".*"))
+                   (substitute* (string-append bind-directory "/configure")
+                     (("/usr/bin/file")
+                      (which "file")))
                    (invoke "tar" "cf" "bind.tar.gz"
                            bind-directory
                            ;; avoid non-determinism in the archive
@@ -787,7 +801,15 @@ connection alive.")
                            (list inetutils net-tools coreutils sed))))
                  #t))))))
 
-      (native-inputs `(("perl" ,perl)))
+      (native-inputs
+       `(("perl" ,perl)
+         ("file" ,file)
+
+         ;; XXX TODO: Remove the following patch, and also the 'patch'
+         ;; program, when isc-dhcp is updated.
+         ("fixes-for-newer-bind.patch"
+          ,(search-patch "isc-dhcp-4.4.1-fixes-for-newer-bind.patch"))
+         ("patch" ,patch)))
 
       (inputs `(("inetutils" ,inetutils)
                 ("net-tools" ,net-tools)
@@ -803,7 +825,7 @@ connection alive.")
                                         "/bind-" bind-version ".tar.gz"))
                     (sha256
                      (base32
-                      "04fq17zksd2b3w6w6padps5n7b6s2lasxpksbhl4378h56vgfnm8"))))
+                      "03n57as73ygw6g3lqsmq2idkykajpbskzgixixdvi5a76m4g0fwn"))))
 
                 ;; When cross-compiling, we need the cross Coreutils and sed.
                 ;; Otherwise just use those from %FINAL-INPUTS.
@@ -1181,7 +1203,7 @@ commands and their arguments.")
 (define-public wpa-supplicant-minimal
   (package
     (name "wpa-supplicant-minimal")
-    (version "2.8")
+    (version "2.9")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1189,7 +1211,7 @@ commands and their arguments.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "15ixzm347n8w6gdvi3j3yks3i15qmp6by9ayvswm34d929m372d6"))
+                "05qzak1mssnxcgdrafifxh9w86a4ha69qabkg4bsigk499xyxggw"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -2606,7 +2628,7 @@ buffers.")
      `(#:tests? #f              ; many of the tests try to load kernel modules
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
+         (replace 'bootstrap
            (lambda _
              ;; Don't run configure in this phase.
              (setenv "NOCONFIGURE" "1")
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 1e21562e91..fb9e78bf92 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -236,8 +236,7 @@ the real span of the lattice.")
     (build-system gnu-build-system)
     (native-inputs
      `(("texlive" ,(texlive-union
-                    (list texlive-fonts-amsfonts
-                          texlive-latex-amsfonts)))))
+                    (list texlive-amsfonts)))))
     (inputs `(("gmp" ,gmp)
               ("libx11" ,libx11)
               ("perl" ,perl)
@@ -345,7 +344,7 @@ precision.")
 (define-public giac
   (package
     (name "giac")
-    (version "1.5.0-61")
+    (version "1.5.0-63")
     (source (origin
               (method url-fetch)
               ;; "~parisse/giac" is not used because the maintainer regularly
@@ -357,7 +356,7 @@ precision.")
                                   "source/giac_" version ".tar.gz"))
               (sha256
                (base32
-                "050vzpqq77fhky32sbisc0ysimgp60xjv39q7y45jkaabdkmclwh"))))
+                "1jp7awyp8j8w6fhn802z8ddbq1fxhkyk9xdf0mq0mm0chpkylwqk"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((ice-9 ftw)
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 43c1bc6c8b..c3bcecf349 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -3692,7 +3692,7 @@ library.")
 (define-public faudio
   (package
     (name "faudio")
-    (version "19.07")
+    (version "19.08")
     (source
      (origin
        (method git-fetch)
@@ -3701,7 +3701,7 @@ library.")
              (commit version)))
        (file-name (string-append name "-" version "-checkout"))
        (sha256
-        (base32 "1wf6skc5agaikc9qgwk8bx56sad31fafs53lqqn4jmx8i76pl0lw"))))
+        (base32 "1v13kfhyr46241vb6a4dcb4gw5f149525sprwa9cj4rv6wlcqgm5"))))
     (arguments
      '(#:tests? #f                      ; No tests.
        #:configure-flags '("-DFFMPEG=ON")))
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 1adf47b08f..74620a2cbe 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -38,7 +38,8 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages statistics)
-  #:use-module (gnu packages web))
+  #:use-module (gnu packages web)
+  #:use-module (srfi srfi-1))
 
 
 ;;; Annotations
@@ -1211,14 +1212,14 @@ determining dependencies between variables, code improvement suggestions.")
 (define-public r-chippeakanno
   (package
     (name "r-chippeakanno")
-    (version "3.18.1")
+    (version "3.18.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ChIPpeakAnno" version))
        (sha256
         (base32
-         "1mwi5s600c3jxy8f1azfrndc3g06qvhbmrp9wqac9nwjbfx1kfji"))))
+         "0wzwdxvvr7wknz5jnan0wsp81c1gv4d2qx0mrb1yybqf4z068779"))))
     (properties `((upstream-name . "ChIPpeakAnno")))
     (build-system r-build-system)
     (propagated-inputs
@@ -1520,14 +1521,14 @@ experiments.")
 (define-public r-genomicinteractions
   (package
     (name "r-genomicinteractions")
-    (version "1.18.0")
+    (version "1.18.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GenomicInteractions" version))
        (sha256
         (base32
-         "0ipvm3c1cqd46n60lsrqzf6fx4b3lwia57jyfx9wcqqg205qj73b"))))
+         "0hq2n5yfr9h2ayn10dy9lz08gd2q0awrm5cy2kqdmz4d8ss4r94p"))))
     (properties
      `((upstream-name . "GenomicInteractions")))
     (build-system r-build-system)
@@ -3528,14 +3529,14 @@ position-specific scores within R and Bioconductor.")
 (define-public r-atacseqqc
   (package
     (name "r-atacseqqc")
-    (version "1.8.1")
+    (version "1.8.5")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ATACseqQC" version))
        (sha256
         (base32
-         "0h5j3724hnd86w22vy3whqx6gkf0nf2dxd2clgzdvjzblbcd5s69"))))
+         "1i8f0vs0z4jbc2yvj1diay7jhcmb1a82zv96xllk771f25nvmmxp"))))
     (properties `((upstream-name . "ATACseqQC")))
     (build-system r-build-system)
     (propagated-inputs
@@ -3620,14 +3621,14 @@ annotations and ontologies.")
 (define-public r-abaenrichment
   (package
     (name "r-abaenrichment")
-    (version "1.14.0")
+    (version "1.14.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ABAEnrichment" version))
        (sha256
         (base32
-         "0av1dysk7qa8c4a0pp7yq89k8c4y40d2gyvsb8f27slvv2i3aad2"))))
+         "1w322wsp6bd3gyfwzgdf088cvfmpq774knr57d0dj420ljf4xn48"))))
     (properties `((upstream-name . "ABAEnrichment")))
     (build-system r-build-system)
     (propagated-inputs
@@ -4840,14 +4841,14 @@ annotations.")
 (define-public r-rsubread
   (package
     (name "r-rsubread")
-    (version "1.34.4")
+    (version "1.34.6")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rsubread" version))
        (sha256
         (base32
-         "1230p8nsakifmpsqfiaj8rpm7npa8ab903mfjmayfa71n6yzvcbs"))))
+         "0nnfh4hnrs5kd72m8c50cidbsxjz12szw2vynpmg8q0wpd99q550"))))
     (properties `((upstream-name . "Rsubread")))
     (build-system r-build-system)
     (inputs `(("zlib" ,zlib)))
@@ -5128,3 +5129,25 @@ data, to only emphasize the data that actually matters.")
 accessibility data.  It also extends the monocle package for use in chromatin
 accessibility data.")
     (license license:expat)))
+
+;; This is the latest commit on the "monocle3" branch.
+(define-public r-cicero-monocle3
+  (let ((commit "fa2fb6515857a8cfc88bc9af044f34de1bcd2b7b")
+        (revision "1"))
+    (package (inherit r-cicero)
+      (name "r-cicero-monocle3")
+      (version (git-version "1.3.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/cole-trapnell-lab/cicero-release.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "077yza93wdhi08n40md20jwk55k9lw1f3y0063qkk90cpz60wi0c"))))
+      (propagated-inputs
+       `(("r-monocle3" ,r-monocle3)
+         ,@(alist-delete "r-monocle"
+                         (package-propagated-inputs r-cicero)))))))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index b1cf294177..898b8d200e 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019 Brian Leung <bkleung89@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -4195,8 +4196,15 @@ command, or queried for specific k-mers with @code{jellyfish query}.")
        (modify-phases %standard-phases
          (add-after 'unpack 'set-cc
            (lambda _ (setenv "CC" "gcc") #t))
-         ;; FIXME: This fails with "permission denied".
-         (delete 'reset-gzip-timestamps))))
+
+         (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))))))
     (native-inputs
      `(("python-cython" ,python-cython)
        ("python-pytest" ,python-pytest)
@@ -7439,13 +7447,13 @@ names in their natural, rather than lexicographic, order.")
 (define-public r-edger
   (package
     (name "r-edger")
-    (version "3.26.5")
+    (version "3.26.6")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "edgeR" version))
               (sha256
                (base32
-                "0iba4krz30dx5b0s89n5cfkwn64867s7vmvvfqms9lbcr4kj439m"))))
+                "17vadhamjv4x0l4qqq2p2fi6j2bkllz5zd8dq761vgd5ic23zizm"))))
     (properties `((upstream-name . "edgeR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -7506,13 +7514,13 @@ coding changes and predict coding outcomes.")
 (define-public r-limma
   (package
     (name "r-limma")
-    (version "3.40.2")
+    (version "3.40.6")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "limma" version))
               (sha256
                (base32
-                "1d4ig2b7fa9mwja52isxrwmprfdjdk1mlcf2skhdp51l24z6wbk7"))))
+                "166z8cdh6w90rldqqaar7hyaskwiy4smawjfbn4sn58clv6q3mp8"))))
     (build-system r-build-system)
     (home-page "http://bioinf.wehi.edu.au/limma")
     (synopsis "Package for linear models for microarray and RNA-seq data")
@@ -7639,13 +7647,13 @@ annotation data packages using SQLite data storage.")
 (define-public r-biomart
   (package
     (name "r-biomart")
-    (version "2.40.1")
+    (version "2.40.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "biomaRt" version))
               (sha256
                (base32
-                "1abl0c4qbhfqf9ixdp74183phm7s8rszrr5ldczm59b8vyng8rhx"))))
+                "022m1r44s00c5k9bmv0lr22lcn662nhc91aazvv0yyysxjamyf60"))))
     (properties
      `((upstream-name . "biomaRt")))
     (build-system r-build-system)
@@ -7672,13 +7680,13 @@ powerful online queries from gene annotation to database mining.")
 (define-public r-biocparallel
   (package
     (name "r-biocparallel")
-    (version "1.18.0")
+    (version "1.18.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "BiocParallel" version))
               (sha256
                (base32
-                "0v8rhf3hbgb3v32h2pmsv1y6q2x4airmpp50fk7z6ardcn4aza7x"))))
+                "1j6wbls4qgvi5gj99c51r00jhxrzxk3x3258wg7dcjzbfqypvyw3"))))
     (properties
      `((upstream-name . "BiocParallel")))
     (build-system r-build-system)
@@ -7800,13 +7808,13 @@ array-like objects like @code{DataFrame} objects (typically with Rle columns),
 (define-public r-summarizedexperiment
   (package
     (name "r-summarizedexperiment")
-    (version "1.14.0")
+    (version "1.14.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "SummarizedExperiment" version))
               (sha256
                (base32
-                "1ypk63pdml89y81pr41i2zq0fimsaxsa5lgpg6xs5cwikyaq0pci"))))
+                "0bhwgzrdipr0qjzc4j0qspqprx3v1rvshmx4j6506dv43pqlgp3f"))))
     (properties
      `((upstream-name . "SummarizedExperiment")))
     (build-system r-build-system)
@@ -7864,13 +7872,13 @@ alignments.")
 (define-public r-rtracklayer
   (package
     (name "r-rtracklayer")
-    (version "1.44.0")
+    (version "1.44.2")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "rtracklayer" version))
               (sha256
                (base32
-                "161gcks9b12993g9k27gf7wfh8lgd8m8rr7x2slgfqqssk0yrmpd"))))
+                "03b4rfsbzjjf5kxcsjv7kq8hrsgcvz9rfzcn2v7fx3nr818pbb8s"))))
     (build-system r-build-system)
     (arguments
      `(#:phases
@@ -7911,13 +7919,13 @@ as well as query and modify the browser state, such as the current viewport.")
 (define-public r-genomicfeatures
   (package
     (name "r-genomicfeatures")
-    (version "1.36.3")
+    (version "1.36.4")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomicFeatures" version))
               (sha256
                (base32
-                "0zkd57i5qjxsravv0gbyckc0wrnqzgxd61ibh3jmhmrccrr9ihn3"))))
+                "0mzqv8pyxx5nwchyx3radym9ws2f9hb50xc9abjsjs4w4pv91j3k"))))
     (properties
      `((upstream-name . "GenomicFeatures")))
     (build-system r-build-system)
@@ -8335,13 +8343,13 @@ paired-end data.")
 (define-public r-rcas
   (package
     (name "r-rcas")
-    (version "1.10.0")
+    (version "1.10.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "RCAS" version))
               (sha256
                (base32
-                "1h4vf5gzilqbdrd8m9l3zc2m4sca8cir8366a7njgd558k7ld5kl"))))
+                "06z5zmdi34jblw37z6ff8hb6lvvi0chwr37acwqfn8d27ax9lakz"))))
     (properties `((upstream-name . "RCAS")))
     (build-system r-build-system)
     (propagated-inputs
@@ -9399,14 +9407,14 @@ of mass spectrometry based proteomics data.")
 (define-public r-msnid
   (package
     (name "r-msnid")
-    (version "1.18.0")
+    (version "1.18.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MSnID" version))
        (sha256
         (base32
-         "18mp8zacawhfapfwpq8czbswxix2ykvqhwjga54v0a99zg3k87h3"))))
+         "1n49l5mjdz7p4g2nwsbhm1jcj42sv6lsriq77n2imvacsvk0qfmb"))))
     (properties `((upstream-name . "MSnID")))
     (build-system r-build-system)
     (propagated-inputs
@@ -10406,14 +10414,14 @@ provided.")
 (define-public r-hdf5array
   (package
     (name "r-hdf5array")
-    (version "1.12.1")
+    (version "1.12.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "HDF5Array" version))
        (sha256
         (base32
-         "0n8zc1x582vwb0zfhrjmnqbnpqky9zbhjc2j836i0a4yisklwdcp"))))
+         "0afradisrr5gn0lf2kxjw55vdm3lm9mlgx53qlr9r40c1hrydpf5"))))
     (properties `((upstream-name . "HDF5Array")))
     (build-system r-build-system)
     (inputs
@@ -14804,3 +14812,406 @@ trees by inserting random mutations.  The tbsp package implements an
 alternative method to detect significant, cell type specific sequence
 mutations from scRNA-Seq data.")
       (license license:expat))))
+
+(define-public tabixpp
+  (package
+   (name "tabixpp")
+   (version "1.0.0")
+   (source (origin
+     (method git-fetch)
+     (uri (git-reference
+           (url "https://github.com/ekg/tabixpp")
+           (commit (string-append "v" version))))
+     (file-name (git-file-name name version))
+     (sha256
+      (base32 "08vx6nsipk971cyr8z53rnzwkvlld63kcn1fw0pwddynz91xfny8"))))
+   (build-system gnu-build-system)
+   (inputs
+    `(("htslib" ,htslib)
+      ("zlib" ,zlib)))
+   (arguments
+    `(#:tests? #f ; There are no tests to run.
+      #:phases
+      (modify-phases %standard-phases
+        (delete 'configure) ; There is no configure phase.
+        ;; The build phase needs overriding the location of htslib.
+        (replace 'build
+          (lambda* (#:key inputs #:allow-other-keys)
+            (let ((htslib-ref (assoc-ref inputs "htslib")))
+              (invoke "make"
+                      (string-append "HTS_LIB=" htslib-ref "/lib/libhts.a")
+                      "HTS_HEADERS="    ; No need to check for headers here.
+                      (string-append "LIBPATH=-L. -L" htslib-ref "/include")))))
+        (replace 'install
+          (lambda* (#:key outputs #:allow-other-keys)
+            (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+              (install-file "tabix++" bin))
+            #t)))))
+   (home-page "https://github.com/ekg/tabixpp")
+   (synopsis "C++ wrapper around tabix project")
+   (description "This is a C++ wrapper around the Tabix project which abstracts
+some of the details of opening and jumping in tabix-indexed files.")
+   (license license:expat)))
+
+(define tabixpp-freebayes
+  ;; This version works with FreeBayes while the released
+  ;; version doesn't. The released creates a variable with the name \"vcf\"
+  ;; somewhere, which is also the name of a namespace in vcflib.
+  (let ((commit "bbc63a49acc52212199f92e9e3b8fba0a593e3f7"))
+    (package
+      (inherit tabixpp)
+      (name "tabixpp-freebayes")
+      (version (git-version "0.0.0" "1" commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/ekg/tabixpp/")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32 "017qsmsc2kyiyzqr9nl8cc6pfldxf16dbn8flx5i59mbqr9ydi7g")))))))
+
+(define-public smithwaterman
+  ;; TODO: Upgrading smithwaterman breaks FreeBayes.
+  (let ((commit "203218b47d45ac56ef234716f1bd4c741b289be1"))
+    (package
+      (name "smithwaterman")
+      (version (string-append "0-1." (string-take commit 7)))
+      (source (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/ekg/smithwaterman/")
+              (commit commit)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0z9xsmsv452kgdfbbwydyc6nymg3fwyv8zswls8qjin3r4ia4415"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f ; There are no tests to run.
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure) ; There is no configure phase.
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (install-file "smithwaterman" bin))
+               #t)))))
+      (home-page "https://github.com/ekg/smithwaterman")
+      (synopsis "Implementation of the Smith-Waterman algorithm")
+      (description "Implementation of the Smith-Waterman algorithm.")
+      ;; The licensing terms are unclear: https://github.com/ekg/smithwaterman/issues/9.
+      (license (list license:gpl2 license:expat)))))
+
+(define-public multichoose
+  (package
+    (name "multichoose")
+    (version "1.0.3")
+    (source (origin
+      (method git-fetch)
+      (uri (git-reference
+            (url "https://github.com/ekg/multichoose/")
+            (commit (string-append "v" version))))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32 "0ci5fqvmpamwgxvmyd79ygj6n3bnbl3vc7b6h1sxz58186sm3pfs"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; Tests require node.
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure) ; There is no configure phase.
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+               ;; TODO: There are Python modules for these programs too.
+               (install-file "multichoose" bin)
+               (install-file "multipermute" bin))
+             #t)))))
+    (home-page "https://github.com/ekg/multichoose")
+    (synopsis "Efficient loopless multiset combination generation algorithm")
+    (description "This library implements an efficient loopless multiset
+combination generation algorithm which is (approximately) described in
+\"Loopless algorithms for generating permutations, combinations, and other
+combinatorial configurations.\", G. Ehrlich - Journal of the ACM (JACM),
+1973. (Algorithm 7.)")
+    (license license:expat)))
+
+(define-public fsom
+  (let ((commit "a6ef318fbd347c53189384aef7f670c0e6ce89a3"))
+    (package
+      (name "fsom")
+      (version (git-version "0.0.0" "1" commit))
+      (source (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/ekg/fsom/")
+              (commit commit)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0gw1lpvr812pywg9y546x0h1hhj261xwls41r6kqhddjlrcjc0pi"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f ; There are no tests to run.
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure) ; There is no configure phase.
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (install-file "fsom" bin))
+               #t)))))
+      (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)
+neural networks.")
+      (license license:gpl3))))
+
+(define-public fastahack
+  (let ((commit "c68cebb4f2e5d5d2b70cf08fbdf1944e9ab2c2dd"))
+    (package
+      (name "fastahack")
+      (version (git-version "0.0.0" "1" commit))
+      (source (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/ekg/fastahack/")
+              (commit commit)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0hfdv67l9g611i2ck4l92pd6ygmsp9g1ph4zx1ni7qkpsikf0l19"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f ; Unclear how to run tests: https://github.com/ekg/fastahack/issues/15
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure) ; There is no configure phase.
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (install-file "fastahack" bin))
+               #t)))))
+      (home-page "https://github.com/ekg/fastahack")
+      (synopsis "Indexing and sequence extraction from FASTA files")
+      (description "Fastahack is a small application for indexing and
+extracting sequences and subsequences from FASTA files.  The included library
+provides a FASTA reader and indexer that can be embedded into applications
+which would benefit from directly reading subsequences from FASTA files.  The
+library automatically handles index file generation and use.")
+      (license (list license:expat license:gpl2)))))
+
+(define-public vcflib
+  (let ((commit "5ac091365fdc716cc47cc5410bb97ee5dc2a2c92")
+        (revision "1"))
+    (package
+      (name "vcflib")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/vcflib/vcflib/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1gijvcz1lcdn5kvgzb671l6iby0379qk00nqmcrszgk67hfwx6kq"))))
+      (build-system gnu-build-system)
+      (inputs
+       `(("zlib" ,zlib)))
+      (native-inputs
+       `(("perl" ,perl)
+         ("python" ,python-2)
+         ;; Submodules.
+         ;; This package builds against the .o files so we need to extract the source.
+         ("tabixpp-src" ,(package-source tabixpp-freebayes))
+         ("smithwaterman-src" ,(package-source smithwaterman))
+         ("multichoose-src" ,(package-source multichoose))
+         ("fsom-src" ,(package-source fsom))
+         ("filevercmp-src" ,(package-source filevercmp))
+         ("fastahack-src" ,(package-source fastahack))
+         ("intervaltree-src"
+          ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/ekg/intervaltree/")
+                   (commit "dbb4c513d1ad3baac516fc1484c995daf9b42838")))
+             (file-name "intervaltree-src-checkout")
+             (sha256
+              (base32 "1fy5qbj4bg8d2bjysvaa9wfnqn2rj2sk5yra2h4l5pzvy53f23fj"))))))
+      (arguments
+       `(#:tests? #f ; no tests
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (delete 'check)
+           (add-after 'unpack 'unpack-submodule-sources
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((unpack (lambda (source target)
+                               (with-directory-excursion target
+                                 (if (file-is-directory? (assoc-ref inputs source))
+                                     (copy-recursively (assoc-ref inputs source) ".")
+                                     (invoke "tar" "xvf"
+                                             (assoc-ref inputs source)
+                                             "--strip-components=1"))))))
+                 (and
+                  (unpack "intervaltree-src" "intervaltree")
+                  (unpack "fastahack-src" "fastahack")
+                  (unpack "filevercmp-src" "filevercmp")
+                  (unpack "fsom-src" "fsom")
+                  (unpack "multichoose-src" "multichoose")
+                  (unpack "smithwaterman-src" "smithwaterman")
+                  (unpack "tabixpp-src" "tabixpp")))))
+           (replace 'build
+             (lambda* (#:key inputs make-flags #:allow-other-keys)
+               (with-directory-excursion "tabixpp"
+                 (invoke "make"))
+               (invoke "make" "CC=gcc"
+                       (string-append "CFLAGS=\"" "-Itabixpp " "\"")
+                       "all")))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
+                     (lib (string-append (assoc-ref outputs "out") "/lib")))
+                 (for-each (lambda (file)
+                             (install-file file bin))
+                           (find-files "bin" ".*"))
+                 ;; The header files in src/ do not interface libvcflib,
+                 ;; therefore they are left out.
+                 (install-file "libvcflib.a" lib))
+               #t)))))
+      (home-page "https://github.com/vcflib/vcflib/")
+      (synopsis "Library for parsing and manipulating VCF files")
+      (description "Vcflib provides methods to manipulate and interpret
+sequence variation as it can be described by VCF.  It is both an API for parsing
+and operating on records of genomic variation as it can be described by the VCF
+format, and a collection of command-line utilities for executing complex
+manipulations on VCF files.")
+      (license license:expat))))
+
+(define-public freebayes
+  (let ((commit "3ce827d8ebf89bb3bdc097ee0fe7f46f9f30d5fb")
+        (revision "1")
+        (version "1.0.2"))
+    (package
+      (name "freebayes")
+      (version (git-version version revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/ekg/freebayes.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32 "1sbzwmcbn78ybymjnhwk7qc5r912azy5vqz2y7y81616yc3ba2a2"))))
+      (build-system gnu-build-system)
+      (inputs
+       `(("bamtools" ,bamtools)
+         ("htslib" ,htslib)
+         ("zlib" ,zlib)))
+      (native-inputs
+       `(("bc" ,bc)                     ; Needed for running tests.
+         ("samtools" ,samtools)         ; Needed for running tests.
+         ("parallel" ,parallel)         ; Needed for running tests.
+         ("perl" ,perl)                 ; Needed for running tests.
+         ("procps" ,procps)             ; Needed for running tests.
+         ("python" ,python-2)           ; Needed for running tests.
+         ("vcflib-src" ,(package-source vcflib))
+         ;; These are submodules for the vcflib version used in freebayes.
+         ;; This package builds against the .o files so we need to extract the source.
+         ("tabixpp-src" ,(package-source tabixpp-freebayes))
+         ("smithwaterman-src" ,(package-source smithwaterman))
+         ("multichoose-src" ,(package-source multichoose))
+         ("fsom-src" ,(package-source fsom))
+         ("filevercmp-src" ,(package-source filevercmp))
+         ("fastahack-src" ,(package-source fastahack))
+         ("intervaltree-src"
+          ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/ekg/intervaltree/")
+                   (commit "dbb4c513d1ad3baac516fc1484c995daf9b42838")))
+             (file-name "intervaltree-src-checkout")
+             (sha256
+              (base32 "1fy5qbj4bg8d2bjysvaa9wfnqn2rj2sk5yra2h4l5pzvy53f23fj"))))
+         ;; These submodules are needed to run the tests.
+         ("bash-tap-src" ,(package-source bash-tap))
+         ("test-simple-bash-src"
+          ,(origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/ingydotnet/test-simple-bash/")
+                   (commit "124673ff204b01c8e96b7fc9f9b32ee35d898acc")))
+             (file-name "test-simple-bash-src-checkout")
+             (sha256
+              (base32 "043plp6z0x9yf7mdpky1fw7zcpwn1p47px95w9mh16603zqqqpga"))))))
+      (arguments
+       `(#:make-flags
+         (list "CC=gcc"
+               (string-append "BAMTOOLS_ROOT="
+                              (assoc-ref %build-inputs "bamtools")))
+         #:test-target "test"
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (add-after 'unpack 'fix-tests
+             (lambda _
+               (substitute* "test/t/01_call_variants.t"
+                 (("grep -P \"\\(\\\\t500\\$\\|\\\\t11000\\$\\|\\\\t1000\\$\\)\"")
+                  "grep -E '	(500|11000|1000)$'"))
+               #t))
+           (add-after 'unpack 'unpack-submodule-sources
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((unpack (lambda (source target)
+                               (with-directory-excursion target
+                                 (if (file-is-directory? (assoc-ref inputs source))
+                                     (copy-recursively (assoc-ref inputs source) ".")
+                                     (invoke "tar" "xvf"
+                                             (assoc-ref inputs source)
+                                             "--strip-components=1"))))))
+                 (and
+                  (unpack "vcflib-src" "vcflib")
+                  (unpack "fastahack-src" "vcflib/fastahack")
+                  (unpack "filevercmp-src" "vcflib/filevercmp")
+                  (unpack "fsom-src" "vcflib/fsom")
+                  (unpack "intervaltree-src" "vcflib/intervaltree")
+                  (unpack "multichoose-src" "vcflib/multichoose")
+                  (unpack "smithwaterman-src" "vcflib/smithwaterman")
+                  (unpack "tabixpp-src" "vcflib/tabixpp")
+                  (unpack "test-simple-bash-src" "test/test-simple-bash")
+                  (unpack "bash-tap-src" "test/bash-tap")))))
+           (add-after 'unpack-submodule-sources 'fix-makefiles
+             (lambda _
+               ;; We don't have the .git folder to get the version tag from.
+               (substitute* "vcflib/Makefile"
+                 (("^GIT_VERSION.*")
+                  (string-append "GIT_VERSION = v" ,version)))
+               (substitute* "src/Makefile"
+                 (("-I\\$\\(BAMTOOLS_ROOT\\)/src")
+                  "-I$(BAMTOOLS_ROOT)/include/bamtools"))
+               #t))
+           (add-before 'build 'build-tabixpp-and-vcflib
+             (lambda* (#:key inputs make-flags #:allow-other-keys)
+               (with-directory-excursion "vcflib"
+                 (with-directory-excursion "tabixpp"
+                   (apply invoke "make"
+                          (string-append "HTS_LIB="
+                                         (assoc-ref inputs "htslib")
+                                         "/lib/libhts.a")
+                          make-flags))
+                 (apply invoke "make"
+                        (string-append "CFLAGS=-Itabixpp")
+                        "all"
+                        make-flags))))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (install-file "bin/freebayes" bin)
+                 (install-file "bin/bamleftalign" bin))
+               #t)))))
+      (home-page "https://github.com/ekg/freebayes")
+      (synopsis "Haplotype-based variant detector")
+      (description "FreeBayes is a Bayesian genetic variant detector designed to
+find small polymorphisms, specifically SNPs (single-nucleotide polymorphisms),
+indels (insertions and deletions), MNPs (multi-nucleotide polymorphisms), and
+complex events (composite insertion and substitution events) smaller than the
+length of a short-read sequencing alignment.")
+      (license license:expat))))
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index e622170815..b0893d9410 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016, 2017, 2018 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016, 2017, 2018, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Tomáš Čech <sleep_walker@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -183,35 +183,38 @@ XML-RPC over SCGI.")
     (license l:gpl2+)))
 
 (define-public tremc
-  (package
-    (name "tremc")
-    (version "0.9.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/tremc/tremc.git")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1yhwvlcyv1s830p5a7q5x3mkb3mbvr5cn5nh7y62l5b6iyyynlvm"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:tests? #f                      ; no test suite
-       #:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         ;; The software is just a Python script that must be copied into place.
-         (delete 'configure)
-         (delete 'build))))
-    (inputs
-     `(("python" ,python)))
-    (synopsis "Console client for the Transmission BitTorrent daemon")
-    (description "Tremc is a console client, with a curses interface, for the
+  (let ((commit "4d50dab7376601daca13f7be6eabc0eaa057c1b0")
+        (revision "0"))
+    (package
+      (name "tremc")
+      (version (git-version "0.9.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/tremc/tremc.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0qpi65n8rv7l9mg8qyqx70z83inkl8v5r5nks65c99lhscdki0w7"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f                      ; no test suite
+         #:make-flags
+         (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+         #:phases
+         (modify-phases %standard-phases
+           ;; The software is just a Python script that must be copied into place.
+           (delete 'configure)
+           (delete 'build))))
+      (inputs
+       `(("python" ,python)))
+      (synopsis "Console client for the Transmission BitTorrent daemon")
+      (description "Tremc is a console client, with a curses interface, for the
 Transmission BitTorrent daemon.")
-    (home-page "https://github.com/tremc/tremc")
-    (license l:gpl3+)))
+      (home-page "https://github.com/tremc/tremc")
+      (license l:gpl3+))))
 
 (define-public transmission-remote-cli
   (package
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index c41870332c..7e0071ecf9 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -76,7 +76,7 @@
 (define-public nss-certs
   (package
     (name "nss-certs")
-    (version "3.44.1")
+    (version "3.45")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -87,7 +87,7 @@
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "1y0jvva4s3j7cjz22kqw2lsml0an1295bgpc2raf7kc9r60cpr7w"))))
+                "12sfq9xvpwpc22qnjsg1if1lmchiy33byrh92wn91phz7li0abqi"))))
     (build-system gnu-build-system)
     (outputs '("out"))
     (native-inputs
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index 3dccecba88..3b45c430ca 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -73,7 +73,8 @@
   #:use-module (srfi srfi-1))
 
 (define %preserved-third-party-files
-  '("base/third_party/dmg_fp" ;X11-style
+  '("base/third_party/cityhash" ;Expat
+    "base/third_party/dmg_fp" ;X11-style
     "base/third_party/dynamic_annotations" ;BSD-2
     "base/third_party/icu" ;Unicode, X11-style
     "base/third_party/superfasthash" ;BSD-3
@@ -85,7 +86,7 @@
     "courgette/third_party/divsufsort" ;Expat
     "net/third_party/mozilla_security_manager" ;MPL-1.1/GPL2+/LGPL2.1+
     "net/third_party/nss" ;MPL-2.0
-    "net/third_party/quic" ;BSD-3
+    "net/third_party/quiche" ;BSD-3
     "net/third_party/uri_template" ;ASL2.0
     "third_party/abseil-cpp" ;ASL2.0
     "third_party/adobe/flash/flapper_version.h" ;no license, trivial
@@ -105,6 +106,10 @@
     "third_party/blink" ;BSD-3, LGPL2+
     "third_party/boringssl" ;OpenSSL/ISC (Google additions are ISC)
     "third_party/boringssl/src/third_party/fiat" ;Expat
+    "third_party/boringssl/src/third_party/sike" ;Expat
+    ;; XXX: these files are generated by fp-$arch.pl in the above directory.
+    "third_party/boringssl/linux-aarch64/crypto/third_party/sike/asm/fp-armv8.S"
+    "third_party/boringssl/linux-x86_64/crypto/third_party/sike/asm/fp-x86_64.S"
     "third_party/breakpad" ;BSD-3
     "third_party/brotli" ;Expat
     "third_party/cacheinvalidation" ;ASL2.0
@@ -164,6 +169,7 @@
     "third_party/nasm" ;BSD-2
     "third_party/node" ;Expat
     "third_party/node/node_modules/polymer-bundler/lib/third_party/UglifyJS2" ;BSD-2
+    "third_party/openscreen" ;BSD-3
     "third_party/ots" ;BSD-3
     "third_party/pdfium" ;BSD-3
     "third_party/pdfium/third_party/agg23" ;Expat
@@ -182,9 +188,10 @@
     "third_party/s2cellid" ;ASL2.0
     "third_party/sfntly" ;ASL2.0
     "third_party/skia" ;BSD-3
+    "third_party/skia/include/third_party/skcms" ;BSD-3
     "third_party/skia/third_party/gif" ;MPL1.1/GPL2+/LGPL2.1+
     "third_party/skia/third_party/skcms" ;BSD-3
-    "third_party/skia/third_party/vulkan" ;BSD-3
+    "third_party/skia/third_party/vulkanmemoryallocator" ;BSD-3, Expat
     "third_party/smhasher" ;Expat, public domain
     "third_party/speech-dispatcher" ;GPL2+
     "third_party/spirv-headers" ;ASL2.0
@@ -231,9 +238,9 @@ from forcing GEXP-PROMISE."
                       #:system system
                       #:guile-for-build guile)))
 
-(define %chromium-version "75.0.3770.142")
-(define %ungoogled-revision "5d8abc38b43a62f379615a0dc972b29d9aebb4b4")
-(define %debian-revision "debian/75.0.3770.90-1")
+(define %chromium-version "76.0.3809.100")
+(define %ungoogled-revision "8eba5c0df1a318012e3deab39a9add252a0d56a3")
+(define %debian-revision "debian/76.0.3809.87-2")
 (define package-revision "0")
 (define %package-version (string-append %chromium-version "-"
                                         package-revision "."
@@ -247,7 +254,7 @@ from forcing GEXP-PROMISE."
                         %chromium-version ".tar.xz"))
     (sha256
      (base32
-      "1b550hc9sav0qdnh4hiin2bb3jmfyrb3dhbmnc0v8662rjknq3ji"))))
+      "0vfjfxsqf8jrmd7y08ln1lpbilwi150875zn2bawwdq87vd3mncc"))))
 
 (define %ungoogled-origin
   (origin
@@ -258,7 +265,7 @@ from forcing GEXP-PROMISE."
                               (string-take %ungoogled-revision 7)))
     (sha256
      (base32
-      "1vk8jzzsn20ysn4nlz84mwwhfa9nnywzd1lrahlhcky9pf6xzpwa"))))
+      "08fd9whfc1qky44xqxbypr7jz1rg6cma017wj4b5c5b14grxz6k6"))))
 
 (define %debian-origin
   (origin
@@ -272,7 +279,29 @@ from forcing GEXP-PROMISE."
                                   (string-take %debian-revision 7))))
     (sha256
      (base32
-      "0sh6z2lx44zb31qrpa29vm0sw09dxi7i9h6fsq3ivfxjs7v98bbx"))))
+      "1fjhpzrxmgjr7i31li1vsfmp0qkbi0cpyc7p1zjwvf2x4da0v907"))))
+
+(define (gentoo-patch name hash revision)
+  (origin
+    (method url-fetch)
+    (uri (string-append "https://gitweb.gentoo.org/repo/gentoo.git/plain"
+                        "/www-client/chromium/files/" name "?id=" revision))
+    (file-name name)
+    (sha256 (base32 hash))))
+
+(define-syntax-rule (gentoo-patches (name hash) ...)
+  (list (gentoo-patch name hash "9fd80e7d75aa63843ec33c9d44fee32596ae8f25")
+        ...))
+
+(define %auxiliary-patches
+  ;; XXX: Debians "gcc/wrong-namespace.patch" and "fixes/inspector.patch" does
+  ;; not work for us, so we take these upstream fixes via Gentoo instead.
+  (gentoo-patches
+   ("chromium-76-quiche.patch" "1cs0y16jn7r1nxh0j36vqcsdvigl902kdcqfmyivnxgblrx66l2i")
+   ("chromium-76-gcc-blink-namespace1.patch"
+    "0k7nrn0dhvqxj4sg2gndzxih0l1f77h6pv7jhcdz7h69sm4xci2z")
+   ("chromium-76-gcc-blink-namespace2.patch"
+    "014y2d8ii9sr340sjbv1fhsjd5s3dl0vbmq5wzlkdjsp91dcn9ch")))
 
 ;; This is a "computed" origin that does the following:
 ;; *) Runs the Ungoogled scripts on a pristine Chromium tarball.
@@ -314,6 +343,12 @@ from forcing GEXP-PROMISE."
                    (force-output)
                    (invoke "tar" "xf" #+chromium-source)
 
+                   ;; Ungoogled-Chromium contains a forked subset of the Debian
+                   ;; patches.  Disable those, as we apply newer versions later.
+                   (substitute* "patches/series"
+                     ((".*/debian_buster/.*")
+                      ""))
+
                    (format #t "Ungooglifying...~%")
                    (force-output)
                    (invoke "python3" "utils/prune_binaries.py" chromium-dir
@@ -330,16 +365,7 @@ from forcing GEXP-PROMISE."
                      (force-output)
                      (let* ((debian  #+debian-source)
                             (patches (string-append debian "/debian/patches"))
-                            (series  (string-append patches "/series"))
-                            (grep-q (lambda (query file)
-                                      (with-input-from-file file
-                                        (lambda ()
-                                          (let loop ((line (read-line))
-                                                     (match #f))
-                                            (if (or match (eof-object? line))
-                                                (if match #t #f)
-                                                (loop (read-line)
-                                                      (string-contains line query)))))))))
+                            (series  (string-append patches "/series")))
                        (with-input-from-file series
                          (lambda ()
                            (let loop ((line (read-line)))
@@ -347,19 +373,35 @@ from forcing GEXP-PROMISE."
                                (when (and (> (string-length line) 1)
                                           ;; Skip the Debian-specific ones.
                                           (not (string-prefix? "debianization/" line))
+                                          (not (string-prefix? "buster/" line))
                                           ;; And those that conflict with Ungoogled.
                                           (not (any (cute string-suffix? <> line)
                                                     '("widevine-buildflag.patch"
                                                       "signin.patch"
-                                                      "third-party-cookies.patch")))
-                                          ;; Ungoogled includes a subset of the Debian
-                                          ;; patches.  Exclude those already present.
-                                          (not (grep-q line "../patches/series")))
+                                                      "third-party-cookies.patch"
+
+                                                      ;; XXX: 'fixes/inspector.patch'
+                                                      ;; makes v8 reuse the top-level
+                                                      ;; third_party/inspector_protocol
+                                                      ;; instead of its own bundled copy,
+                                                      ;; but that does not work here for
+                                                      ;; some reason.  Ignore that patch
+                                                      ;; and those that depend on it.
+                                                      "wrong-namespace.patch"
+                                                      "explicit-specialization.patch"
+                                                      "inspector.patch"))))
                                  (invoke "patch" "--force" "-p1" "--input"
                                          (string-append patches "/" line)
                                          "--no-backup-if-mismatch"))
                                (loop (read-line)))))))
 
+                     (format #t "Applying Guix-specific patches...~%")
+                     (force-output)
+                     (for-each (lambda (patch)
+                                 (invoke "patch" "--force" "-p1" "--input"
+                                         patch "--no-backup-if-mismatch"))
+                               '#+%auxiliary-patches)
+
                      (format #t "Pruning third party files...~%")
                      (force-output)
                      (apply invoke "python"
@@ -458,7 +500,6 @@ from forcing GEXP-PROMISE."
              "is_clang=false"
              ;; Disable debugging features to save space.  These are normally
              ;; pulled in by "is_official_build", but that requires "is_clang".
-             "blink_symbol_level=0"
              "enable_iterator_debugging=false"
              "exclude_unwind_tables=true"
              ;; Optimize for building everything at once, as opposed to
@@ -488,7 +529,7 @@ from forcing GEXP-PROMISE."
                    '("use_vaapi=true")
                    '())
 
-             ;; Don't arbitrarily restrict formats supported by system ffmpeg.
+             ;; Do not artifically restrict formats supported by system ffmpeg.
              "proprietary_codecs=true"
              "ffmpeg_branding=\"Chrome\""
 
@@ -561,12 +602,12 @@ from forcing GEXP-PROMISE."
              (substitute* "third_party/webrtc/rtc_base/strings/json.h"
                (("#include \"third_party/jsoncpp/") "#include \"json/"))
 
-             (substitute* '("ui/gfx/skia_util.h"
+             (substitute* '("components/viz/common/gpu/vulkan_context_provider.h"
                             "components/viz/common/resources/resource_format_utils.h")
                (("third_party/vulkan/include/") ""))
 
              (substitute* "third_party/skia/include/gpu/vk/GrVkVulkan.h"
-               (("\\.\\./\\.\\./include/third_party/vulkan/") ""))
+               (("include/third_party/vulkan/") ""))
 
              ;; Building chromedriver embeds some files using the ZIP
              ;; format which doesn't support timestamps before
@@ -587,6 +628,9 @@ from forcing GEXP-PROMISE."
              (setenv "AR" "ar") (setenv "NM" "nm")
              (setenv "CC" "gcc") (setenv "CXX" "g++")
 
+             ;; Prevent GCC from optimizing away null pointer safety checks.
+             (setenv "CXXFLAGS" "-fno-delete-null-pointer-checks")
+
              ;; Work around <https://bugs.gnu.org/30756>.
              (unsetenv "C_INCLUDE_PATH")
              (unsetenv "CPLUS_INCLUDE_PATH")
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 3bd0d664da..17c85fe512 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -78,14 +78,14 @@
 (define-public r-clipr
   (package
     (name "r-clipr")
-    (version "0.6.0")
+    (version "0.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "clipr" version))
        (sha256
         (base32
-         "0k9kimkmmj9k7290sxiqn4kd1vvm4w7q9a44wp0w30b7yjpavx2m"))))
+         "1qn2p13d0c1bpqss6mv9hk60980rzhznfqpyaf5x0fy65svy9903"))))
     (build-system r-build-system)
     (home-page "https://github.com/mdlincoln/clipr")
     (synopsis "Read and write from the system clipboard")
@@ -97,14 +97,14 @@ the system clipboards.")
 (define-public r-ellipsis
   (package
     (name "r-ellipsis")
-    (version "0.2.0")
+    (version "0.2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ellipsis" version))
        (sha256
         (base32
-         "0hdk79q4wn5nq52p8qd65kqz81l0b8gfzsbzyvmfais0p24qclib"))))
+         "0hx9l043433bwm1np9sypph77c7y9dddpz0wrhbkcv01x32jhr8f"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-rlang" ,r-rlang)))
@@ -370,14 +370,14 @@ such as copy/paste from an R session.")
 (define-public r-callr
   (package
     (name "r-callr")
-    (version "3.2.0")
+    (version "3.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "callr" version))
        (sha256
         (base32
-         "1s5h2k7c1vgbry90xczin66q89cbkc6mvh4679l5rsz83087pd2b"))))
+         "0rvrlg86fxr5nadvqa0dr1iifqjs4d1rc32v76m3ccvx6m3xlq5z"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-r6" ,r-r6)
@@ -420,21 +420,21 @@ the embedded @code{RapidXML} C++ library.")
 (define-public r-modelr
   (package
     (name "r-modelr")
-    (version "0.1.4")
+    (version "0.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "modelr" version))
        (sha256
         (base32
-         "1ngxphbjkv7yl1rg30sj36mfwhc76g452drjrq9abgab4k0pgnml"))))
+         "0nnfhlzz75ihs8azy963cc4cwg1kx81rybk4z3wm98bbghwfxfs5"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-broom" ,r-broom)
        ("r-dplyr" ,r-dplyr)
-       ("r-lazyeval" ,r-lazyeval)
        ("r-magrittr" ,r-magrittr)
        ("r-purrr" ,r-purrr)
+       ("r-rlang" ,r-rlang)
        ("r-tibble" ,r-tibble)
        ("r-tidyr" ,r-tidyr)))
     (home-page "https://github.com/tidyverse/modelr")
@@ -500,13 +500,13 @@ in systems and applications.")
 (define-public r-servr
   (package
     (name "r-servr")
-    (version "0.14")
+    (version "0.15")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "servr" version))
               (sha256
                (base32
-                "0zjjnfgas9d16fihksyk24kgkkqswb4sd0rz51id2ni1ymdyasjk"))))
+                "199k9aghwk9rf1rm8pjg60xacqww25cza259h5dfj1ixil0m6dxi"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-httpuv" ,r-httpuv)
@@ -614,13 +614,13 @@ LaTeX.")
 (define-public r-curl
   (package
     (name "r-curl")
-    (version "3.3")
+    (version "4.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "curl" version))
               (sha256
                (base32
-                "1gd5i25anzi28lg1f8p7g63z9d46xi0qaw4lxpml5p0f52lvkc0c"))))
+                "0wb1j87fa2nd4a9x1w2nmc453nzvx6qiq8dviwc4jr36hsf9ra89"))))
     (build-system r-build-system)
     (arguments
      `(#:phases
@@ -1205,14 +1205,14 @@ including functions for geolocation and routing.")
 (define-public r-haven
   (package
     (name "r-haven")
-    (version "2.1.0")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "haven" version))
        (sha256
         (base32
-         "0x5fwc4q2gdxwwp5sxdd6q17jhpisd769y9kv0xgnjcm0cdwz8f0"))))
+         "12h64r2v2451igyl7v4w2kg0hzw9rnanph0m7smffq29ybkv9g4h"))))
     (build-system r-build-system)
     (inputs
      `(("zlib" ,zlib)))
@@ -1441,14 +1441,14 @@ processes.  Most of its code is based on the @code{psutil} Python package.")
 (define-public r-pkgbuild
   (package
     (name "r-pkgbuild")
-    (version "1.0.3")
+    (version "1.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pkgbuild" version))
        (sha256
         (base32
-         "0k8zwa66rm1ncx19ld5mbaxcjxkswiczpdqyssy44vl8k6scwfn9"))))
+         "0prvx91dha5pvd0k4jca2arkngvi6vnfs2indmiy3kwwzyjyyd19"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-callr" ,r-callr)
@@ -1497,13 +1497,13 @@ you to rapidly iterate while developing a package.")
 (define-public r-rcpp
   (package
     (name "r-rcpp")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rcpp" version))
        (sha256
-        (base32 "015rmxns8mhmnd9wnz9bmma4iwx2sf4bcwkkp9hcgvdmblzf0vg7"))))
+        (base32 "170jlmjrs92z5qdv58badhxycjvfjpqwwpic7rm13pc9zkb3i4xd"))))
     (build-system r-build-system)
     (native-inputs
      `(("r-knitr" ,r-knitr))) ; for vignettes
@@ -2230,14 +2230,14 @@ topics for ecologists (ISBN 978-0-691-12522-0).")
 (define-public r-lpsolve
   (package
     (name "r-lpsolve")
-    (version "5.6.13.1")
+    (version "5.6.13.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lpSolve" version))
        (sha256
         (base32
-         "1f10ywlaaldgjj84vs108ly0nsbkrdgbn5d6qj7nk93j1x1xrn3a"))))
+         "0fc5m259ayc880f5hvnq59ih6nb2rlp394n756n1khmxbjpw1w3m"))))
     (properties `((upstream-name . "lpSolve")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/lpSolve")
@@ -2315,14 +2315,14 @@ data).  Weighted versions of MLE, MME and QME are available.")
 (define-public r-energy
   (package
     (name "r-energy")
-    (version "1.7-5")
+    (version "1.7-6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "energy" version))
        (sha256
         (base32
-         "15k9dg0a82cs9ypm0wpcsff3il1hzhnnv86dv5ngby1r144czhi4"))))
+         "16m8bxfgr9sdisjy2qrv6fv5xxwcc9q890l0hpbwq6qzisrdn3lh"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-boot" ,r-boot)
@@ -2450,14 +2450,14 @@ available in a vignette.")
 (define-public r-lava
   (package
     (name "r-lava")
-    (version "1.6.5")
+    (version "1.6.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lava" version))
        (sha256
         (base32
-         "13rlqdg42ylnz4hc932bl50xismrcr4d9ykcd9zs19cw5mckjx0f"))))
+         "0nfab5fgnmxh8cplg8rd8cp34fny5j0k5wn4baj51r6ck7fq9g3s"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-numderiv" ,r-numderiv)
@@ -2640,20 +2640,41 @@ to access PostgreSQL database systems.")
     ;; under the PostgreSQL license.
     (license license:gpl2)))
 
+(define-public r-linprog
+  (package
+    (name "r-linprog")
+    (version "0.9-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "linprog" version))
+       (sha256
+        (base32
+         "1ki14an0pmhs2mnmfjjvdzd76pshiyvi659zf7hqvqwj0viv4dw9"))))
+    (build-system r-build-system)
+    (propagated-inputs `(("r-lpsolve" ,r-lpsolve)))
+    (home-page "http://linprog.r-forge.r-project.org/")
+    (synopsis "Linear programming and optimization")
+    (description
+     "This package can be used to solve Linear Programming / Linear
+Optimization problems by using the simplex algorithm.")
+    (license license:gpl2+)))
+
 (define-public r-geometry
   (package
     (name "r-geometry")
-    (version "0.4.1")
+    (version "0.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "geometry" version))
        (sha256
         (base32
-         "0v3ivaw8vbjyxg08dd573qk3kqfyknj5hli9503dza6p6xz0dzmm"))))
+         "0vq334115qi039vy198ggv1dsp6n1s6jwcm9ivipf5r8lbm287zz"))))
     (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)))
@@ -2871,14 +2892,14 @@ provides a one-row summary of model-level statistics.")
 (define-public r-recipes
   (package
     (name "r-recipes")
-    (version "0.1.5")
+    (version "0.1.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "recipes" version))
        (sha256
         (base32
-         "056zv4vhayyy8q9izcdknbb9hff2gxivg21g5mkssia78vw8g3mg"))))
+         "1ndz9h0zvdj141r63l8047wbhaj0x8fwzzyq7b8mh78pvrrdpq2i"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-dplyr" ,r-dplyr)
@@ -2890,7 +2911,6 @@ provides a one-row summary of model-level statistics.")
        ("r-magrittr" ,r-magrittr)
        ("r-matrix" ,r-matrix)
        ("r-purrr" ,r-purrr)
-       ("r-rcpproll" ,r-rcpproll)
        ("r-rlang" ,r-rlang)
        ("r-tibble" ,r-tibble)
        ("r-tidyr" ,r-tidyr)
@@ -3056,14 +3076,14 @@ Laplace approximation and adaptive Gauss-Hermite quadrature.")
 (define-public r-jomo
   (package
     (name "r-jomo")
-    (version "2.6-8")
+    (version "2.6-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "jomo" version))
        (sha256
         (base32
-         "097zfdcqc3a45ay8xxbraqh8xsfyivskkdmc2b4ca4n979lx8vyb"))))
+         "16ychdhhv8cii8zrdfdf5gzgnvmfaq573bmi00xqdf323q3lf3xr"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-lme4" ,r-lme4)
@@ -3129,14 +3149,14 @@ analysis of multiply imputed data sets.")
 (define-public r-mice
   (package
     (name "r-mice")
-    (version "3.5.0")
+    (version "3.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "mice" version))
        (sha256
         (base32
-         "0icydc312sbvzbp0r0mhs2r77a2ly2xvz5w5amirz3wdkvgyrk2g"))))
+         "0pgcxdmp77604h6f4x8hhs6j4xdjgf5b9zvnixyzdj8vcgdjpivv"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-broom" ,r-broom)
@@ -3212,14 +3232,14 @@ programming} (SQP) based solver).")
 (define-public r-hardyweinberg
   (package
     (name "r-hardyweinberg")
-    (version "1.6.2")
+    (version "1.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "HardyWeinberg" version))
        (sha256
         (base32
-         "15i7b444hikkfgqmx2ki827998xwra38k9v7a7kavwz6zmq5mmv9"))))
+         "1irz44q6nf95h37av868f47aakwv3jgwgw217xfsfw0afkm7s25f"))))
     (properties `((upstream-name . "HardyWeinberg")))
     (build-system r-build-system)
     (propagated-inputs
@@ -3289,14 +3309,14 @@ structure.")
 (define-public r-vioplot
   (package
     (name "r-vioplot")
-    (version "0.3.0")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vioplot" version))
        (sha256
         (base32
-         "1ddmmqq7qrnvr5q518afnysrl7ccr8am9njknv3dpwaqzcdr9akn"))))
+         "13kfjp747bnzksai8j39y2hyl3ljc6n53c2cfhaw78q3d63x0lbv"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-sm" ,r-sm)
@@ -3631,14 +3651,14 @@ constants, and control debugging of packages via environment variables.")
 (define-public r-processx
   (package
     (name "r-processx")
-    (version "3.3.1")
+    (version "3.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "processx" version))
        (sha256
         (base32
-         "1bhbfacx2z2d97pz5bch45nvbvywhx2zp049czlfbdivkzgxn8v1"))))
+         "1g6ipcaxg9y94lyrnbp7kkbqfkcdh1fyrqjjclbjp3x7iysdvazi"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ps" ,r-ps)
@@ -3839,18 +3859,19 @@ to variables on the left-hand side of the assignment.")
 (define-public r-vctrs
   (package
     (name "r-vctrs")
-    (version "0.1.0")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vctrs" version))
        (sha256
         (base32
-         "13w1r8zpalirpfaz5sykpn0mj4jmhxi2qkdcfq081ixlfjyzwa6c"))))
+         "05h0y8qzwc899qj84gkhg4jwzscd065as00d4d8smv42h4i8zkjv"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-backports" ,r-backports)
        ("r-digest" ,r-digest)
+       ("r-ellipsis" ,r-ellipsis)
        ("r-glue" ,r-glue)
        ("r-rlang" ,r-rlang)
        ("r-zeallot" ,r-zeallot)))
@@ -3877,14 +3898,14 @@ to variables on the left-hand side of the assignment.")
 (define-public r-pillar
   (package
     (name "r-pillar")
-    (version "1.4.1")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pillar" version))
        (sha256
         (base32
-         "0mcc09caxm69pghhz6b8vawj9ni63aijv5qba53pg4ph7rxclwgm"))))
+         "0988047mf0xdhdkqqmavzx4ifjhndjnxniyrrhrdq1nvnrvbpfms"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-cli" ,r-cli)
@@ -3923,14 +3944,14 @@ terminals.")
 (define-public r-tinytex
   (package
     (name "r-tinytex")
-    (version "0.14")
+    (version "0.15")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tinytex" version))
        (sha256
         (base32
-         "0aab7ybc6kkxxk3lzdmbla8zcpp6nmlahchc33miv28cmnqw363w"))))
+         "145dmgq7h55mmqqlnnj153j484x2a9s1fbvjbjkdyqzpnz9qh2ax"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-xfun" ,r-xfun)))
@@ -4628,14 +4649,14 @@ files.")
 (define-public r-shinyace
   (package
     (name "r-shinyace")
-    (version "0.3.3")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "shinyAce" version))
        (sha256
         (base32
-         "02q6wqw349nlyf3mbf18cxif1xv9cal5qzccrdlnv73szqn9jk7j"))))
+         "0hvih5g0pswlnz5rf3blx5yqw11ssxvm8w4klxddp1ap20ncbgl1"))))
     (properties `((upstream-name . "shinyAce")))
     (build-system r-build-system)
     (propagated-inputs
@@ -4678,14 +4699,14 @@ systems.")
 (define-public r-radiant-data
   (package
     (name "r-radiant-data")
-    (version "0.9.9")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "radiant.data" version))
        (sha256
         (base32
-         "17mgm0sggh4f7ihqmj9m3996p3pqc7h2cwx6ll1ha3kg5mx0znyn"))
+         "0b35jn4mcj10hqra18l8pi6s4pvj6fxipslbn6hkr4zza1z27gzw"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -5140,14 +5161,14 @@ misclassification probabilities of different models.")
 (define-public r-zip
   (package
     (name "r-zip")
-    (version "2.0.2")
+    (version "2.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "zip" version))
        (sha256
         (base32
-         "1xvgs7mhxi0sdp5ix4nisqm9lf8f75b7ip7b1hqpq9bzh0x6z8ix"))))
+         "0zii05jg9v9ljd0wd67g9x4bhlmpmsy5dzd093sbnc5n3vjbi32a"))))
     (build-system r-build-system)
     (home-page "https://github.com/gaborcsardi/zip")
     (synopsis "Cross-platform Zip compression")
@@ -5298,14 +5319,14 @@ promises, but with a syntax that is idiomatic R.")
 (define-public r-dosnow
   (package
     (name "r-dosnow")
-    (version "1.0.16")
+    (version "1.0.18")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "doSNOW" version))
        (sha256
         (base32
-         "13ir4a8252h4yvp5ir9xnwack1kn58i4ny6sf2qdc12zspn3850n"))))
+         "0rj72z5505cprh6wykhhiz08l9bmd966srqh2qypwivf321bvrvh"))))
     (properties `((upstream-name . "doSNOW")))
     (build-system r-build-system)
     (propagated-inputs
@@ -5431,14 +5452,14 @@ obtain a better initial configuration in non-metric MDS.")
 (define-public r-reticulate
   (package
     (name "r-reticulate")
-    (version "1.12")
+    (version "1.13")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "reticulate" version))
        (sha256
         (base32
-         "0pqr1rcs8yg9nlh729mvlws93cqhpmv49j9bcgarh7vxzkwyv0kb"))))
+         "1qwxh7zq9igl7dxl5g5qjbvv0mlac3w80djnkm0w8rxnaval3gmd"))))
     (build-system r-build-system)
     (inputs `(("python" ,python)))
     (propagated-inputs
@@ -5523,14 +5544,14 @@ movies, and TV shows.")
 (define-public r-ggsignif
   (package
     (name "r-ggsignif")
-    (version "0.5.0")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggsignif" version))
        (sha256
         (base32
-         "0z04g5kqdj66fyfxb5d2m7njkqd7idbiy4xgsnxdh5pbh3cr643x"))))
+         "17j9hg967k1wp9xw3x84mqss58jkb8pvlrnlchz4i1hklgykxqbg"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ggplot2" ,r-ggplot2)))
@@ -5548,14 +5569,14 @@ and adds the annotation to the plot.")
 (define-public r-ggpubr
   (package
     (name "r-ggpubr")
-    (version "0.2.1")
+    (version "0.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggpubr" version))
        (sha256
         (base32
-         "0a4dv6a752hwvc7l31xs7bgqhfzfdy94xp6wgwaxf5dxm46na7k1"))))
+         "0r5knv3707pmpngmj60zn761y3bh8lj89dhh1b80ss083xnxr4qw"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-cowplot" ,r-cowplot)
@@ -5569,6 +5590,7 @@ and adds the annotation to the plot.")
        ("r-magrittr" ,r-magrittr)
        ("r-polynom" ,r-polynom)
        ("r-purrr" ,r-purrr)
+       ("r-rlang" ,r-rlang)
        ("r-scales" ,r-scales)
        ("r-tidyr" ,r-tidyr)))
     (home-page "http://www.sthda.com/english/rpkgs/ggpubr")
@@ -5628,14 +5650,14 @@ clustering.")
 (define-public r-factominer
   (package
     (name "r-factominer")
-    (version "1.41")
+    (version "1.42")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "FactoMineR" version))
        (sha256
         (base32
-         "1h20hydav6l2b7bngqw1av4l5rrh0wk58nhailga1f4qw9lrv259"))))
+         "1yl16inb2m89l1czgaf0pgy9655dpr751hyx92yw6rqpd2ryznac"))))
     (properties `((upstream-name . "FactoMineR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -5918,20 +5940,19 @@ to help insert or delete content at a specific location in the document.")
 (define-public r-abn
   (package
     (name "r-abn")
-    (version "1.3")
+    (version "2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "abn" version))
        (sha256
         (base32
-         "1q9hzpxwg835711kxwygd0l2awal6f015f8s6fprwz7graz1wbbm"))))
+         "08jlvb6i5f7ry2dwm0jgrnn2w95vr0l67dpx13n9878lz9ld131b"))))
     (build-system r-build-system)
     (inputs
      `(("gsl" ,gsl)))
     (propagated-inputs
-     `(("r-cairo" ,r-cairo)
-       ("r-lme4" ,r-lme4)
+     `(("r-lme4" ,r-lme4)
        ("r-mass" ,r-mass)
        ("r-nnet" ,r-nnet)
        ("r-rcpp" ,r-rcpp)
@@ -6070,14 +6091,14 @@ other add-on packages.")
 (define-public r-insight
   (package
     (name "r-insight")
-    (version "0.3.0")
+    (version "0.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "insight" version))
        (sha256
         (base32
-         "1r288hc01cpyrk3nias30fw783z2vw20qr1k67vr65anh7mwm7vb"))))
+         "1lw1r3mb97z5p9z25jfzlhs0sbnwp6v8kzysf0am01x4m7l3iz82"))))
     (build-system r-build-system)
     (home-page "https://easystats.github.io/insight/")
     (synopsis "Easy access to model information for various model objects")
@@ -6527,14 +6548,14 @@ containing one or more SNPs that evolved under directional selection.")
 (define-public r-proc
   (package
     (name "r-proc")
-    (version "1.15.0")
+    (version "1.15.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pROC" version))
        (sha256
         (base32
-         "1dxxkwdhxfnj2znq4c5ggrr9m5klh5pmfxg17rz59vr2hfb73m24"))))
+         "1jx8af9p6sxbypqvj1cci7q9sbyaw310inbjxibjcr3acj59h45h"))))
     (properties `((upstream-name . "pROC")))
     (build-system r-build-system)
     (propagated-inputs
@@ -6900,14 +6921,14 @@ used to teach mathematics, statistics, computation and modeling.")
 (define-public r-raster
   (package
     (name "r-raster")
-    (version "2.9-5")
+    (version "2.9-23")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "raster" version))
        (sha256
         (base32
-         "0ljrymsp4zzaxdj1l0mw0a6hi88m5h0h920ixfzrg0szbyxqd0yk"))))
+         "1brqigic8ygr223bp2hgk5qjz3q03r4sfglrv4an0ghy7fgfralh"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-rcpp" ,r-rcpp)
@@ -7468,14 +7489,14 @@ multiple-imputation datasets.")
 (define-public r-magick
   (package
     (name "r-magick")
-    (version "2.0")
+    (version "2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "magick" version))
        (sha256
         (base32
-         "18y465325mhf48x2jn3jz9khwq1z2aj13wfbdkv8k3hln1sd572m"))))
+         "1pz71maz05gx4ds1wfw0alggc8nn2w75lj12dg1zr72s3kybhkzg"))))
     (build-system r-build-system)
     (inputs
      `(("imagemagick" ,imagemagick)
@@ -7857,14 +7878,14 @@ Hothorn, Westfall, 2010, CRC Press).")
 (define-public r-emmeans
   (package
     (name "r-emmeans")
-    (version "1.3.5.1")
+    (version "1.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "emmeans" version))
        (sha256
         (base32
-         "0rgzjvmp3yqhwgfg96v17wi8gbafzbrmz134shj2jsf5bsmw6vbj"))))
+         "1ynf9hhbch83k63lwps69ijfch30fk5v0sc418ck264c5vih26dh"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-estimability" ,r-estimability)
@@ -8089,14 +8110,14 @@ differentiation.")
 (define-public r-bayestestr
   (package
     (name "r-bayestestr")
-    (version "0.2.2")
+    (version "0.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bayestestR" version))
        (sha256
         (base32
-         "09r654lrhwwnshn5h2s2fbx3c8wigv3j4sva5hmfnkwjg8cclhd9"))))
+         "08d3bsb6li59n17bx1zrqnlnvniyb3vls9kl856km4chx3b2ff82"))))
     (properties `((upstream-name . "bayestestR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -8114,14 +8135,14 @@ ROPE percentage and pd).")
 (define-public r-performance
   (package
     (name "r-performance")
-    (version "0.2.0")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "performance" version))
        (sha256
         (base32
-         "1pzd6z7i1jxr2xi1shg3d0bxlbpmjl7kpmwgjnfys6syv57znd1z"))))
+         "13j74ffhx950kacs86ixx84nviq9qlwzr7hjnhkmzw2hspjxq99w"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-bayestestr" ,r-bayestestr)
@@ -8141,14 +8162,14 @@ effects models and Bayesian models.")
 (define-public r-ggeffects
   (package
     (name "r-ggeffects")
-    (version "0.10.0")
+    (version "0.11.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggeffects" version))
        (sha256
         (base32
-         "0gmqzjk8k8q6j4q6asv9f3b1fv4qrw5w8xa48ha3y98shzm5np9k"))))
+         "1b0lxa8bljdh6h4lk7pql1lrhjlvh7p5c8qlgb8ac6ay8hb79vmi"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-dplyr" ,r-dplyr)
@@ -8175,14 +8196,14 @@ results using @code{ggplot2}.")
 (define-public r-sjplot
   (package
     (name "r-sjplot")
-    (version "2.6.3")
+    (version "2.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sjPlot" version))
        (sha256
         (base32
-         "0h1mkmp5mrkbf7y3zh6m4cnm737cpg1m5si0lrmal7j2ixqicwjy"))))
+         "1m0gy991fmxvqry91kkzdkdapyalhrwql25d0hg2a2naxgfw4zpk"))))
     (properties `((upstream-name . "sjPlot")))
     (build-system r-build-system)
     (propagated-inputs
@@ -8192,6 +8213,7 @@ results using @code{ggplot2}.")
        ("r-forcats" ,r-forcats)
        ("r-ggeffects" ,r-ggeffects)
        ("r-ggplot2" ,r-ggplot2)
+       ("r-ggrepel" ,r-ggrepel)
        ("r-glmmtmb" ,r-glmmtmb)
        ("r-insight" ,r-insight)
        ("r-knitr" ,r-knitr)
@@ -8311,14 +8333,14 @@ terminals that do not support Unicode.")
 (define-public r-usethis
   (package
     (name "r-usethis")
-    (version "1.5.0")
+    (version "1.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "usethis" version))
        (sha256
         (base32
-         "0pn6ka3726psaqlx573g6nxi90apf0rn5m4k2lz1jr66xdc19sag"))))
+         "07an5wbikilg7cb3q6x5aykw8dfqnjrc3wpfb7gjmy0d9fh20fcy"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-clipr" ,r-clipr)
@@ -8674,14 +8696,14 @@ analysing multivariate abundance data in community ecology.")
 (define-public r-afex
   (package
     (name "r-afex")
-    (version "0.23-0")
+    (version "0.24-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "afex" version))
        (sha256
         (base32
-         "0yv4s7461swn0116y4wq9v139p1br5rr6hhnq1cmkbvybmwj2vp7"))))
+         "14w7kcwr5hxmjcjmdm5ia9ka3bw1nl18pxlm1vpw62nmvicn3455"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-car" ,r-car)
@@ -8908,14 +8930,14 @@ Bioconductor packages.")
 (define-public r-rgl
   (package
     (name "r-rgl")
-    (version "0.100.24")
+    (version "0.100.26")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rgl" version))
        (sha256
         (base32
-         "0nm3iyvhhmh0zlywkfmrq3vyh8z1l296xxfmcky0ifd2qnysfcqj"))))
+         "0h77akviwjd86j2qyx326xynbmwhypd6ydprzlwqnidd4ckrr271"))))
     (build-system r-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -9374,14 +9396,14 @@ maps.")
 (define-public r-tidytree
   (package
     (name "r-tidytree")
-    (version "0.2.4")
+    (version "0.2.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidytree" version))
        (sha256
         (base32
-         "04bznlfs617plv258nmsyq2pywnijcnzy2pbn5b2fgjk2xqkp29w"))))
+         "13mhizbsawmfqjpnzb73yw6kn1f1wlz0vhyzj3g0rj6ry880rw89"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ape" ,r-ape)
@@ -9442,14 +9464,14 @@ giving it a description in the specific format.")
 (define-public r-sparsesvd
   (package
     (name "r-sparsesvd")
-    (version "0.1-4")
+    (version "0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sparsesvd" version))
        (sha256
         (base32
-         "1yf373552wvdnd65r7hfcqa3v29dqn7jd4cn431mqd2acnqjrsam"))))
+         "1xm969fjq3fv1p2sqza2apz8picibj4s2agpwf1sx9nwn3b587qs"))))
     (build-system r-build-system)
     (propagated-inputs `(("r-matrix" ,r-matrix)))
     (home-page "http://tedlab.mit.edu/~dr/SVDLIBC/")
@@ -9664,14 +9686,14 @@ diagnostics for controlling type-1 errors are also provided.")
 (define-public r-flare
   (package
     (name "r-flare")
-    (version "1.6.0")
+    (version "1.6.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "flare" version))
        (sha256
         (base32
-         "0ygif9a7a99qwv0b488wymmmncp6f5ww9yz13s4qs6p8yf37x1r1"))))
+         "1ybrsx1djqldw0l5l1iz4pfh6xxb8ckkg1ric7wnsr51wm9ljlh5"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-igraph" ,r-igraph)
@@ -9764,14 +9786,14 @@ Touzet and Varre (2007).")
 (define-public r-rnifti
   (package
     (name "r-rnifti")
-    (version "0.11.0")
+    (version "0.11.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RNifti" version))
        (sha256
         (base32
-         "0zs8ffa6gpi9cygxk7xjin6k3vpvfgb540a506zlk50bf6kc5nlf"))))
+         "0jcgdg5k2swmi57aqj347kfi1fc4nvag7pxdfz61kc0vqqamm0wg"))))
     (properties `((upstream-name . "RNifti")))
     (build-system r-build-system)
     (propagated-inputs `(("r-rcpp" ,r-rcpp)))
@@ -9787,14 +9809,14 @@ used by other packages.")
 (define-public r-shades
   (package
     (name "r-shades")
-    (version "1.3.1")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "shades" version))
        (sha256
         (base32
-         "0v0xp9l1zyq4iysmkrbdwk4r1rksjj8p5c1726yrcgyg55mj59nv"))))
+         "1zg95sjhrfvbdlfc387g9p0vnb8nb6agdk1mb3wq3kwkm2da0bqj"))))
     (build-system r-build-system)
     (home-page "https://github.com/jonclayden/shades")
     (synopsis "Simple color manipulation")
@@ -10143,23 +10165,51 @@ library.")
 and manipulating sets of ontological terms.")
     (license license:gpl2+)))
 
+(define-public r-gargle
+  (package
+    (name "r-gargle")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "gargle" version))
+       (sha256
+        (base32
+         "0vqgp4w03sdyj0q96gxkybqflzzbaw84zifsbi7pxk5y08fimj2v"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-fs" ,r-fs)
+       ("r-glue" ,r-glue)
+       ("r-httr" ,r-httr)
+       ("r-jsonlite" ,r-jsonlite)
+       ("r-rlang" ,r-rlang)
+       ("r-withr" ,r-withr)))
+    (home-page "https://gargle.r-lib.org")
+    (synopsis "Utilities for working with Google APIs")
+    (description
+     "This package provides utilities for working with Google APIs.  This
+includes functions and classes for handling common credential types and for
+preparing, executing, and processing HTTP requests.")
+    (license license:expat)))
+
 (define-public r-bigrquery
   (package
     (name "r-bigrquery")
-    (version "1.1.1")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bigrquery" version))
        (sha256
         (base32
-         "1if39xkr231xmjq10fx2g7bgg4jgfd3wzx1p9g3pq4hbf2s6x0is"))))
+         "1ggh2gngr5x0g6y7d55y6kvn94anf7qi1bkc28cjmw61hxjq38fb"))))
     (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)
@@ -10167,6 +10217,7 @@ and manipulating sets of ontological terms.")
        ("r-progress" ,r-progress)
        ("r-rapidjsonr" ,r-rapidjsonr)
        ("r-rcpp" ,r-rcpp)
+       ("r-rlang" ,r-rlang)
        ("r-tibble" ,r-tibble)))
     (home-page "https://github.com/rstats-db/bigrquery")
     (synopsis "R interface to Google's BigQuery API")
@@ -10724,14 +10775,14 @@ covariance functions for large data sets.")
 (define-public r-spatialextremes
   (package
     (name "r-spatialextremes")
-    (version "2.0-7")
+    (version "2.0-7.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "SpatialExtremes" version))
        (sha256
         (base32
-         "1y0h1pcfqp9ynxsr3yrfbihlwm25ypyb88jmm5k2g7xvm8h9g050"))))
+         "0aqq9ryxi4xsdqjhc1lhb7ai8szs7m2vys6nn0ygps1w3pm4xwj8"))))
     (properties
      `((upstream-name . "SpatialExtremes")))
     (build-system r-build-system)
@@ -10994,14 +11045,14 @@ model with finite state space using the Aalen-Johansen estimator.")
 (define-public r-epi
   (package
     (name "r-epi")
-    (version "2.37")
+    (version "2.38")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Epi" version))
        (sha256
         (base32
-         "1lanr9x0c6w22406p56j7cwk6wck8njq6pscb4gzc613d68zj1lk"))))
+         "0ald9fjynrlyah8nzwfs49a08j4myd3c5bm56zn61gg5pyyhi8hd"))))
     (properties `((upstream-name . "Epi")))
     (build-system r-build-system)
     (propagated-inputs
@@ -11177,14 +11228,14 @@ them in distributed compute environments.")
 (define-public r-future
   (package
     (name "r-future")
-    (version "1.13.0")
+    (version "1.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "future" version))
        (sha256
         (base32
-         "0h8ng2a6vg4axd5f75xcb3ip9d95zi22fa048dq2bzlnncwlznjz"))))
+         "1jyv2wlmpfqbk3hw269h4xg36na3wh1kd1lxmwdb40bsv4850lqa"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-digest" ,r-digest)
@@ -11237,14 +11288,14 @@ machine or distributed on a compute cluster.")
 (define-public r-rsvd
   (package
     (name "r-rsvd")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rsvd" version))
        (sha256
         (base32
-         "1faskhf5j2bj9f971qljsmh182g3rnyilj1wwijz530a6skxidzz"))))
+         "0fia77y5fxnhwkcxlgp98ygb8fdfraky75x80hkf7kvvpwc5rzn8"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-matrix" ,r-matrix)))
@@ -11445,14 +11496,14 @@ identifying outliers.")
 (define-public r-bayesm
   (package
     (name "r-bayesm")
-    (version "3.1-1")
+    (version "3.1-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bayesm" version))
        (sha256
         (base32
-         "0y30cza92s6kgvmxjpr6f5g0qbcck7hslqp89ncprarhxiym2m28"))))
+         "041ach2f2vrqzd5kz17v7wmkjz6z8cjjihpk4qvczm4cr9z85r2i"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-rcpp" ,r-rcpp)
@@ -11849,14 +11900,14 @@ probabilities from a standard bivariate normal CDF.")
 (define-public r-lavaan
   (package
     (name "r-lavaan")
-    (version "0.6-3")
+    (version "0.6-4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lavaan" version))
        (sha256
         (base32
-         "0hw856kv11zqn6nd4216rh19i6xbnc1rh044r7jvvxkhzgbqkyxz"))))
+         "1zf0sxpms35rhq2syb7r3sshhc8kjvc3pv97dk9x0gf4xl7pck4g"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-mass" ,r-mass)
@@ -12073,14 +12124,14 @@ running IRkernel session.")
 (define-public r-irkernel
   (package
     (name "r-irkernel")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "IRkernel" version))
        (sha256
         (base32
-         "1gij59b068qp7sbn9d0b9ghmnhfks15a9anj7bp26acv0yvdsg3s"))))
+         "040qig675zaxsf81ranmvk293amrswi5098k69wyq0vgqyin6vwp"))))
     (properties `((upstream-name . "IRkernel")))
     (build-system r-build-system)
     (arguments
@@ -12192,14 +12243,14 @@ R, enabling interactive analysis and visualization of genome-scale data.")
 (define-public r-rematch2
   (package
     (name "r-rematch2")
-    (version "2.0.1")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rematch2" version))
        (sha256
         (base32
-         "16k0i5p7fa3qfxv59ijyn638wpz8n4jrkrnilqmh5g9l8f8bn4h6"))))
+         "00cznm6rk33b53w7zybkz7549bnydc66znpi5mb0xd24pmqp0rvq"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-tibble" ,r-tibble)))
@@ -12541,14 +12592,14 @@ classes.")
 (define-public r-classint
   (package
     (name "r-classint")
-    (version "0.3-3")
+    (version "0.4-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "classInt" version))
        (sha256
         (base32
-         "0c2z6shlxa928xa20yl956r06lx20mji3mwipdvmj3f4z5g6hgm9"))))
+         "00q1bpgblrldckn1rk166q1b0hgap2sjjyfmfcyh6ydk6y73ziir"))))
     (properties `((upstream-name . "classInt")))
     (build-system r-build-system)
     (propagated-inputs
@@ -12616,14 +12667,14 @@ sampling.")
 (define-public r-deldir
   (package
     (name "r-deldir")
-    (version "0.1-21")
+    (version "0.1-23")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "deldir" version))
        (sha256
         (base32
-         "03392pl6j8rm3n32xrfkyfx866k1vm5sj87pva70yyiwh70vrnmr"))))
+         "0790dwxb2mz1ffz8gd5vwdr0if2q76dzy3vab5rsykf9kz72n4g0"))))
     (build-system r-build-system)
     (native-inputs `(("gfortran" ,gfortran)))
     (home-page "https://cran.r-project.org/web/packages/deldir")
@@ -12640,14 +12691,14 @@ tessellation.")
 (define-public r-sf
   (package
     (name "r-sf")
-    (version "0.7-4")
+    (version "0.7-7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sf" version))
        (sha256
         (base32
-         "0vnyr7xyfcl928kbrb1k8l4fkd0cjrfq486g6gxpvy5j0cc2h4i1"))))
+         "192hw52x1qlif8zyai1kff1wiyr3yl5f7jj1rk3k0nr8das0qy6i"))))
     (build-system r-build-system)
     (inputs
      `(("gdal" ,gdal)
@@ -13022,18 +13073,19 @@ inbred lines, F2 intercrosses, and association mapping populations.")
 (define-public r-ldheatmap
   (package
     (name "r-ldheatmap")
-    (version "0.99-5")
+    (version "0.99-7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "LDheatmap" version))
        (sha256
         (base32
-         "0il3g3n3bzv74lz7dlhyiwc2x2417v6yhx2g47pahxdzqa09kf4s"))))
+         "1r0j8bihi5z1x0sgaf7dwzpsw9i0nc1vylvipvc0cia2ka1lr9dc"))))
     (properties `((upstream-name . "LDheatmap")))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-genetics" ,r-genetics)
+       ("r-rcpp" ,r-rcpp)
        ("r-snpstats" ,r-snpstats)))
     (home-page "http://stat.sfu.ca/statgen/research/ldheatmap.html")
     (synopsis "Graphical display of pairwise linkage disequilibria between SNPs")
@@ -13112,13 +13164,13 @@ SELECT or UPDATE queries to an end-point.")
 (define-public r-bookdown
   (package
     (name "r-bookdown")
-    (version "0.11")
+    (version "0.12")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "bookdown" version))
               (sha256
                (base32
-                "0w4fkv5fqiaqgkx44p0s161imf29zir9742126xkz1pl1j25jn1r"))))
+                "1c2v0rpa1rrpbx8yb66sfvrf4gf57f6a8x7ydjqqbkbwhxdlrsrq"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-htmltools" ,r-htmltools)
@@ -13585,14 +13637,14 @@ package.")
 (define-public r-ggplotify
   (package
     (name "r-ggplotify")
-    (version "0.0.3")
+    (version "0.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggplotify" version))
        (sha256
         (base32
-         "14hqlpvnaq5psz1ljcpw9isa06827rg3fm5c1dx159rsjfi56yby"))))
+         "0nv3wdmxnc5ww9m3xlgnb0jp30j45dg33nqc6gg3y36svg8anjcg"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ggplot2" ,r-ggplot2)
@@ -13712,14 +13764,14 @@ sets of URLs.")
 (define-public r-ggforce
   (package
     (name "r-ggforce")
-    (version "0.2.2")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggforce" version))
        (sha256
         (base32
-         "0snxx9zhcccxa7pz9pf3bjqmcmv9mz4m47v81hklnhm25jj40xg2"))))
+         "118qyzy8h9kkkdpjd09667gxgw7xy1kbc8r87pswh54ixn8hymwk"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ggplot2" ,r-ggplot2)
@@ -13730,7 +13782,9 @@ sets of URLs.")
        ("r-rcppeigen" ,r-rcppeigen)
        ("r-rlang" ,r-rlang)
        ("r-scales" ,r-scales)
-       ("r-tweenr" ,r-tweenr)))
+       ("r-tidyselect" ,r-tidyselect)
+       ("r-tweenr" ,r-tweenr)
+       ("r-withr" ,r-withr)))
     (home-page "https://ggforce.data-imaginist.com")
     (synopsis "Accelerating ggplot2")
     (description
@@ -14562,14 +14616,14 @@ engine (Salmon et al., 2011) as provided by the package @code{sitmo}.")
 (define-public r-dalex
   (package
     (name "r-dalex")
-    (version "0.4")
+    (version "0.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "DALEX" version))
        (sha256
         (base32
-         "1mr8lqq8s4aacmh7xdhmkmv8vsjqjczlqlaw27xnsljgj2kgq87a"))))
+         "04i17ni8g595jj8dxdfwr9vsxmdn2kkam90ab68vlwws3ywqjl6r"))))
     (properties `((upstream-name . "DALEX")))
     (build-system r-build-system)
     (propagated-inputs `(("r-ggplot2" ,r-ggplot2)))
@@ -14588,14 +14642,14 @@ and model output.")
 (define-public r-enrichr
   (package
     (name "r-enrichr")
-    (version "1.0")
+    (version "2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "enrichR" version))
        (sha256
         (base32
-         "0lfdr45sdyqhvgz8q4qdbk12mpv86d6id665kq6aaslgr8jggfmn"))))
+         "056m6hksfss29fj7zvlk7pbh8g3gq84kjh3240isrsnhp9m1h9iz"))))
     (properties `((upstream-name . "enrichR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -14698,18 +14752,17 @@ into R and converted to @code{BibEntry} objects.")
 (define-public r-citr
   (package
     (name "r-citr")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "citr" version))
        (sha256
         (base32
-         "0pik6s6xk5768s3kkppw2192dj455py53gsn6k2b7xgg96ircy0g"))))
+         "0p2sg0fl7cppxxmr20qyqzs2469kglmgpsvykynw4qx501as57rc"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-assertthat" ,r-assertthat)
-       ("r-bibtex" ,r-bibtex)
        ("r-curl" ,r-curl)
        ("r-httr" ,r-httr)
        ("r-miniui" ,r-miniui)
@@ -14729,14 +14782,14 @@ the current document.")
 (define-public r-xgboost
   (package
     (name "r-xgboost")
-    (version "0.82.1")
+    (version "0.90.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xgboost" version))
        (sha256
         (base32
-         "0plhx63wcm4syslzmjfv6bdgaqn96fnav048hrj0vxk4dzgfp8sq"))))
+         "1gy9rzg43mjpfis893vf15drmbigfn0481zrzss9ajnmnk0q8194"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-data-table" ,r-data-table)
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index db9665d1aa..6500adb215 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
+;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,27 +23,473 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages))
 
-(define-public rust-unicode-xid
+;;;
+;;; Please: Try to add new module packages in alphabetic order.
+;;;
+
+(define-public rust-autocfg
   (package
-    (name "rust-unicode-xid")
-    (version "0.1.0")
+    (name "rust-autocfg")
+    (version "0.1.5")
     (source
       (origin
         (method url-fetch)
-        (uri (crate-uri "unicode-xid" version))
-        (file-name
-          (string-append name "-" version ".tar.gz"))
+        (uri (crate-uri "autocfg" version))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-          (base32
-            "1z57lqh4s18rr4x0j4fw4fmp9hf9346h0kmdgqsqx0fhjr3k0wpw"))))
+         (base32
+          "0asl6fnc35yk5l2rxwhp25v128jgm45dp754h9z8x51b6n90w4r2"))))
     (build-system cargo-build-system)
-    (home-page
-      "https://github.com/unicode-rs/unicode-xid")
-    (synopsis "Determine Unicode XID related properties")
-    (description "Determine whether characters have the XID_Start
-or XID_Continue properties according to Unicode Standard Annex #31.")
-    ;; Dual licensed.
-    (license (list license:asl2.0 license:expat))))
+    (home-page "https://github.com/cuviper/autocfg")
+    (synopsis "Automatic cfg for Rust compiler features")
+    (description "Rust library for build scripts to automatically configure
+code based on compiler support.  Code snippets are dynamically tested to see
+if the @code{rustc} will accept them, rather than hard-coding specific version
+support.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-bencher
+  (package
+    (name "rust-bencher")
+    (version "0.1.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "bencher" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1x8p2xblgqssay8cdykp5pkfc0np0jk5bs5cx4f5av097aav9zbx"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/bluss/bencher/")
+    (synopsis "Port of the libtest benchmark runner to Rust stable")
+    (description "This package provides a port of the libtest (unstable Rust)
+benchmark runner to Rust stable releases.  Supports running benchmarks and
+filtering based on the name.  Benchmark execution works exactly the same way
+and no more (caveat: black_box is still missing!).")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-bitflags
+  (package
+    (name "rust-bitflags")
+    (version "1.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "bitflags" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1zc1qb1hwsnl2d8rhzicsv9kqd5b2hwbrscrcfw5as4sfr35659x"))))
+    (build-system cargo-build-system)
+    (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
+behave like a set of bitflags.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-cfg-if
+  (package
+    (name "rust-cfg-if")
+    (version "0.1.9")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "cfg-if" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0csygklgz3ybpr0670rkip49zh76m43ar3k7xgypkzbzrwycx1ml"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/alexcrichton/cfg-if")
+    (synopsis "Define an item depending on parameters")
+    (description "This package provides a macro to ergonomically define an item
+depending on a large number of #[cfg] parameters.  Structured like an
+@code{if-else} chain, the first matching branch is the item that gets emitted.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-discard
+  (package
+    (name "rust-discard")
+    (version "1.0.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "discard" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1h67ni5bxvg95s91wgicily4ix7lcw7cq0a5gy9njrybaibhyb91"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/Pauan/rust-discard")
+    (synopsis "Allow for intentionally leaking memory")
+    (description "There are situations where you need to intentionally leak some
+memory but not other memory.  This package provides a discard trait which allows
+for intentionally leaking memory")
+    (license license:expat)))
+
+(define-public rust-doc-comment
+  (package
+    (name "rust-doc-comment")
+    (version "0.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "doc-comment" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "15rsqxgarfpb1yim9sbp9yfgj7p2dq6v51c6bq1a62paii9ylgcj"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/GuillaumeGomez/doc-comment")
+    (synopsis "Macro to generate doc comments")
+    (description "This package provides a way to generate doc comments
+from macros.")
+    (license license:expat)))
+
+(define-public rust-dtoa
+  (package
+    (name "rust-dtoa")
+    (version "0.4.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "dtoa" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0phbm7i0dpn44gzi07683zxaicjap5064w62pidci4fhhciv8mza"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/dtolnay/dtoa")
+    (synopsis "Fast functions for printing floating-point primitives")
+    (description "This crate provides fast functions for printing
+floating-point primitives to an @code{io::Write}.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-fallible-iterator
+  (package
+    (name "rust-fallible-iterator")
+    (version "0.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "fallible-iterator" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1xq759lsr8gqss7hva42azn3whgrbrs2sd9xpn92c5ickxm1fhs4"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/sfackler/rust-fallible-iterator")
+    (synopsis "Fallible iterator traits")
+    (description "If the @code{std} or @code{alloc} features are enabled, this
+crate provides implementations for @code{Box}, @code{Vec}, @code{BTreeMap}, and
+@code{BTreeSet}.  If the @code{std} feature is enabled, this crate additionally
+provides implementations for @code{HashMap} and @code{HashSet}.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-fnv
+  (package
+    (name "rust-fnv")
+    (version "1.0.6")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "fnv" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1ww56bi1r5b8id3ns9j3qxbi7w5h005rzhiryy0zi9h97raqbb9g"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/servo/rust-fnv")
+    (synopsis "implementation of the Fowler-Noll-Vo hash function")
+    (description "The @code{fnv} hash function is a custom @code{Hasher}
+implementation that is more efficient for smaller hash keys.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-fs-extra
+  (package
+    (name "rust-fs-extra")
+    (version "1.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "fs_extra" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0x6675wdhsx277k1k1235jwcv38naf20d8kwrk948ds26hh4lajz"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/webdesus/fs_extra")
+    (synopsis "Extra filesystem methods")
+    (description "Expanding opportunities standard library @code{std::fs} and
+@code{std::io}.  Recursively copy folders with recept information about
+process and much more.")
+    (license license:expat)))
+
+(define-public rust-futures
+  (package
+    (name "rust-futures")
+    (version "0.1.28")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "futures" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0saq8ffjw1pwf1pzhw3kq1z7dfq6wpd8x93dnni6vbkc799kkp25"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/rust-lang-nursery/futures-rs")
+    (synopsis "Implementation of zero-cost futures in Rust")
+    (description "An implementation of @code{futures} and @code{streams}
+featuring zero allocations, composability, and iterator-like interfaces.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-hex
+  (package
+    (name "rust-hex")
+    (version "0.3.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "hex" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0xsdcjiik5j750j67zk42qdnmm4ahirk3gmkmcqgq7qls2jjcl40"))))
+    (build-system cargo-build-system)
+    (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
+hexadecimal representation.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-itoa
+  (package
+    (name "rust-itoa")
+    (version "0.4.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "itoa" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0zvg2d9qv3avhf3d8ggglh6fdyw8kkwqg3r4622ly5yhxnvnc4jh"))))
+    (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:asl2.0
+                   license:expat))))
+
+(define-public rust-json
+  (package
+    (name "rust-json")
+    (version "0.11.14")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "json" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1hj8c6xj5c2aqqszi8naaflmcdbya1i9byyjrq4iybxjb4q91mq1"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/maciejhirsz/json-rust")
+    (synopsis "JSON implementation in Rust")
+    (description "This crate provides a JSON implementation in Rust, reducing
+friction with idiomatic Rust structs to ease interopability.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-maplit
+  (package
+    (name "rust-maplit")
+    (version "1.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "maplit" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0hsczmvd6zkqgzqdjp5hfyg7f339n68w83n4pxvnsszrzssbdjq8"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/bluss/maplit")
+    (synopsis "Collection of Map macros")
+    (description "This crate provides a collection of @code{literal} macros for
+@code{HashMap}, @code{HashSet}, @code{BTreeMap}, and @code{BTreeSet.}")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-matches
+  (package
+    (name "rust-matches")
+    (version "0.1.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "matches" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "020axl4q7rk9vz90phs7f8jas4imxal9y9kxl4z4v7a6719mrz3z"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/SimonSapin/rust-std-candidates")
+    (synopsis "Macro to evaluate whether an expression matches a pattern.")
+    (description "This package provides a macro to evaluate, as a boolean,
+whether an expression matches a pattern.")
+    (license license:expat)))
+
+(define-public rust-md5
+  (package
+    (name "rust-md5")
+    (version "0.6.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "md5" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "17b2xm4h4cvxsdjsf3kdrzqv2za60kak961xzi5kmw6g6djcssvy"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/stainless-steel/md5")
+    (synopsis "MD5 hash function in Rust")
+    (description "The package provides the MD5 hash function.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-peeking-take-while
+  (package
+    (name "rust-peeking-take-while")
+    (version "0.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "peeking_take_while" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "16bhqr6rdyrp12zv381cxaaqqd0pwysvm1q8h2ygihvypvfprc8r"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/fitzgen/peeking_take_while")
+    (synopsis "Provides the peeking_take_while iterator adaptor method")
+    (description
+      "Like @code{Iterator::take_while}, but calls the predicate on a peeked
+value.  This allows you to use @code{Iterator::by_ref} and
+@code{Iterator::take_while} together, and still get the first value for which
+the @code{take_while} predicate returned false after dropping the @code{by_ref}.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-percent-encoding
+  (package
+    (name "rust-percent-encoding")
+    (version "2.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "percent-encoding" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0m6rkp3iy11la04p6z3492rns6n693pvmx585dvfmzzlzak2hkxs"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/servo/rust-url/")
+    (synopsis "Percent encoding and decoding")
+    (description "This crate provides percent encoding and decoding.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-pin-utils
+  (package
+    (name "rust-pin-utils")
+    (version "0.1.0-alpha.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "pin-utils" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "11xmyx00n4m37d546by2rxb8ryxs12v55cc172i3yak1rqccd52q"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/rust-lang-nursery/pin-utils")
+    (synopsis "Utilities for pinning")
+    (description "This crate provides utilities for pinning values on the stack.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-plain
+  (package
+    (name "rust-plain")
+    (version "0.2.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "plain" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "19n1xbxb4wa7w891268bzf6cbwq4qvdb86bik1z129qb0xnnnndl"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/randomites/plain")
+    (synopsis "Rust library that allows reinterpreting data safely")
+    (description "This package provides a small Rust library that allows users
+ to reinterpret data of certain types safely.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-pocket-resources
+  (package
+    (name "rust-pocket-resources")
+    (version "0.3.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "pocket-resources" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1n2i5vmi8fdbw89wm5nz1ws1z9f1qax911p6ksg4scmdg23z6df1"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/tomaka/pocket-resources")
+    (synopsis "Include resources in your applications")
+    (description "This crate allows you to include resources in your
+applications.")
+    (license license:expat)))
+
+(define-public rust-ppv-lite86
+  (package
+    (name "rust-ppv-lite86")
+    (version "0.2.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "ppv-lite86" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "06snnv338w341nicfqba2jgln5dsla72ndkgrw7h1dfdb3vgkjz3"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/cryptocorrosion/cryptocorrosion")
+    (synopsis "Implementation of the crypto-simd API for x86")
+    (description "This crate provides an implementation of the crypto-simd API
+for x86.")
+    (license (list license:asl2.0
+                   license:expat))))
 
 (define-public rust-proc-macro2
   (package
@@ -69,6 +516,26 @@ in terms of the upstream unstable API.")
     ;; Dual licensed.
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-quick-error
+  (package
+    (name "rust-quick-error")
+    (version "1.2.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "quick-error" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1w6kgwwv7p7zr0yyg5rb315lkk24bimywklwx7fsvsbwi10bjx4j"))))
+    (build-system cargo-build-system)
+    (home-page "http://github.com/tailhook/quick-error")
+    (synopsis "Macro which makes error types pleasant to write")
+    (description "This crate provides a macro which makes error types pleasant
+to write.")
+    (license (list license:asl2.0
+                   license:expat))))
+
 (define-public rust-quote
   (package
     (name "rust-quote")
@@ -90,3 +557,396 @@ in terms of the upstream unstable API.")
     (description "Quasi-quoting macro quote!(...)")
     ;; Dual licensed.
     (license (list license:asl2.0 license:expat))))
+
+(define-public rust-rustc-std-workspace-core
+  (package
+    (name "rust-rustc-std-workspace-core")
+    (version "1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "rustc-std-workspace-core" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1309xhwyai9xpz128xrfjqkmnkvgjwddznmj7brbd8i8f58zamhr"))))
+    (build-system cargo-build-system)
+    (home-page "https://crates.io/crates/rustc-std-workspace-core")
+    (synopsis "Explicitly empty crate for rust-lang/rust integration")
+    (description "This crate provides an explicitly empty crate for
+rust-lang/rust integration.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-scoped-tls
+  (package
+    (name "rust-scoped-tls")
+    (version "1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "scoped-tls" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1hj8lifzvivdb1z02lfnzkshpvk85nkgzxsy2hc0zky9wf894spa"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/alexcrichton/scoped-tls")
+    (synopsis "Rust library providing the old standard library's scoped_thread_local")
+    (description "This crate provides a library implementation of the standard
+library's old @code{scoped_thread_local!} macro for providing scoped access to
+@dfn{thread local storage} (TLS) so any type can be stored into TLS.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-scopeguard
+  (package
+    (name "rust-scopeguard")
+    (version "1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "scopeguard" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "03aay84r1f6w87ckbpj6cc4rnsxkxcfs13n5ynxjia0qkgjiabml"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/bluss/scopeguard")
+    (synopsis "Scope guard which will run a closure even out of scope")
+    (description "This package provides a RAII scope guard that will run a
+given closure when it goes out of scope, even if the code between panics
+(assuming unwinding panic).  Defines the macros @code{defer!},
+@code{defer_on_unwind!}, @code{defer_on_success!} as shorthands for guards
+with one of the implemented strategies.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-semver-parser
+  (package
+    (name "rust-semver-parser")
+    (version "0.9.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "semver-parser" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1ahqhvgpzhcsd28id7xnrjv4419i9yyalhm7d7zi430qx0hi2vml"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/steveklabnik/semver-parser")
+    (synopsis "Parsing of the semver spec")
+    (description "This package provides for parsing of the semver spec.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-shlex
+  (package
+    (name "rust-shlex")
+    (version "0.1.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "shlex" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1lmv6san7g8dv6jdfp14m7bdczq9ss7j7bgsfqyqjc3jnjfippvz"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/comex/rust-shlex")
+    (synopsis "Split a string into shell words, like Python's shlex")
+    (description "This crate provides a method to split a string into shell
+words, like Python's shlex.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-slab
+  (package
+    (name "rust-slab")
+    (version "0.4.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "slab" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1y59xsa27jk84sxzswjk60xcjf8b4fm5960jwpznrrcmasyva4f1"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/carllerche/slab")
+    (synopsis "Pre-allocated storage for a uniform data type")
+    (description "This create provides a pre-allocated storage for a uniform
+data type.")
+    (license license:expat)))
+
+(define-public rust-spin
+  (package
+    (name "rust-spin")
+    (version "0.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "spin" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0m9clchsj0rf13bggsgvbv9haiy0f6rhvnvkpvkk8720a5pkydj4"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/mvdnes/spin-rs.git")
+    (synopsis "Synchronization primitives based on spinning")
+    (description "This crate provides synchronization primitives based on
+spinning.  They may contain data, are usable without @code{std},and static
+initializers are available.")
+    (license license:expat)))
+
+(define-public rust-stdweb-internal-runtime
+  (package
+    (name "rust-stdweb-internal-runtime")
+    (version "0.1.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "stdweb-internal-runtime" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1nhpyra7glbwcpakhpj5a3d7h7kx1ynif473nzshmk226m91f8ym"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/koute/stdweb")
+    (synopsis "Internal runtime for the @code{stdweb} crate")
+    (description "This crate provides internal runtime for the @code{stdweb}
+crate.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-strsim
+  (package
+    (name "rust-strsim")
+    (version "0.9.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "strsim" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1xphwhf86yxxmcpvm4mikj8ls41f6nf7gqyjm98b74mfk81h6b03"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/dguo/strsim-rs")
+    (synopsis "Rust implementations of string similarity metrics")
+    (description "This crate includes implementations of string similarity
+metrics.  It includes Hamming, Levenshtein, OSA, Damerau-Levenshtein, Jaro,
+and Jaro-Winkler.")
+    (license license:expat)))
+
+(define-public rust-synstructure-test-traits
+  (package
+    (name "rust-synstructure-test-traits")
+    (version "0.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "synstructure_test_traits" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1b3fs2b9kc1gy9dilaxqjbdl4z0mlrbbxjzkprdx953rif1c3q66"))))
+    (build-system cargo-build-system)
+    (home-page "https://crates.io/crates/synstructure_test_traits")
+    (synopsis "Helper test traits for synstructure doctests")
+    (description
+     "This package provides helper test traits for synstructure doctests.")
+    (license license:expat)))
+
+(define-public rust-typenum
+  (package
+    (name "rust-typenum")
+    (version "1.10.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "typenum" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0sc1jirllfhdi52z1xv9yqzxzpk6v7vadd13n7wvs1wnjipn6bb1"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/paholg/typenum")
+    (synopsis "Rust library for type-level numbers evaluated at compile time")
+    (description "Typenum is a Rust library for type-level numbers evaluated at
+compile time.  It currently supports bits, unsigned integers, and signed
+integers.  It also provides a type-level array of type-level numbers, but its
+implementation is incomplete.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-ucd-util
+  (package
+    (name "rust-ucd-util")
+    (version "0.1.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "ucd-util" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0x088q5z0m09a2jqcfgsnq955y8syn1mgn35cl78qinkxm4kp6zs"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/BurntSushi/ucd-generate")
+    (synopsis "library for working with the Unicode character database")
+    (description "This package provides a small utility library for working
+with the Unicode character database.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-unicode-width
+  (package
+    (name "rust-unicode-width")
+    (version "0.1.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "unicode-width" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "09k5lipygardwy0660jhls08fsgknrazzivmn804gps53hiqc8w8"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/unicode-rs/unicode-width")
+    (synopsis "Determine displayed width according to Unicode rules")
+    (description "This crate allows you to determine displayed width of
+@code{char} and @code{str} types according to Unicode Standard Annex #11 rules.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-unicode-xid
+  (package
+    (name "rust-unicode-xid")
+    (version "0.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "unicode-xid" version))
+        (file-name
+          (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1z57lqh4s18rr4x0j4fw4fmp9hf9346h0kmdgqsqx0fhjr3k0wpw"))))
+    (build-system cargo-build-system)
+    (home-page
+      "https://github.com/unicode-rs/unicode-xid")
+    (synopsis "Determine Unicode XID related properties")
+    (description "Determine whether characters have the XID_Start
+or XID_Continue properties according to Unicode Standard Annex #31.")
+    ;; Dual licensed.
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-unindent
+  (package
+    (name "rust-unindent")
+    (version "0.1.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "unindent" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1x21ilf78aqcq9xzb9b7i628wm10rhk0jp0chlv06rkc690l8jw3"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/dtolnay/indoc")
+    (synopsis "Remove a column of leading whitespace from a string")
+    (description "This crate allows you to remove a column of leading
+whitespace from a string.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-wasm-bindgen-shared
+  (package
+    (name "rust-wasm-bindgen-shared")
+    (version "0.2.48")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "wasm-bindgen-shared" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "08rnfhjyk0f6liv8n4rdsvhx7r02glkhcbj2lp9lcbkbfpad9hnr"))))
+    (build-system cargo-build-system)
+    (home-page "https://rustwasm.github.io/wasm-bindgen/")
+    (synopsis "Shared support between wasm-bindgen and wasm-bindgen cli")
+    (description "This package provides shared support between
+@code{wasm-bindgen} and @code{wasm-bindgen} cli, an internal dependency.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-winapi
+  (package
+    (name "rust-winapi")
+    (version "0.3.7")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "winapi" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0w7pbhcl087lkggxdflfp2i92rq89ahsfdkjkv44fgmiy9m3h3pi"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-winapi-i686-pc-windows-gnu"
+         ,rust-winapi-i686-pc-windows-gnu)
+        ("rust-winapi-x86-64-pc-windows-gnu"
+         ,rust-winapi-x86-64-pc-windows-gnu))))
+    (home-page "https://github.com/retep998/winapi-rs")
+    (synopsis "Raw FFI bindings for all of Windows API.")
+    (description
+     "Raw FFI bindings for all of Windows API.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-winapi-i686-pc-windows-gnu
+  (package
+    (name "rust-winapi-i686-pc-windows-gnu")
+    (version "0.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "winapi-i686-pc-windows-gnu" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/retep998/winapi-rs")
+    (synopsis "Import libraries for the i686-pc-windows-gnu target")
+    (description "This crate provides import libraries for the
+i686-pc-windows-gnu target.  Please don't use this crate directly, depend on
+@code{winapi} instead.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public rust-winapi-x86-64-pc-windows-gnu
+  (package
+    (name "rust-winapi-x86-64-pc-windows-gnu")
+    (version "0.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "winapi-x86_64-pc-windows-gnu" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/retep998/winapi-rs")
+    (synopsis "Import libraries for the x86_64-pc-windows-gnu target")
+    (description "This package provides import libraries for the
+x86_64-pc-windows-gnu target.  Please don't use this crate directly, depend on
+@code{winapi} instead.")
+    (license (list license:asl2.0
+                   license:expat))))
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index b87203cab6..467aa5d84c 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -57,7 +57,7 @@
 (define-public cups-filters
   (package
     (name "cups-filters")
-    (version "1.25.0")
+    (version "1.25.1")
     (source(origin
               (method url-fetch)
               (uri
@@ -65,7 +65,7 @@
                               "cups-filters-" version ".tar.xz"))
               (sha256
                (base32
-                "1laiscq8yvynw862calkgbz9irrdkmd5l821q6a6wik1ifd186c1"))
+                "0nlq44jnjcnrbdv0dv5myg5kaycmk6a4klynpvj65xvn3l9cq28s"))
               (modules '((guix build utils)))
               (snippet
                ;; install backends, banners and filters to cups-filters output
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 26f7bb8f73..771981fb19 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -132,12 +132,13 @@
     (name "4store")
     (version "1.1.6")
     (source (origin
-      (method url-fetch)
-      (uri (string-append "https://github.com/4store/4store/archive/v"
-                          version ".tar.gz"))
-      (file-name (string-append name "-" version ".tar.gz"))
+      (method git-fetch)
+      (uri (git-reference
+             (url "https://github.com/4store/4store.git")
+             (commit (string-append "v" version))))
+      (file-name (git-file-name name version))
       (sha256
-       (base32 "004fmcf1w75zhc1x3zc6kc97j4jqn2v5nhk6yb3z3cpfrhzi9j50"))
+       (base32 "1kzdfmwpzy64cgqlkcz5v4klwx99w0jk7afckyf7yqbqb4rydmpk"))
       (patches (search-patches "4store-unset-preprocessor-directive.patch"
                                "4store-fix-buildsystem.patch"))))
     (build-system gnu-build-system)
@@ -160,12 +161,6 @@
        ("cyrus-sasl" ,cyrus-sasl)
        ("openssl" ,openssl)
        ("util-linux" ,util-linux)))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'generate-configure
-           (lambda _
-             (invoke "sh" "autogen.sh"))))))
     ;; 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")
@@ -616,15 +611,15 @@ Language.")
 (define-public mariadb
   (package
     (name "mariadb")
-    (version "10.1.40")
+    (version "10.1.41")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://downloads.mariadb.org/f/"
-                                  name "-" version "/source/"
-                                  name "-" version ".tar.gz"))
+              (uri (string-append "https://downloads.mariadb.com/MariaDB"
+                                  "/mariadb-" version "/source/mariadb-"
+                                  version ".tar.gz"))
               (sha256
                (base32
-                "19375bnq0yg52kqh6cy00s5rglcxdrs5bb2hy7dqv2xqa9z7lxci"))
+                "1wh0073lqw3d9xs150bf2q3qvjwa6886mfi9khmsn7p8vapw6irb"))
               (patches (search-patches "mariadb-client-test-32bit.patch"))
               (modules '((guix build utils)))
               (snippet
@@ -806,14 +801,14 @@ as a drop-in replacement of MySQL.")
 (define-public postgresql
   (package
     (name "postgresql")
-    (version "10.9")
+    (version "10.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "0m0gbf7nwgag6a1z5f9xszwzgf2xhx0ncakyxwxlzs87n1zk32wm"))
+                "0lzj46dwd9cw94gnqm36bxd7jlhfdyqjrfzr3c4xd3prfn2rnkxd"))
               (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -853,27 +848,27 @@ pictures, sounds, or video.")
   (package
     (inherit postgresql)
     (name "postgresql")
-    (version "11.4")
+    (version "11.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "12ycjlqncijgmd5z078ybwda8ilas96lc7nxxmdq140mzpgjv002"))))))
+                "106ikalvrilihlvhq7xj7snq98hgbgq6qsgjrd252wgw1c327pvz"))))))
 
 (define-public postgresql-9.6
   (package
     (inherit postgresql)
     (name "postgresql")
-    (version "9.6.14")
+    (version "9.6.15")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "08hsqczy1ixkjyf2vr3s9x69agfz9yr8lh31fir4z0dfr5jw421z"))))))
+                "02hp69h2p02asfblkaahblzdz2zmawd2r11h6237y5j7yadgxn9w"))))))
 
 (define-public python-pymysql
   (package
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index 1e5379b020..d114e24ee7 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -195,7 +195,7 @@ by no means limited to these applications.)  This package provides XML DTDs.")
     (build-system python-build-system)
     ;; TODO: Add xfig/transfig for fig2dev utility
     (inputs
-     `(("texlive" ,(texlive-union (list texlive-latex-amsfonts
+     `(("texlive" ,(texlive-union (list texlive-amsfonts
                                         texlive-latex-anysize
                                         texlive-latex-appendix
                                         texlive-latex-changebar
@@ -219,7 +219,6 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                                         texlive-latex-url
                                         texlive-latex-wasysym
 
-                                        texlive-fonts-amsfonts
                                         texlive-fonts-ec
                                         texlive-fonts-rsfs
                                         texlive-fonts-stmaryrd
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm
index 18e7bea724..94cfa2bdb7 100644
--- a/gnu/packages/docker.scm
+++ b/gnu/packages/docker.scm
@@ -63,12 +63,13 @@
     (arguments '(#:tests? #f))
     (inputs
      `(("python-requests" ,python-requests-2.20)
-       ("python-docker-pycreds" ,python-docker-pycreds)
        ("python-ipaddress" ,python-ipaddress)
-       ("python-paramiko" ,python-paramiko)
        ("python-six" ,python-six)
        ("python-urllib3" ,python-urllib3-1.24)
        ("python-websocket-client" ,python-websocket-client)))
+    (propagated-inputs
+     `(("python-docker-pycreds" ,python-docker-pycreds)
+       ("python-paramiko" ,python-paramiko))) ; adds SSH support
     (home-page "https://github.com/docker/docker-py/")
     (synopsis "Python client for Docker")
     (description "Docker-Py is a Python client for the Docker container
@@ -113,17 +114,11 @@ client.")
     ;; TODO: Tests require running Docker daemon.
     (arguments '(#:tests? #f))
     (inputs
-     `(("python2-backport-ssl-match-hostname"
-        ,python2-backport-ssl-match-hostname)
-       ("python-cached-property"
+     `(("python-cached-property"
         ,python-cached-property)
-       ("python-colorama" ,python-colorama)
        ("python-docker-py" ,python-docker-py)
-       ("python-docker-pycreds" ,python-docker-pycreds)
        ("python-dockerpty" ,python-dockerpty)
        ("python-docopt" ,python-docopt)
-       ("python-ipaddress" ,python-ipaddress)
-       ("python-paramiko" ,python-paramiko)
        ("python-jsonschema" ,python-jsonschema-2.6)
        ("python-pyyaml" ,python-pyyaml)
        ("python-requests" ,python-requests-2.20)
@@ -586,6 +581,9 @@ provisioning etc.")
              ;; information, and the DWARF symbol table.
              (setenv "LDFLAGS" "-s -w")
 
+             ;; Make sure "docker -v" prints a usable version string.
+             (setenv "VERSION" ,%docker-version)
+
              ;; Make build reproducible.
              (setenv "BUILDTIME" "1970-01-01 00:00:01.000000000+00:00")
              (symlink "src/github.com/docker/cli/scripts" "./scripts")
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 4b1563efb6..70e7c8331b 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -251,7 +251,7 @@ easy.")
 (define-public snap
   (package
     (name "snap")
-    (version "5.0.4")
+    (version "5.0.8")
     (source
      (origin
        (method git-fetch)
@@ -261,7 +261,7 @@ easy.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1zdypxifvxjkzhi4n9mkck8l419wc0pg103339yzhsbb9kkd3jlr"))))
+         "0fwfssdgv3mfzyv8hw1a1z5ky1yn0p59kyl6l9fxsm4w2ckgyizd"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 303a807e69..886307d02b 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -51,6 +51,7 @@
 ;;; Copyright © 2019 Baptiste Strazzulla <bstrazzull@hotmail.fr>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autitici.org>
 ;;; Copyright © 2019 Jens Mølgaard <jens@zete.tk>
+;;; Copyright © 2019 Amin Bandali <bandali@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -876,7 +877,7 @@ in certain cases.  It also enables recursion for anonymous functions.")
 (define-public emacs-xr
   (package
     (name "emacs-xr")
-    (version "1.12")
+    (version "1.13")
     (source
      (origin
        (method url-fetch)
@@ -884,7 +885,7 @@ in certain cases.  It also enables recursion for anonymous functions.")
              "https://elpa.gnu.org/packages/xr-" version ".tar"))
        (sha256
         (base32
-         "1vv87h0h8ldc1mbsn45w5z1m6jq8j2js4xz23a9ixdby06g60y3g"))))
+         "1km4x92pii8c4bcimks4xzhmwpypdf183z0zh7raj062jz4jb74r"))))
     (build-system emacs-build-system)
     (home-page "http://elpa.gnu.org/packages/xr.html")
     (synopsis "Convert string regexp to rx notation")
@@ -929,7 +930,7 @@ optional minor mode which can apply this command automatically on save.")
 (define-public emacs-relint
   (package
     (name "emacs-relint")
-    (version "1.8")
+    (version "1.10")
     (source
      (origin
        (method url-fetch)
@@ -937,7 +938,7 @@ optional minor mode which can apply this command automatically on save.")
              "https://elpa.gnu.org/packages/relint-" version ".el"))
        (sha256
         (base32
-         "1bl6m2h7131acbmr0kqfnjjpv2syiv2mxfnm61g874ynnvkmmkm3"))))
+         "1l0lh4pkksw7brmhhbaikwzs4zkgd2962ks1zy7m262dvkhxjfv8"))))
     (build-system emacs-build-system)
     (propagated-inputs `(("emacs-xr" ,emacs-xr)))
     (home-page "https://github.com/mattiase/relint")
@@ -2473,7 +2474,7 @@ column by drawing a thin line down the length of the editing window.")
 (define-public emacs-inf-ruby
   (package
     (name "emacs-inf-ruby")
-    (version "2.5.1")
+    (version "2.5.2")
     (source
      (origin
        (method git-fetch)
@@ -2482,7 +2483,7 @@ column by drawing a thin line down the length of the editing window.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1r452h6cyypqlc59q8dx5smkwhck4qjcg1pf9qdw539cpva5q77z"))))
+        (base32 "0a1hhvfbl6mq8rjsi77fg9fh5a91hi5scjrg9rjqc5ffbql67y0v"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/nonsequitur/inf-ruby")
     (synopsis "Provides a REPL buffer connected to a Ruby subprocess in Emacs")
@@ -3389,6 +3390,76 @@ for the current function or variable in the minibuffer.")
 completion candidate when using the Company text completion framework.")
     (license license:gpl3+)))
 
+(define-public emacs-math-symbol-lists
+  (let ((commit "dc7531cff0c845d5470a50c24d5d7309b2ced7eb")
+        (revision "1"))
+    (package
+      (name "emacs-math-symbol-lists")
+      (version (git-version "1.2.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/vspinu/math-symbol-lists.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "094m21i9rns6m59cmhxcivxxafbg52w8f8na4y3v47aq67zmhhqm"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/vspinu/math-symbol-lists")
+      (synopsis "Lists of Unicode math symbols and @code{LaTeX} commands")
+      (description "This is a storage package used by completion engines like
+@code{company-math}.")
+      (license license:gpl3+))))
+
+(define-public emacs-company-math
+  (let ((commit "600e49449644f6835f9dc3501bc58461999e8ab9")
+        (revision "1"))
+    (package
+      (name "emacs-company-math")
+      (version (git-version "1.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/vspinu/company-math.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1ps2lpkzn8mjbpcbvvy1qz3xbgrh6951x8y9bsd1fm32drdph9lh"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-math-symbol-lists" ,emacs-math-symbol-lists)
+         ("emacs-company" ,emacs-company)))
+      (home-page "https://github.com/vspinu/company-math")
+      (synopsis "Completion backends for Unicode math symbols and @code{LaTeX} tags")
+      (description "This package provides a backend for use with
+@code{company-mode} allowing for completion of common math symbols.")
+      (license license:gpl3+))))
+
+(define-public emacs-nswbuff
+  (let ((commit "362da7f3687e2eb5bb11667347de85f4a9d002bc")
+        (revision "1"))
+    (package
+      (name "emacs-nswbuff")
+      (version (git-version "1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/joostkremers/nswbuff.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0l2xfz8z5qd4hz3kv6zn7h6qq3narkilri8a071y1n8j31jps4ma"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/joostkremers/nswbuff")
+      (synopsis "Quickly switch between buffers")
+      (description "This package allows for navigating between buffers within
+a customizable list.")
+      (license license:gpl3+))))
+
 (define-public emacs-multiple-cursors
   (package
     (name "emacs-multiple-cursors")
@@ -3410,6 +3481,32 @@ completion candidate when using the Company text completion framework.")
 simultaneous cursors.")
     (license license:gpl3+)))
 
+(define-public emacs-mc-extras
+  (let ((commit "053abc52181b8718559d7361a587bbb795faf164")
+        (revision "1"))
+    (package
+      (name "emacs-mc-extras")
+      (version (git-version "1.2.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/knu/mc-extras.el.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "16y48qrd20m20vypvys5jp4v4gc1qrqlkm75s1pk1r68i9zrw481"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-multiple-cursors" ,emacs-multiple-cursors)))
+      (home-page "https://github.com/knu/mc-extras.el")
+      (synopsis "Extra functions for manipulating multiple cursors")
+      (description
+       "This package provides additional functions for
+@code{multiple-cursors}, including functions for marking s-expressions,
+comparing characters, removing cursors, and more.")
+      (license license:bsd-2))))
+
 (define-public emacs-typo
   (package
     (name "emacs-typo")
@@ -4011,6 +4108,38 @@ minutes is started automatically.  Every 4 breaks a long break is
 started with 20 minutes.  All values are customizable.")
     (license license:gpl3+)))
 
+(define-public emacs-org-sidebar
+  (let ((commit "74ca98b9920f3de3f13d49866581435e1ec63ec5")
+        (revision "1"))
+    (package
+      (name "emacs-org-sidebar")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/alphapapa/org-sidebar.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "03p1ndyw2qp2skib5hszc4xyh84w7p2mhkd4a9dy6qv8q47xpsqn"))))
+      (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)))
+      (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
+top is a chronological list of scheduled and deadlined tasks in the current
+buffer (similar to the Org agenda ,but without all its features), and below
+that is a list of all other non-done to-do items.  If the buffer is narrowed,
+the sidebar only shows items in the narrowed portion; this allows seeing an
+overview of tasks in a subtree.")
+      (license license:gpl3+))))
+
 (define-public emacs-org-trello
   (package
     (name "emacs-org-trello")
@@ -4604,45 +4733,50 @@ automatically.")
     (license license:gpl3+)))
 
 (define-public emacs-ivy
-  (package
-    (name "emacs-ivy")
-    (version "0.12.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/abo-abo/swiper.git")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0xgngn3jhmyn6mlkk9kmgfgh0w5i50b27syr4cgfgarg6p77j05w"))))
-    (build-system emacs-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (info (string-append out "/share/info")))
-               (with-directory-excursion "doc"
-                 (invoke "makeinfo" "ivy.texi")
-                 (install-file "ivy.info" info)
-                 #t)))))))
-    (propagated-inputs
-     `(("emacs-hydra" ,emacs-hydra)))
-    (native-inputs
-     `(("texinfo" ,texinfo)))
-    (home-page "http://oremacs.com/swiper/")
-    (synopsis "Incremental vertical completion for Emacs")
-    (description
-     "This package provides @code{ivy-read} as an alternative to
+  ;; The latest release version introduced a new feature, swiper-isearch, that
+  ;; generally works well but had some noticeable bugs; this later commit
+  ;; includes fixes for several of them.
+  (let ((commit "d3e4514fd72f217c704ae18afdf711bb9036a04d")
+        (revision "1"))
+    (package
+      (name "emacs-ivy")
+      (version (git-version "0.12.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/abo-abo/swiper.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "142axxc6vsl14cfyvzj9csiykxdn7vhw88fy955hzx7av4qfqg4x"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'install-doc
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (info (string-append out "/share/info")))
+                 (with-directory-excursion "doc"
+                   (invoke "makeinfo" "ivy.texi")
+                   (install-file "ivy.info" info)
+                   #t)))))))
+      (propagated-inputs
+       `(("emacs-hydra" ,emacs-hydra)))
+      (native-inputs
+       `(("texinfo" ,texinfo)))
+      (home-page "http://oremacs.com/swiper/")
+      (synopsis "Incremental vertical completion for Emacs")
+      (description
+       "This package provides @code{ivy-read} as an alternative to
 @code{completing-read} and similar functions.  No attempt is made to determine
 the best candidate.  Instead, the user can navigate candidates with
 @code{ivy-next-line} and @code{ivy-previous-line}.  The matching is done by
 splitting the input text by spaces and re-building it into a regular
 expression.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-ivy-pass
   (let ((commit "5b523de1151f2109fdd6a8114d0af12eef83d3c5")
@@ -5228,7 +5362,7 @@ strings, and code folding.")
 (define-public emacs-nodejs-repl
   (package
     (name "emacs-nodejs-repl")
-    (version "0.2.1")
+    (version "0.2.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -5237,7 +5371,7 @@ strings, and code folding.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "05ccv87rnw7fss3lib8m9sywjrj6n92fnd7mmhmjh27g2klqc83z"))))
+                "1kkj888k9x5n0i7xkia177gzsa84my3g8n0n7v65281cc4f1yhk5"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/abicky/nodejs-repl.el")
     (synopsis "Node.js REPL inside Emacs")
@@ -5580,28 +5714,35 @@ environments (virtualenv) inside Emacs.")
     (license license:gpl3+)))
 
 (define-public emacs-highlight-indentation
-  (package
-    (name "emacs-highlight-indentation")
-    (version "0.7.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/antonj/Highlight-Indentation-for-Emacs.git")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "00l54k75qk24a0znzl4ij3s3nrnr2wy9ha3za8apphzlm98m907k"))))
-    (build-system emacs-build-system)
-    (home-page "https://github.com/antonj/Highlight-Indentation-for-Emacs/")
-    (synopsis "Highlighting indentation for Emacs")
-    (description "Provides two minor modes to highlight indentation guides in Emacs:
+  ;; Last release version is from 2015.
+  (let ((commit "d03803f2c06749c430443a3d24e039cbafc9c58f")
+        (revision "1"))
+    (package
+      (name "emacs-highlight-indentation")
+      (version (git-version "0.7.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/antonj/Highlight-Indentation-for-Emacs.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1jq0gf4kcx9hvrw40rnw5c2qynjpjw1vsjbi2i4lqjbsnfnxn4wz"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/antonj/Highlight-Indentation-for-Emacs/")
+      (synopsis "Highlighting indentation for Emacs")
+      (description "This package provides two minor modes to highlight
+indentation guides in Emacs:
+
 @enumerate
 @item @code{highlight-indentation-mode}, which displays guidelines
-indentation (space indentation only).
-@item @code{highlight-indentation-current-column-mode}, which displays guidelines for the current-point indentation (space indentation only).
+  indentation (space indentation only).
+@item @code{highlight-indentation-current-column-mode}, which displays
+  guidelines for the current-point indentation (space indentation only).
 @end enumerate")
-    (license license:gpl2+)))
+      (license license:gpl2+))))
 
 (define-public emacs-elpy
   (package
@@ -5931,7 +6072,7 @@ ack, ag, helm and pt.")
 (define-public emacs-helm
   (package
     (name "emacs-helm")
-    (version "3.2")
+    (version "3.3")
     (source
      (origin
        (method git-fetch)
@@ -5940,7 +6081,7 @@ ack, ag, helm and pt.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "12yyprpgh2by2pd41i4z9gz55fxg0f90x03bfrsf791xwbhf6931"))))
+        (base32 "0fqhw7r9fcsja5d3pgbipw7pkw9nj534faav6hi45413hc3gyv92"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -6119,21 +6260,21 @@ xref, etc...) are still available, but with better integration.")
       (license license:gpl3+))))
 
 (define-public emacs-lua-mode
-  (let ((commit "652e299cb967fccca827dda381d61a9c144d97de")
-        (revision "1"))
+  (let ((commit "95c64bb5634035630e8c59d10d4a1d1003265743")
+        (revision "2"))
     (package
       (name "emacs-lua-mode")
-      (version (string-append "20151025." revision "-" (string-take commit 9)))
+      (version (git-version "20151025" revision commit))
       (home-page "https://github.com/immerrr/lua-mode/")
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
                       (url home-page)
                       (commit commit)))
-                (file-name (string-append name "-" version ".checkout"))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "053025k930wh0lak6rc1973ynfrmm8zsyzfqhhd39x7abkl41hc9"))))
+                  "1mra4db25ds64526dsj8m5yv0kfq3lgggjh1x6xmqypdaryddbcp"))))
       (build-system emacs-build-system)
       (synopsis "Major mode for lua")
       (description
@@ -6399,12 +6540,11 @@ aligning text objects based on separators.")
       (license license:gpl3+))))
 
 (define-public emacs-evil-expat
-  (let ((commit "4c344ea19b789002d759a202ffbf594730d2c59a")
-        (version "0.0.1")
+  (let ((commit "f4fcd0aa3edc359adb5c986b5dd9188d220d84e2")
         (revision "1"))
     (package
       (name "emacs-evil-expat")
-      (version (git-version version revision commit))
+      (version (git-version "0.0.1" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -6414,7 +6554,7 @@ aligning text objects based on separators.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "16v7fnldxag6l1lsnrnhdjkga9qi78lbdfbb82k6pmv04991mbkr"))))
+           "0872ix682hkdz0k8pn6sb54rqkx00rz5fxpd5j2snx406yagpaxz"))))
       (build-system emacs-build-system)
       (propagated-inputs `(("emacs-evil" ,emacs-evil)))
       (home-page "https://github.com/edkolev/evil-expat")
@@ -6587,14 +6727,14 @@ passive voice.")
     (name "emacs-org")
     ;; emacs-org-contrib inherits from this package.  Please update its sha256
     ;; checksum as well.
-    (version "9.2.3")
+    (version "9.2.5")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://elpa.gnu.org/packages/org-"
+              (uri (string-append "https://elpa.gnu.org/packages/org-"
                                   version ".tar"))
               (sha256
                (base32
-                "0hqy4lns9q5p0l1ylgmlckqprn9sbasszhznanmv0rsh0gzhsbyw"))))
+                "1pid1sykgz83i4ry5n8f270finag6sm7ckqxn5lkikyya43wlzx1"))))
     (build-system emacs-build-system)
     (home-page "https://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
@@ -6608,14 +6748,14 @@ programming and reproducible research.")
   (package
     (inherit emacs-org)
     (name "emacs-org-contrib")
-    (version "20190715")
+    (version "20190805")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://orgmode.org/elpa/org-plus-contrib-"
                                   version ".tar"))
               (sha256
                (base32
-                "0yxxkcaxhp5bmjsfdd9pz79rj9s7nb4gj5ci51sh4pf8mimk9542"))))
+                "1mw91hwbqyjq5pyz9hzdhvjlc2bphqpi23yqd3sdk1crpc87s40c"))))
     (arguments
      `(#:modules ((guix build emacs-build-system)
                   (guix build utils)
@@ -7159,6 +7299,56 @@ find files owned by packages...  And much more, including performing all the
 above over the network.")
       (license license:gpl3+))))
 
+(define-public emacs-helm-org-rifle
+  (package
+    (name "emacs-helm-org-rifle")
+    (version "1.6.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/alphapapa/helm-org-rifle")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1r38xhwvgbv6kn5x159phz3xgss7f1rc7icq27rnr4d8aj91wm6k"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-f" ,emacs-f)
+       ("emacs-helm" ,emacs-helm)
+       ("emacs-s" ,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
+in Org buffers and displays matching entries.")
+    (license license:gpl3+)))
+
+(define-public emacs-dired-toggle-sudo
+  (package
+    (name "emacs-dired-toggle-sudo")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/renard/dired-toggle-sudo")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0ajj8d6k5in2hclcrqckinfh80ylddplva0ryfbkzsjkfq167cv2"))
+       (patches
+        (search-patches
+         "emacs-dired-toggle-sudo-emacs-26.patch"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/renard/dired-toggle-sudo")
+    (synopsis "Browse directory with @code{sudo} privileges")
+    (description "This package allows for the use of @code{dired} with
+@code{sudo} privileges.")
+    (license license:wtfpl2)))
+
 (define-public emacs-memoize
   (package
     (name "emacs-memoize")
@@ -8528,12 +8718,11 @@ the actual transformations.")
       (license license:gpl2+))))
 
 (define-public emacs-dired-hacks
-  (let ((commit "2c1234592aee91dcd9401bcd67213e6a4a464fd9")
-        (revision "1"))
+  (let ((commit "886befe113fae397407c804f72c45613d1d43535")
+        (revision "2"))
     (package
       (name "emacs-dired-hacks")
-      (version (string-append "0.0.1-" revision "."
-                              (string-take commit 7)))
+      (version (git-version "0.0.1" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -8542,7 +8731,7 @@ the actual transformations.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1g7mky41cahpryzj6frdgzdymknpqq7pidzfjj9304887kijmhj3"))))
+                  "1cvibg90ggyrivpjmcfprpi2fx7dpa68f8kzg08s88gw5ib75djl"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-dash" ,emacs-dash)
@@ -8553,7 +8742,9 @@ the actual transformations.")
       (synopsis
        "Collection of useful dired additions")
       (description
-       "Collection of Emacs dired mode additions:
+       "This package provides the following collection of Emacs dired mode
+additions:
+
 @itemize
 @item dired-avfs
 @item dired-columns
@@ -8623,6 +8814,32 @@ available key bindings that follow C-x (or as many as space allows given your
 settings).")
     (license license:gpl3+)))
 
+(define-public emacs-hercules
+  (let ((commit "3345904a0dab4c7a4d4478f0766f1d9f5d1bb501")
+        (revision "1"))
+    (package
+      (name "emacs-hercules")
+      (version (git-version "0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.com/jjzmajic/hercules.el.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0cpq8h6l47nqhzch6snax5yrhxl8p4wn35q13ci35lj3iq8kmlk8"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-which-key" ,emacs-which-key)))
+      (home-page "https://gitlab.com/jjzmajic/hercules.el")
+      (synopsis "Call a chain of related commands without repeated prefix keys")
+      (description
+       "This package provides sticky-key-like functionality to obviate the
+need for repeated prefix-key sequences, and can reuse existing keymaps. The
+list of commands is displayed in a handy popup.")
+      (license license:gpl3+))))
+
 (define-public emacs-ws-butler
   (package
     (name "emacs-ws-butler")
@@ -10433,29 +10650,32 @@ as well as functions for navigating between these headings.")
     (license license:gpl3+)))
 
 (define-public emacs-org-super-agenda
-  (package
-   (name "emacs-org-super-agenda")
-   (version "1.1")
-   (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
-              "0vzf91lsxnhwf52kvm8ycpf0wb9c8l91689vyhwgv4wz8q6cvjwp"))))
-   (build-system emacs-build-system)
-   (propagated-inputs
-    `(("emacs-org" ,emacs-org)
-      ("emacs-dash" ,emacs-dash)
-      ("emacs-ht" ,emacs-ht)
-      ("emacs-s" ,emacs-s)))
-   (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
+  ;; emacs-org-sidebar depends on a newer commit than the latest release version.
+  (let ((commit "375bde4ca72494ac88a2a9738754f047fe45cc4e")
+        (revision "1"))
+    (package
+      (name "emacs-org-super-agenda")
+      (version (git-version "1.1.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/alphapapa/org-super-agenda")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0hrwf02fqjm0d9gj146ax67ib76093qpqh7066dcxj2gy20625yj"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-org" ,emacs-org)
+         ("emacs-dash" ,emacs-dash)
+         ("emacs-ht" ,emacs-ht)
+         ("emacs-s" ,emacs-s)))
+      (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
 into sections while preserving the structure imposed by any timestamps.")
-   (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-org-make-toc
   (package
@@ -11752,7 +11972,7 @@ downloading manager for Emacs.")
 (define-public emacs-helpful
   (package
     (name "emacs-helpful")
-    (version "0.16")
+    (version "0.17")
     (source
      (origin
        (method git-fetch)
@@ -11761,7 +11981,7 @@ downloading manager for Emacs.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1pzlx3galyryd3hd84hnd7r5s6yl9sdrfhy1s6dgz40glw41wmpr"))))
+        (base32 "0v2y0x9pwi08y2mgjjiw5brfb5haa7pbmy4540glw904ffxxcblj"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-elisp-refs" ,emacs-elisp-refs)
@@ -12676,6 +12896,29 @@ When @code{gac-automatically-push-p} is non-nil, it also tries to push to
 the current upstream.")
     (license license:gpl3+)))
 
+(define-public emacs-scroll-on-drag
+  (let ((commit "888abd04c34753b1fc4b2fe541bc004ebec5c996")
+        (revision "1"))
+    (package
+      (name "emacs-scroll-on-drag")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.com/ideasman42/emacs-scroll-on-drag.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1si4hdqa3jw1inbyh3wb3i5i9grbms1nwky3vyk9zg7iznwm8a9p"))))
+      (build-system emacs-build-system)
+      (home-page "https://gitlab.com/ideasman42/emacs-scroll-on-drag")
+      (synopsis "Interactive scrolling")
+      (description "This package permits scrolling at increasing speeds based
+on drag distance.")
+      (license license:gpl3+))))
+
 (define-public emacs-company-restclient
   (package
     (name "emacs-company-restclient")
@@ -13692,12 +13935,11 @@ server with @code{M-x pinentry-start}.")
       (license license:gpl3+))))
 
 (define-public emacs-so-long
-  (let ((commit "3ebe97decdb5cbbfba82ca686e0ad2c7d2722b4a")
-        (version "1.0")
-        (revision "1"))
+  (let ((commit "cfae473b1bf65f78ddb015159e667ec0103d881c")
+        (revision "2"))
     (package
       (name "emacs-so-long")
-      (version (git-version version revision commit))
+      (version (git-version "1.0" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -13707,7 +13949,7 @@ server with @code{M-x pinentry-start}.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0fi71g5rsdsi978jz8406k8hvzgnssm9wxar8yqfhs97178r9s5m"))))
+           "0g943n5cl9lz5s7hszg6yvp10xd1xvd8mfgxyg0yckmp8fqkswin"))))
       (build-system emacs-build-system)
       (home-page "https://www.emacswiki.org/emacs/SoLong")
       (synopsis "Improve performance in files with long lines")
@@ -13744,12 +13986,13 @@ accept and reject GitHub pull requests.")
       (license license:gpl3+))))
 
 (define-public emacs-deadgrep
-  (let ((commit "caeb37b8d6ab83f0eba353d6bbb29678190d4419")
-        (version "0.7")
+  ;; We prefer a newer commit (four commits newer than release) because of a
+  ;; bugfix for globbing.
+  (let ((commit "329119c65126f7917d3910bc584f4191ba8f21ac")
         (revision "1"))
     (package
       (name "emacs-deadgrep")
-      (version (git-version version revision commit))
+      (version (git-version "0.8" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -13759,7 +14002,7 @@ accept and reject GitHub pull requests.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "158fqha8nilwfzmw15lcsq8b099j8wclzq303md0j4mfr2q2gfvs"))))
+           "0fxf7gq9sjfkgpdfqx10w3l3nd4rwa8kv9plyxk1fqacb3s5m6ai"))))
       (build-system emacs-build-system)
       (inputs
        `(("emacs-dash" ,emacs-dash)
@@ -14142,7 +14385,7 @@ buffers – other modes on the TODO list).
 (define-public emacs-magit-todos
   (package
     (name "emacs-magit-todos")
-    (version "1.2")
+    (version "1.3")
     (source
      (origin
        (method git-fetch)
@@ -14152,7 +14395,7 @@ buffers – other modes on the TODO list).
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "17a18gszbypz82bj36xbfyykc4s9rz83vwmpxvlf65svhd51c0nh"))))
+         "0gfm6wn2a4v5i9lfsvvin0kwpr9n96ddm3z4yf50jd3kg2igzry1"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -16189,7 +16432,7 @@ previewed by scrolling up and down within a @code{dired} buffer.")
 (define-public emacs-counsel-etags
   (package
     (name "emacs-counsel-etags")
-    (version "1.8.4")
+    (version "1.8.7")
     (source
      (origin
        (method git-fetch)
@@ -16199,7 +16442,7 @@ previewed by scrolling up and down within a @code{dired} buffer.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "14my9jvxl26a5yn381h5pi5481y9d9gyk7wnxxd0s4sjc964c5h5"))))
+         "0vjcjspfrz1csnmfi6r7p7f070a496adxkqnsxwx1gx8cpylwp1g"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-ivy" ,emacs-ivy)))
@@ -16632,6 +16875,30 @@ provided.  Those alternative commands are and bound by default to their
 corresponding Evil keys.")
       (license license:expat))))
 
+(define-public emacs-evil-traces
+  (let ((commit "b41b7432b8110378c199a3d25af464083777f453")
+        (revision "1"))
+    (package
+      (name "emacs-evil-traces")
+      (version (git-version "0.0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/mamapanda/evil-traces.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0a15f2saynz9fws1h5s7py3cshsk4xs1kwgwj1m5rsin36g0j6hc"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-evil" ,emacs-evil)))
+      (home-page "https://github.com/mamapanda/evil-traces")
+      (synopsis "Visual hints for @code{evil-ex}")
+      (description "This package adds visual hints to certain @code{ex}
+commands in @code{evil-mode}.")
+      (license license:gpl3+))))
+
 (define-public emacs-xterm-color
   (let ((commit "a452ab38a7cfae97078062ff8885b5d74fd1e5a6")
         (version "1.8")
@@ -16846,6 +17113,29 @@ convert the resulting @code{.epub} to a @code{.mobi} file.  Needs a working
 zip utility (default is @code{zip}).")
     (license license:gpl3+)))
 
+(define-public emacs-ox-hugo
+  (package
+    (name "emacs-ox-hugo")
+    (version "0.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/kaushalmodi/ox-hugo.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "11h464cyc28ld0b0zridgm4drydc1qjxbm1y24zrwlkyqqjk6yr7"))))
+    (build-system emacs-build-system)
+    (home-page "https://ox-hugo.scripter.co")
+    (synopsis "Hugo markdown back-end for Org export engine")
+    (description
+     "Ox-hugo is an Org exporter backend that exports Org to Hugo-compatible
+Markdown, Blackfriday, and also generates the front-matter in TOML or YAML
+format.")
+    (license license:gpl3+)))
+
 (define-public emacs-ox-pandoc
   (package
     (name "emacs-ox-pandoc")
@@ -16926,3 +17216,28 @@ time.")
     (description "@code{mastodon.el} is an Emacs client for Mastodon, the
 federated microblogging social network.")
     (license license:gpl3+)))
+
+;; The last release tarball is for version 0.6.  We pick a commit close to
+;; version 0.6.10, which doesn't have a release tarball.
+(define-public emacs-ebdb
+  (let ((commit "2a87f5ed2a53e3a4e91e8c88ba5afc49f5e945df")
+        (revision "0"))
+    (package
+      (name "emacs-ebdb")
+      (version (git-version "0.6.10" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/girzel/ebdb.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0fidy7z0c86dpqiss97sg5s92fd3fj4bdl8pqqdgg2m00jx4mrjz"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/girzel/ebdb")
+      (synopsis "EIEIO port of BBDB, Emacs's contact-management package")
+      (description "EBDB is a contact management/addressbook package for
+Emacs.  It's a re-write of the Insidious Big Brother Database (BBDB) using
+Emacs Lisp's (relatively new) EIEIO object oriented libraries.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index bf638525df..fa2bf786c2 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -119,8 +119,8 @@
 
 ;; Building from recent Git because the official 5.0 release no longer builds.
 (define-public dolphin-emu
-  (let ((commit "2c57e709d0f9e4010a4415de4192de887e37f187")
-        (revision "5"))
+  (let ((commit "24718c1a389e4f51db974575cd15c372485b92e2")
+        (revision "6"))
     (package
       (name "dolphin-emu")
       (version (git-version "5.0" revision commit))
@@ -146,7 +146,7 @@
              #t))
          (sha256
           (base32
-           "0aszfdfvs7yg4bmrd3qxwsiz7hx3mrj29f4aw86bz7h9j7hkh57f"))))
+           "1d92rhnw307j3m6swk6bycb8fyc7vw2hfgakd5hpsc4qw65vxfq8"))))
       (build-system cmake-build-system)
       (arguments
        '(#:tests? #f
@@ -244,12 +244,6 @@ turbo speed, networked multiplayer, and graphical enhancements.")
                (base32
                 "02i648i50dwicv1vaql15rccv4g8h5blf5g6inv67lrfxpbkvlf0"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after
-                   'unpack 'autogen.sh
-                   (lambda _
-                     (invoke "sh" "autogen.sh"))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)))
@@ -1185,7 +1179,7 @@ play them on systems for which they were never designed!")
 (define-public mame
   (package
     (name "mame")
-    (version "0.211")
+    (version "0.212")
     (source
      (origin
        (method git-fetch)
@@ -1195,7 +1189,11 @@ play them on systems for which they were never designed!")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0gbxgncbzmmplijg0c1ibwsb87fbmfvs1kjflh002yyx8yvfw83z"))
+         "0p3zcb9l624dsy2gyv23ppp1k1iwd1vrg8cbn5v4fx1s44mx7f5c"))
+       (patches
+       ;; FIXME: Remove once 0.213 is out.  Applied upstream as
+       ;; 0b5b13cf1e28550b49c387dec93f9801f029e313.
+        (search-patches "mame-rapidjson-fix.patch"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled libraries.
diff --git a/gnu/packages/enchant.scm b/gnu/packages/enchant.scm
index ce148b47a5..cfec161784 100644
--- a/gnu/packages/enchant.scm
+++ b/gnu/packages/enchant.scm
@@ -33,7 +33,7 @@
 (define-public enchant
   (package
     (name "enchant")
-    (version "2.2.4")
+    (version "2.2.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/AbiWord/enchant/releases"
@@ -41,7 +41,7 @@
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1p6a3qmrh8bjzds6x7rg9da0ir44gg804jzkf634h39wsa4vdmpm"))))
+                "0iqwzs11i9fvqdxv5kn0svcn2mzymn657qf3j66lg8dx1nh4xkpz"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static"
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 7d48414889..a1f222bed4 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2018, 2019 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2019 Tim Stahel <swedneck@swedneck.xyz>
+;;; Copyright © 2019 Jovany Leandro G.C <bit4bit@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2062,3 +2063,49 @@ purpose circuit simulator and can perform DC and transient analyses, fourier
 analysis and AC analysis.  The engine is designed to do true mixed-mode
 simulation.")
     (license license:gpl3+)))
+
+(define-public cutter
+  (package
+    (name "cutter")
+    (version "1.8.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/radareorg/cutter")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "03f3cdckh51anx9gd1b0ndb2fg7061hqngvygf32ky29mm2m2lyv"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (radare2 (assoc-ref inputs "radare2")))
+               ;; fix pkg-config detection ./src/lib_radare2.pri:PREFIX=/usr/lib
+               ;; override `qmake PREFIX=`
+               (substitute* "./src/lib_radare2.pri"
+                 (("PREFIX") "R2PREFIX")
+                 (("R2PREFIX=/usr") (string-append "R2PREFIX=" radare2)))
+               (invoke "qmake"
+                       (string-append "PREFIX=" out)
+                       "./src/Cutter.pro")))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("qtbase" ,qtbase)
+       ("qtsvg" ,qtsvg)
+       ("openssl" ,openssl)
+       ("radare2" ,radare2)))
+    (home-page "https://github.com/radareorg/cutter")
+    (synopsis "GUI for radare2 reverse engineering framework")
+    (description "Cutter is a GUI for radare2 reverse engineering framework.
+Its goal is making an advanced andcustomizable reverse-engineering platform
+while keeping the user experience at mind.  Cutter is created by reverse
+engineers for reverse engineers.")
+    (license (list license:cc-by-sa3.0  ;the "Iconic" icon set
+                   license:gpl3+))))    ;everything else
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 8556677e74..87775c68fe 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,6 +39,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system python)
   #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system go)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
@@ -357,7 +359,7 @@ do so.")
 (define-public electrum
   (package
     (name "electrum")
-    (version "3.3.6")
+    (version "3.3.8")
     (source
      (origin
        (method url-fetch)
@@ -365,7 +367,7 @@ do so.")
                            version "/Electrum-"
                            version ".tar.gz"))
        (sha256
-        (base32 "0am5ki3z0yvhrz16vp2jjy5fkxxqph0mj9qqpbw3kpql65shykwz"))
+        (base32 "1g00cj1pmckd4xis8r032wmraiv3vd3zc803hnyxa2bnhj8z3bg2"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -715,9 +717,6 @@ the Monero GUI client.")
 Ledger Nano as a hardware SSH/GPG agent.")
     (license license:lgpl3)))
 
-(define-public python2-trezor-agent
-  (package-with-python2 python-trezor-agent))
-
 (define-public python-mnemonic
   (package
     (name "python-mnemonic")
@@ -813,9 +812,6 @@ Ledger Blue/Nano S.")
 TREZOR Hardware Wallet.")
     (license license:lgpl3)))
 
-(define-public python2-trezor
-  (package-with-python2 python-trezor))
-
 (define-public python-keepkey
   (package
     (name "python-keepkey")
@@ -965,7 +961,7 @@ Luhn and family of ISO/IEC 7064 check digit algorithms. ")
 (define-public python-duniterpy
   (package
     (name "python-duniterpy")
-    (version "0.54.3")
+    (version "0.55.1")
     (source
      (origin
        (method git-fetch)
@@ -976,7 +972,7 @@ Luhn and family of ISO/IEC 7064 check digit algorithms. ")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1k3rpfc9zxj9z50cr4zjfyzdla9ap5mj1v1rlcriqmflgb5cmiba"))))
+         "07zsbbkzmnvyv5v0vw2d42vw3ar4iqhlidy9376ysk4ldlj1igf7"))))
     (build-system python-build-system)
     (arguments
      ;; Tests fail with "AttributeError: module 'attr' has no attribute 's'".
@@ -1023,7 +1019,7 @@ main features are:
 (define-public silkaj
   (package
     (name "silkaj")
-    (version "0.7.2")
+    (version "0.7.3")
     (source
      (origin
        (method git-fetch)
@@ -1033,7 +1029,7 @@ main features are:
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "059k2kil2l8jcm4wp86w1z7y8p26rww7d3l5fzds0qq2dzvkvzgs"))))
+         "0yk2574yb0d0k0rg7qf0pkmjidblsad04x8hhqpy9k80rvgjcr5w"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))                    ;no test
@@ -1095,3 +1091,26 @@ financial years, budget estimates, bankcard management and other
 information.")
     (home-page "http://grisbi.org")
     (license license:gpl2+)))
+
+(define-public trezord
+  (package
+    (name "trezord")
+    (version "2.0.17")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/trezor/trezord-go.git")
+              (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "0nqzpq0i3crh0i4r1cppja5sn3rwi1fv9afxzwzv63096x5l30a7"))
+       (file-name (git-file-name name version))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/trezor/trezord-go"))
+    (home-page "https://trezor.io")
+    (synopsis "Trezor Communication Daemon aka Trezor Bridge (written in Go)")
+    (description "This allows a Trezor hardware wallet to communicate to the
+Trezor wallet.")
+    (license license:lgpl3+)))
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 713c49259c..c4f82cde19 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -644,7 +644,7 @@ for use at smaller text sizes")))
 (define-public font-gnu-unifont
   (package
     (name "font-gnu-unifont")
-    (version "12.1.02")
+    (version "12.1.03")
     (source
      (origin
        (method url-fetch)
@@ -654,7 +654,7 @@ for use at smaller text sizes")))
              (string-append "mirror://gnu/unifont/unifont-"
                             version "/unifont-" version ".tar.gz")))
        (sha256
-        (base32 "12wdxnlyz5gl5d7h6pazcz8d7h81fwkng1xrayxsgrzh6bqdq4p8"))))
+        (base32 "10mr3ax19v5pa6a791fk2j3k45fpa8n5r36kq9gs8lk95wfnxmf1"))))
     (build-system gnu-build-system)
     (outputs '("out"   ; TrueType version
                "pcf"   ; PCF (bitmap) version
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index fe9e77d8c7..041c1b3b6b 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -637,7 +637,7 @@ definitions.")
 opentype fonts.  You can save fonts in many different outline formats, and
 generate bitmaps.")
    (license license:gpl3+)
-   (home-page "https://fontforge.github.io/en-US/")))
+   (home-page "https://fontforge.github.io")))
 
 (define-public python2-ufolib
   (package
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 7cd959d2f1..b1368cb72e 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -723,7 +723,7 @@ multiplexer to the KMS/DRM Linux kernel devices.")
 (define-public exempi
   (package
     (name "exempi")
-    (version "2.5.0")
+    (version "2.5.1")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -731,7 +731,7 @@ multiplexer to the KMS/DRM Linux kernel devices.")
                    name "-" version ".tar.bz2"))
              (sha256
               (base32
-               "06vi7dc2gappwqm3xpfyy5ihxq14bmvj3bd47yk482jlq0jgr0nw"))))
+               "1j4vx054l1c2cggw4aka4iw48jkcf68qk5y064pbqw1k3ddks2qh"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list (string-append "--with-boost="
@@ -741,7 +741,7 @@ multiplexer to the KMS/DRM Linux kernel devices.")
     (inputs
      `(("expat" ,expat)
        ("zlib" ,zlib)))
-    (home-page "https://wiki.freedesktop.org/libopenraw/Exempi")
+    (home-page "https://libopenraw.freedesktop.org/exempi/")
     (synopsis "XMP metadata handling library")
     (description "Exempi is an implementation of the Extensible Metadata
 Platform (@dfn{XMP}), which enables embedding metadata in PDF and image
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 66b642ebd2..1aa2f92c02 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -4974,6 +4974,10 @@ Crowther & Woods, its original authors, in 1995.  It has been known as
        ("luajit" ,luajit)))
     (arguments
      `(#:make-flags '("CC=gcc" "config=release")
+       ;; XXX: Building in parallel occasionally causes this build failure:
+       ;;   ../src/luajit2/src/host/buildvm.c:73:10: fatal error: buildvm_arch.h:
+       ;;   No such file or directory
+       #:parallel-build? #f
        #:phases (modify-phases %standard-phases
                   (delete 'bootstrap)
                   (replace 'configure
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index e7d50a5b8a..9aaeab6e2c 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -64,14 +64,14 @@
 (define-public glu
   (package
     (name "glu")
-    (version "9.0.0")
+    (version "9.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://ftp.freedesktop.org/pub/mesa/glu/glu-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0r72yyhj09x3krn3kn629jqbwyq50ji8w5ri2pn6zwrk35m4g1s3"))))
+                "1xqhk9bn10nbvffw3r4p4rjslwz1l7gaycc0x2pqkr2irp7q9x7n"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("mesa" ,mesa))) ; according to glu.pc
@@ -227,7 +227,7 @@ also known as DXTn or DXTC) for Mesa.")
 (define-public mesa
   (package
     (name "mesa")
-    (version "19.1.1")
+    (version "19.1.4")
     (source
       (origin
         (method url-fetch)
@@ -239,7 +239,7 @@ also known as DXTn or DXTC) for Mesa.")
                                   version "/mesa-" version ".tar.xz")))
         (sha256
          (base32
-          "10amy5sdmpjbskr3xazgk0jyli8xpgi0y1nsmjr76hx8nhb4n4bj"))
+          "1yvb7ja09i36zjifpyrf8jmbm9z0wqs2w3x8dlmxkkzdv6knilm6"))
         (patches
          (search-patches "mesa-skip-disk-cache-test.patch"))))
     (build-system meson-build-system)
@@ -291,7 +291,7 @@ also known as DXTn or DXTC) for Mesa.")
               ;; TODO: Fix svga driver for aarch64 and armhf.
               '("-Dgallium-drivers=etnaviv,freedreno,nouveau,r300,r600,swrast,tegra,v3d,vc4,virgl"))
              (_
-              '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,svga,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"
@@ -308,11 +308,8 @@ also known as DXTn or DXTC) for Mesa.")
 
          ;; Enable Vulkan on i686-linux and x86-64-linux.
          ,@(match (%current-system)
-             ("x86_64-linux"
+             ((or "i686-linux" "x86_64-linux")
               '("-Dvulkan-drivers=intel,amd"))
-             ;; TODO: Fix intel driver on i686-linux.
-             ("i686-linux"
-              '("-Dvulkan-drivers=amd"))
              (_
               '("-Dvulkan-drivers=auto")))
 
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index e2ecc1bb6a..e295725c51 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -38,6 +38,7 @@
 ;;; 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>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -5538,6 +5539,57 @@ Compatible with Cisco VPN concentrators configured to use IPsec.")
     (license license:gpl2+)
     (properties `((upstream-name . "NetworkManager-vpnc")))))
 
+(define-public network-manager-openconnect
+  (package
+    (name "network-manager-openconnect")
+    (version "1.2.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://gnome/sources/NetworkManager-openconnect/"
+                    (version-major+minor version)
+                    "/NetworkManager-openconnect-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0nlp290nkawc4wqm978n4vhzg3xdqi8kpjjx19l855vab41rh44m"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("--enable-absolute-paths" "--localstatedir=/var")
+       #:phases
+       (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"))
+                    (pretty-ovpn (string-append "\"" openconnect "\"")))
+               (substitute* "src/nm-openconnect-service.c"
+                 (("\"/usr/local/sbin/openconnect\"") pretty-ovpn)
+                 (("\"/usr/sbin/openconnect\"") pretty-ovpn)
+                 (("/sbin/modprobe") modprobe)))
+             #t)))))
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("network-manager-applet" ,network-manager-applet) ;for libnma
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gcr" ,gcr)
+       ("gtk+" ,gtk+)
+       ("kmod" ,kmod)
+       ("libsecret" ,libsecret)
+       ("libxml2" ,libxml2)
+       ("network-manager" ,network-manager)
+       ("openconnect" ,openconnect)))
+    (home-page "https://wiki.gnome.org/Projects/NetworkManager/VPN")
+    (synopsis "OpenConnect plug-in for NetworkManager")
+    (description
+     "This extension of NetworkManager allows it to take care of connections
+to @acronym{VPNs, virtual private networks} via OpenConnect, an open client for
+Cisco's AnyConnect SSL VPN.")
+    (license license:gpl2+)
+    (properties `((upstream-name . "NetworkManager-openconnect")))))
+
 (define-public mobile-broadband-provider-info
   (package
     (name "mobile-broadband-provider-info")
@@ -8175,15 +8227,18 @@ advanced image management tool")
     (inputs
      `(("cairo" ,cairo)
        ("gobject-introspection" ,gobject-introspection)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("python2-pycairo" ,python2-pycairo)
        ("python2-pygobject" ,python2-pygobject)
        ("python2-psutil" ,python2-psutil)
        ("vte" ,vte)))
-    (propagated-inputs
-     ;; Terminator refuses to start when these are not present.
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
     (arguments
-     `(#:python ,python-2                          ;Python 3 not supported
+     `(#:python ,python-2                          ; Python 3 isn't supported
+       #:imported-modules ((guix build glib-or-gtk-build-system)
+                           ,@%python-build-system-modules)
+       #:modules ((guix build python-build-system)
+                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
+                  (guix build utils))
        #:phases
        (modify-phases %standard-phases
          (add-after
@@ -8194,10 +8249,60 @@ advanced image management tool")
               (wrap-program prog
                 `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
-              #t))))))
+              #t)))
+         (add-after 'wrap-program 'glib-or-gtk-wrap
+           (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (home-page "https://gnometerminator.blogspot.com/")
     (synopsis "Store and run multiple GNOME terminals in one window")
     (description
      "Terminator allows you to run multiple GNOME terminals in a grid and
 +tabs, and it supports drag and drop re-ordering of terminals.")
     (license license:gpl2)))
+
+(define-public libhandy
+  (package
+    (name "libhandy")
+    (version "0.0.10")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://source.puri.sm/Librem5/libhandy")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1702hbdqhfpgw0c4vj2ag08vgl83byiryrbngbq11b9azmj3jhzs"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:configure-flags
+       '("-Dglade_catalog=disabled"
+         "-Dgtk_doc=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-broken-test
+           (lambda _
+             ;; This test fails for unknown reasons
+             (substitute* "tests/meson.build"
+               (("'test-dialog',") ""))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 &")
+             (setenv "DISPLAY" ":1")
+             #t)))))
+    (inputs
+     `(("gtk+" ,gtk+)))
+    (native-inputs
+     `(("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection) ; for g-ir-scanner
+       ("vala" ,vala)
+       ("gtk-doc" ,gtk-doc)
+       ("pkg-config" ,pkg-config)
+       ("gettext" ,gettext-minimal)
+       ("xorg-server" ,xorg-server)))
+    (home-page "https://source.puri.sm/Librem5/libhandy")
+    (synopsis "Library full of GTK+ widgets for mobile phones")
+    (description "The aim of the handy library is to help with developing user
+intefaces for mobile devices using GTK+.")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 3dc2f2fe8f..a0a1baa9a2 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -1218,8 +1218,8 @@ for a variety of protocols to proxy network data.")
       (license license:bsd-3))))
 
 (define-public go-golang-org-x-sys-unix
-  (let ((commit "5ed2794edfdc1c54dfb61d619c5944285f35d444")
-        (revision "3"))
+  (let ((commit "04f50cda93cbb67f2afa353c52f342100e80e625")
+        (revision "4"))
     (package
       (name "go-golang-org-x-sys-unix")
       (version (git-version "0.0.0" revision commit))
@@ -1231,7 +1231,7 @@ for a variety of protocols to proxy network data.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1qy8hmv5nwpcywk7sh1pg0s32jwpd4ykh492xzl4mmxy8galwsr5"))))
+                  "0hmfsz9y1ingwsn482hlzzmzs7kr3cklm0ana0mbdk70isw2bxnw"))))
       (build-system go-build-system)
       (arguments
        `(#:import-path "golang.org/x/sys/unix"
@@ -3617,7 +3617,7 @@ error handling primitives in Go.")
 (define-public go-github-com-maruel-panicparse
   (package
     (name "go-github-com-maruel-panicparse")
-    (version "1.2.1")
+    (version "1.3.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3626,7 +3626,7 @@ error handling primitives in Go.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "05hf68ifb7ww4rpmxyywbj9r0kyap45p1273ncq4qy2ydv042l8j"))))
+                "13qkn7f64yln8jdmma37h6ra4c7anxkp3vfgvfyb6lb07dpr1ibq"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/maruel/panicparse"))
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index f4f9228a07..1eedcfec7b 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -160,9 +160,7 @@
      "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.
-
-WARNING: This is a release candidate build of Blender.")
+application can be customized via its API for Python scripting.")
     (license license:gpl2+)))
 
 (define-public blender-2.79
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 9086e4945b..b80a0f799a 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -729,9 +729,7 @@ application suites.")
 (define-public gtk+
   (package (inherit gtk+-2)
    (name "gtk+")
-   ;; NOTE: When updating the version of 'gtk+', the hash of 'mate-themes' in
-   ;;       mate.scm will also need to be updated.
-   (version "3.24.9")
+   (version "3.24.10")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
@@ -739,7 +737,7 @@ application suites.")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "0dg6jf2763sp740ls6b5y86b5b9zhz3zj0sbmar2xpws1lkv0zjp"))
+              "00qvq1r96ikdalv7xzgng1kad9i0rcahqk01gwhxl3xrw83z3a1m"))
             (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
                                      "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
    (outputs '("out" "bin" "doc"))
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 6dcdcedccf..8c36658361 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -907,27 +907,30 @@ tracker's SOAP service, such as @url{https://bugs.gnu.org}.")
 (define-public guile-email
   (package
     (name "guile-email")
-    (version "0.1.0")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "https://git.systemreboot.net/guile-email/snapshot/guile-email-"
-             version ".tar.xz"))
+             "https://guile-email.systemreboot.net/releases/guile-email-"
+             version ".tar.lz"))
        (sha256
         (base32
-         "0p2v8q2kkz8m6vf2rsjvz3dj1mvnx7dxakjf72dwkndbgk3rp79f"))))
+         "05pm0rwdxhjdlpmvhn0kyfslph6j5m1gv76givs0hshb30nirl2x"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+       ("lzip" ,lzip)))
     (inputs
      `(("guile" ,guile-2.2)))
-    (home-page "https://git.systemreboot.net/guile-email")
+    (arguments
+     '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
+    (home-page "https://guile-email.systemreboot.net")
     (synopsis "Guile email parser")
-    (description "This package provides an email parser written in pure
-Guile.")
+    (description "guile-email is a collection of email utilities implemented
+in pure guile.  It supports parsing MIME (Multipurpose Internet Mail
+Extensions) compliant email messages and reading emails from the mbox
+format.")
     (license license:agpl3+)))
 
 (define-public guile-debbugs-next
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index df71965e81..b07a570654 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -261,29 +261,27 @@ without requiring the source code to be rewritten.")
 
 (define-public guile-next
   ;; This is the upcoming Guile 3.0, with JIT support.
-  (let ((commit "6f3357b0df64c4be17e72079864c09a542f1c779")
-        (revision "1"))
-    (package
-      (inherit guile-2.2)
-      (name "guile-next")
-      (version "2.9.2")
-      (source (origin
-                (inherit (package-source guile-2.2))
-                (uri (string-append "ftp://alpha.gnu.org/gnu/guile/guile-"
-                                    version ".tar.xz"))
-                (sha256
-                 (base32
-                  "1w358df2wmcyzk2ziqrj2zhwqisaqraqfa3008ay23nf1a7bw0z4"))))
-      (native-search-paths
-       (list (search-path-specification
-              (variable "GUILE_LOAD_PATH")
-              (files '("share/guile/site/3.0")))
-             (search-path-specification
-              (variable "GUILE_LOAD_COMPILED_PATH")
-              (files '("lib/guile/3.0/site-ccache"
-                       "share/guile/site/3.0")))))
-      (properties '((ftp-server . "alpha.gnu.org")
-                    (upstream-name . "guile"))))))
+  (package
+    (inherit guile-2.2)
+    (name "guile-next")
+    (version "2.9.3")
+    (source (origin
+              (inherit (package-source guile-2.2))
+              (uri (string-append "ftp://alpha.gnu.org/gnu/guile/guile-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "14990wcpysgw58kij03wbgiggmi5z94jmy7wdcqnn6ny7cimkkgr"))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUILE_LOAD_PATH")
+            (files '("share/guile/site/3.0")))
+           (search-path-specification
+            (variable "GUILE_LOAD_COMPILED_PATH")
+            (files '("lib/guile/3.0/site-ccache"
+                     "share/guile/site/3.0")))))
+    (properties '((ftp-server . "alpha.gnu.org")
+                  (upstream-name . "guile")))))
 
 (define (make-guile-readline guile)
   (package
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index e01f796178..e77f6d113b 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
+;;; Copyright © 2019 Kyle Meyer <kyle@kyleam.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -142,7 +143,7 @@ unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
 (define-public git-annex
   (package
     (name "git-annex")
-    (version "6.20180926")
+    (version "7.20190708")
     (source
      (origin
        (method url-fetch)
@@ -150,15 +151,20 @@ unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
                            "git-annex/git-annex-" version ".tar.gz"))
        (sha256
         (base32
-         "1251rj8h63y30sfqk0zh670yhz14p256y59n3590pg015pf3575d"))))
+         "18s563swrp8mx479995pdhhmn40y3xwlbm1z3w63qsnjqmj7zlij"))))
     (build-system haskell-build-system)
     (arguments
      `(#:configure-flags
        '("--flags=-Android -Assistant -Pairing -S3 -Webapp -WebDAV")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'patch-shell
+         (add-before 'configure 'patch-shell-for-tests
            (lambda _
+             ;; Shell.hs defines "/bin/sh" that is used in Git hooks.  We
+             ;; shouldn't patch hooks with Guix's current bash because the
+             ;; hooks can exist after that bash is garbage collected, but
+             ;; let's temporarily patch it so that we can run the tests.
+             (copy-file "Utility/Shell.hs" "/tmp/Shell.hs")
              (substitute* "Utility/Shell.hs"
                (("/bin/sh") (which "sh")))
              #t))
@@ -192,6 +198,11 @@ unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
                (symlink "git-annex" "git-annex-shell"))
              (invoke "git-annex" "test")
              #t))
+         (add-after 'check 'unpatch-shell-and-rebuild
+           (lambda args
+             ;; Undo `patch-shell-for-tests'.
+             (copy-file "/tmp/Shell.hs" "Utility/Shell.hs")
+             (apply (assoc-ref %standard-phases 'build) args)))
          (add-after 'install 'install-symlinks
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -208,6 +219,7 @@ unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
        ("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)
diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm
index 2f0b842cae..589eee74d9 100644
--- a/gnu/packages/haskell-check.scm
+++ b/gnu/packages/haskell-check.scm
@@ -811,7 +811,7 @@ implementations of cryptographic ciphers.")
          "0xz10ycdm5vk9nrcym1fi83k19frfwqz18bz8bnpzwvaj0j41yfj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal-0.8)
+     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
        ("ghc-async" ,ghc-async)
        ("ghc-concurrent-output" ,ghc-concurrent-output)
        ("ghc-exceptions" ,ghc-exceptions)
diff --git a/gnu/packages/haskell-crypto.scm b/gnu/packages/haskell-crypto.scm
index 28a1647fd1..882773ab68 100644
--- a/gnu/packages/haskell-crypto.scm
+++ b/gnu/packages/haskell-crypto.scm
@@ -25,6 +25,8 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages haskell)
   #:use-module (gnu packages haskell-check)
+  #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages tls)
   #:use-module (guix build-system haskell)
   #:use-module (guix download)
   #:use-module ((guix licenses) #:prefix license:)
@@ -775,3 +777,64 @@ Ephemeral (Elliptic curve and regular) Diffie Hellman key exchanges, and many
 extensions.")
     (license license:bsd-3)))
 
+(define-public ghc-hsopenssl
+  (package
+    (name "ghc-hsopenssl")
+    (version "0.11.4.15")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "HsOpenSSL/HsOpenSSL-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0idmak6d8mpbxphyq9hkxkmby2wnzhc1phywlgm0zw6q47pwxgff"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-network" ,ghc-network)
+       ("openssl" ,openssl)))
+    (arguments
+     `(#:cabal-revision
+       ("1" "0bkcw2pjfgv1bhgkrpncvwq9czfr7cr4ak14n0v8c2y33i33wk5z")))
+    (home-page "https://github.com/vshabanov/HsOpenSSL")
+    (synopsis "Partial OpenSSL binding for Haskell")
+    (description "HsOpenSSL is an OpenSSL binding for Haskell.  It can
+generate RSA and DSA keys, read and write PEM files, generate message
+digests, sign and verify messages, encrypt and decrypt messages.  It has
+also some capabilities of creating SSL clients and servers.  This
+package is in production use by a number of Haskell based systems and
+stable.  You may also be interested in the tls package,
+@uref{http://hackage.haskell.org/package/tls}, which is a pure Haskell
+implementation of SSL.")
+    (license license:public-domain)))
+
+(define-public ghc-openssl-streams
+  (package
+    (name "ghc-openssl-streams")
+    (version "1.2.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "openssl-streams/openssl-streams-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "0pwghr7ygv59k572xsj1j97rilkbjz66qaiyj0ra2wfg6pl70wfw"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-hsopenssl" ,ghc-hsopenssl)
+       ("ghc-io-streams" ,ghc-io-streams)
+       ("ghc-network" ,ghc-network)))
+    (native-inputs
+     `(("ghc-hunit" ,ghc-hunit)
+       ("ghc-test-framework" ,ghc-test-framework)
+       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+    (arguments
+     `(#:cabal-revision
+       ("2" "1004kgdryflpkp19dv4ikilhcn0xbfc5dsp6v3ib34580pcfj7wy")))
+    (home-page "http://hackage.haskell.org/package/openssl-streams")
+    (synopsis "OpenSSL network support for io-streams")
+    (description "This library contains io-streams routines for secure
+networking using OpenSSL (by way of HsOpenSSL).")
+    (license license:bsd-3)))
diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm
index 4bb790d93c..7cbf8932e6 100644
--- a/gnu/packages/haskell-web.scm
+++ b/gnu/packages/haskell-web.scm
@@ -28,6 +28,7 @@
   #:use-module (gnu packages haskell)
   #:use-module (gnu packages haskell-check)
   #:use-module (gnu packages haskell-crypto)
+  #:use-module (gnu packages haskell-xyz)
   #:use-module (guix build-system haskell)
   #:use-module (guix download)
   #:use-module ((guix licenses) #:prefix license:)
@@ -1294,3 +1295,171 @@ derivations of regular expressions.")
      "The Haskell XML Toolbox bases on the ideas of HaXml and HXML, but
 introduces a more general approach for processing XML with Haskell.")
     (license license:expat)))
+
+(define-public ghc-http-common
+  (package
+    (name "ghc-http-common")
+    (version "0.8.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "http-common/http-common-" version ".tar.gz"))
+       (sha256
+        (base32
+         "14s5a178sb2vm5k00rs21760mds5dz2gs10k9iyn22h01mxyf599"))))
+    (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)))
+    (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
+servers.  See http-streams @code{Network.Http.Client} or pipes-http
+@code{Pipes.Http.Client} for full documentation.  You can import
+@code{Network.Http.Types} if you like, but both http-streams and
+pipes-http re-export this package's types and functions.")
+    (license license:bsd-3)))
+
+(define-public ghc-http-streams
+  (package
+    (name "ghc-http-streams")
+    (version "0.8.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "http-streams/http-streams-" version ".tar.gz"))
+       (sha256
+        (base32
+         "18vxd35n7s3z4gjvad94bknc8z1w9d7ccgphnhsxlz5cackizmxq"))))
+    (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)))
+    (arguments
+     `(#:tests? #f)) ; tests rely on an outdated version of snap-server
+    (home-page "https://github.com/afcowie/http-streams/")
+    (synopsis "HTTP client using io-streams")
+    (description "An HTTP client using the Snap Framework's io-streams
+library to handle the streaming IO.  The API is optimized for ease of
+use for the rather common case of code needing to query web services and
+deal with the result.")
+    (license license:bsd-3)))
+
+(define-public ghc-snap-core
+  (package
+    (name "ghc-snap-core")
+    (version "1.0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "snap-core/snap-core-" version ".tar.gz"))
+       (sha256
+        (base32
+         "136q7l4hd5yn5hb507q1ziqx124ma1lkzh5dx0n150p8dx3rhhsc"))))
+    (build-system haskell-build-system)
+    (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)))
+    (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)))
+    (arguments
+     `(#:cabal-revision
+       ("3" "0wlhn33r7c9g7j23y006ddq9d87lkmianvvfrbl8jd8mvjvj2gfa")))
+    (home-page "http://snapframework.com/")
+    (synopsis "Haskell Web Framework (core interfaces and types)")
+    (description "Snap is a simple and fast web development framework
+and server written in Haskell.  For more information, you can visit the
+Snap project website at @uref{http://snapframework.com/}.  This library
+contains the core definitions and types for the Snap framework.")
+    (license license:bsd-3)))
+
+(define-public ghc-snap-server
+  (package
+    (name "ghc-snap-server")
+    (version "1.1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "snap-server/snap-server-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0vvw9n8xs272qdlrf3dxhnva41zh3awi7pf022rrjj75lj8a77i4"))))
+    (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)))
+    (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
+       ("3" "0a9d3nqb5rvgm25nak68lp6yj9m6cwhbgdbg5l7ib5i2czcg7yjh")))
+    (home-page "http://snapframework.com/")
+    (synopsis "Web server for the Snap Framework")
+    (description "Snap is a simple and fast web development framework
+and server written in Haskell.  For more information, you can visit the
+Snap project website at @uref{http://snapframework.com/}.  The Snap HTTP
+server is a high performance web server library written in Haskell.
+Together with the snap-core library upon which it depends, it provides a
+clean and efficient Haskell programming interface to the HTTP
+protocol.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
new file mode 100644
index 0000000000..53c4dcc5ff
--- /dev/null
+++ b/gnu/packages/haskell-xyz.scm
@@ -0,0 +1,276 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.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 haskell-xyz)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages haskell)
+  #:use-module (gnu packages haskell-check)
+  #:use-module (guix build-system haskell)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages))
+
+(define-public ghc-concurrent-extra
+  (package
+    (name "ghc-concurrent-extra")
+    (version "0.7.0.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "concurrent-extra/concurrent-extra-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1y8xk460fvnw0idzdiylmm874sjny4q9jxb1js9fjz8lw2wns3h4"))))
+    (build-system haskell-build-system)
+    (arguments
+     ;; XXX: The ReadWriteLock 'stressTest' fails.
+     `(#:tests? #f))
+    (inputs
+     `(("ghc-unbounded-delays" ,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)))
+    (home-page "https://github.com/basvandijk/concurrent-extra")
+    (synopsis "Extra concurrency primitives")
+    (description "This Haskell library offers (among other things) the
+following selection of synchronisation primitives:
+
+@itemize
+@item @code{Broadcast}: Wake multiple threads by broadcasting a value.
+@item @code{Event}: Wake multiple threads by signalling an event.
+@item @code{Lock}: Enforce exclusive access to a resource.  Also known
+as a binary semaphore or mutex.  The package additionally provides an
+alternative that works in the STM monad.
+@item @code{RLock}: A lock which can be acquired multiple times by the
+same thread.  Also known as a reentrant mutex.
+@item @code{ReadWriteLock}: Multiple-reader, single-writer locks.  Used
+to protect shared resources which may be concurrently read, but only
+sequentially written.
+@item @code{ReadWriteVar}: Concurrent read, sequential write variables.
+@end itemize
+
+Please consult the API documentation of the individual modules for more
+detailed information.
+
+This package was inspired by the concurrency libraries of Java and
+Python.")
+    (license license:bsd-3)))
+
+(define-public ghc-io-streams
+  (package
+    (name "ghc-io-streams")
+    (version "1.5.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "io-streams/io-streams-" version ".tar.gz"))
+       (sha256
+        (base32
+         "12rcdg2d70644bvn838fxcjkssqj8pssnx5y657si5rijcbkgjsx"))))
+    (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)))
+    (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)))
+    (arguments
+     `(#:cabal-revision
+       ("2" "1mcab95d6hm098myh9gp7sh10srigjphgvm8s9pfs7jg5hzghy14")))
+    (home-page "http://hackage.haskell.org/package/io-streams")
+    (synopsis "Simple and composable stream I/O")
+    (description "This library contains simple and easy-to-use
+primitives for I/O using streams.")
+    (license license:bsd-3)))
+
+(define-public ghc-io-streams-haproxy
+  (package
+    (name "ghc-io-streams-haproxy")
+    (version "1.0.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "io-streams-haproxy/io-streams-haproxy-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "11nh9q158mgnvvb23s5ffg87lkhl5smk039yl43jghxmb214z0bp"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-attoparsec" ,ghc-attoparsec)
+       ("ghc-io-streams" ,ghc-io-streams)
+       ("ghc-network" ,ghc-network)))
+    (native-inputs
+     `(("ghc-hunit" ,ghc-hunit)
+       ("ghc-test-framework" ,ghc-test-framework)
+       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+    (arguments
+     `(#:cabal-revision
+       ("4" "06c51a057n5bc9xfbp2m4jz5ds4z1xvmsx5mppch6qfwbz7x5i9l")))
+    (home-page "http://snapframework.com/")
+    (synopsis "HAProxy protocol 1.5 support for io-streams")
+    (description "HAProxy protocol version 1.5 support
+(see @uref{http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt})
+for applications using io-streams.  The proxy protocol allows information
+about a networked peer (like remote address and port) to be propagated
+through a forwarding proxy that is configured to speak this protocol.")
+    (license license:bsd-3)))
+
+(define-public ghc-language-glsl
+  (package
+    (name "ghc-language-glsl")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "language-glsl/language-glsl-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0hdg67ainlqpjjghg3qin6fg4p783m0zmjqh4rd5gyizwiplxkp1"))))
+    (build-system haskell-build-system)
+    (inputs `(("ghc-prettyclass" ,ghc-prettyclass)))
+    (arguments
+     `(#:tests? #f
+       #:cabal-revision
+       ("1" "10ac9pk4jy75k03j1ns4b5136l4kw8krr2d2nw2fdmpm5jzyghc5")))
+    (home-page "http://hackage.haskell.org/package/language-glsl")
+    (synopsis "GLSL abstract syntax tree, parser, and pretty-printer")
+    (description "This package is a Haskell library for the
+representation, parsing, and pretty-printing of GLSL 1.50 code.")
+    (license license:bsd-3)))
+
+(define-public ghc-prettyclass
+  (package
+    (name "ghc-prettyclass")
+    (version "1.0.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "prettyclass/prettyclass-" version ".tar.gz"))
+       (sha256
+        (base32
+         "11l9ajci7nh1r547hx8hgxrhq8mh5gdq30pdf845wvilg9p48dz5"))))
+    (build-system haskell-build-system)
+    (home-page "http://hackage.haskell.org/package/prettyclass")
+    (synopsis "Pretty printing class similar to Show")
+    (description "This package provides a pretty printing class similar
+to @code{Show}, based on the HughesPJ pretty printing library.  It
+provides the pretty printing class and instances for the Prelude
+types.")
+    (license license:bsd-3)))
+
+(define-public ghc-readable
+  (package
+    (name "ghc-readable")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "readable/readable-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1ja39cg26wy2fs00gi12x7iq5k8i366pbqi3p916skfa5jnkfc3h"))))
+    (build-system haskell-build-system)
+    (home-page "https://github.com/mightybyte/readable")
+    (synopsis "Type class for reading from Text and ByteString")
+    (description "This package provides a @code{Readable} type class for
+reading data types from @code{ByteString} and @code{Text}.  It also
+includes efficient implementations for common data types.")
+    (license license:bsd-3)))
+
+(define-public ghc-threads
+  (package
+    (name "ghc-threads")
+    (version "0.5.1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "threads/threads-" version ".tar.gz"))
+       (sha256
+        (base32
+         "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)))
+    (home-page "https://github.com/basvandijk/threads")
+    (synopsis "Fork threads and wait for their result")
+    (description "This package provides functions to fork threads and
+wait for their result, whether it's an exception or a normal value.
+Besides waiting for the termination of a single thread this package also
+provides functions to wait for a group of threads to terminate.  This
+package is similar to the @code{threadmanager}, @code{async} and
+@code{spawn} packages.  The advantages of this package are:
+
+@itemize
+@item Simpler API.
+@item More efficient in both space and time.
+@item No space-leak when forking a large number of threads.
+@item Correct handling of asynchronous exceptions.
+@item GHC specific functionality like @code{forkOn} and
+@code{forkIOWithUnmask}.
+@end itemize")
+    (license license:bsd-3)))
+
+(define-public ghc-zlib-bindings
+  (package
+    (name "ghc-zlib-bindings")
+    (version "0.1.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "zlib-bindings/zlib-bindings-" version ".tar.gz"))
+       (sha256
+        (base32
+         "02ciywlz4wdlymgc3jsnicz9kzvymjw1www2163gxidnz4wb8fy8"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-zlib" ,ghc-zlib)))
+    (native-inputs
+     `(("ghc-hspec" ,ghc-hspec)
+       ("ghc-quickcheck" ,ghc-quickcheck)))
+    (arguments
+     `(#:cabal-revision
+       ("2" "0fq49694gqkab8m0vq4i879blswczwd66n7xh4r4gwiahf0ryvqc")))
+    (home-page "https://github.com/snapframework/zlib-bindings")
+    (synopsis "Low-level bindings to the @code{zlib} package")
+    (description "This package provides low-level bindings to the
+@code{zlib} package.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index b59553f501..8787f10789 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -73,6 +73,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (ice-9 match)
   #:use-module (ice-9 regex)
   #:use-module ((srfi srfi-1) #:select (alist-delete)))
 
@@ -440,7 +441,7 @@ interactive environment for the functional language Haskell.")
 interactive environment for the functional language Haskell.")
     (license license:bsd-3)))
 
-(define-public ghc-8
+(define-public ghc-8.4
   (package (inherit ghc-8.0)
     (name "ghc")
     (version "8.4.3")
@@ -572,6 +573,53 @@ interactive environment for the functional language Haskell.")
                                 (file-pattern ".*\\.conf\\.d$")
                                 (file-type 'directory))))))
 
+(define-public ghc-8.6
+  (package (inherit ghc-8.4)
+    (name "ghc")
+    (version "8.6.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.haskell.org/ghc/dist/"
+                           version "/" name "-" version "-src.tar.xz"))
+       (sha256
+        (base32 "0qg3zsmbk4rkwkc3jpas3zs74qaxmw4sp4v1mhsbj0a0dzls2jjd"))))
+    (native-inputs
+     `(;; GHC 8.6.5 must be built with GHC >= 8.2.
+       ("ghc-bootstrap" ,ghc-8.4)
+       ("ghc-testsuite"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://www.haskell.org/ghc/dist/"
+                 version "/" name "-" version "-testsuite.tar.xz"))
+           (sha256
+            (base32
+             "0pw9r91g2np3i806g2f4f8z4jfdd7mx226cmdizk4swa7av1qf91"))))
+       ,@(filter (match-lambda
+                   (("ghc-bootstrap" . _) #f)
+                   (("ghc-testsuite" . _) #f)
+                   (_ #t))
+                 (package-native-inputs ghc-8.4))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments ghc-8.4)
+       ((#:make-flags make-flags ''())
+        `(cons "EXTRA_RUNTEST_OPTS=--skip-perf-tests"
+               ,make-flags))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           ;; These two tests refer to the root user, which doesn't exist
+           ;; (see <https://bugs.gnu.org/36692>).
+           (add-after 'unpack-testsuite 'skip-tests
+             (lambda _
+               (substitute* "libraries/unix/tests/all.T"
+                 (("^test\\('T8108'") "# guix skipped: test('T8108'"))
+               (substitute* "libraries/unix/tests/libposix/all.T"
+                 (("^test\\('posix010'") "# guix skipped: test('posix010'"))
+               #t))))))))
+
+(define-public ghc-8 ghc-8.4)
+
 (define-public ghc ghc-8)
 
 (define-public ghc-hostname
@@ -1054,28 +1102,6 @@ the ‘haddock’ package.")
 documentation-generation tool for Haskell libraries.")
     (license license:bsd-3)))
 
-(define-public ghc-haddock-test
-  (package
-    (name "ghc-haddock-test")
-    (version "0.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "haddock-test/haddock-test-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1ax8fnfrwx66csj952f3virxzapipan9da7z5l1zc12nqkifbs7w"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-xml" ,ghc-xml)
-       ("ghc-syb" ,ghc-syb)))
-    (home-page "http://www.haskell.org/haddock/")
-    (synopsis "Test utilities for Haddock")
-    (description "This package provides test utilities for Haddock.")
-    (license license:bsd-3)))
-
 (define-public ghc-haddock
   (package
     (name "ghc-haddock")
@@ -2903,30 +2929,6 @@ Haskell library @code{regex-base}.")
 @code{regex-posix} to replace @code{Text.Regex}.")
     (license license:bsd-3)))
 
-(define-public ghc-regex-tdfa-rc
-  (package
-    (name "ghc-regex-tdfa-rc")
-    (version "1.1.8.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/regex-tdfa-rc/regex-tdfa-rc-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1vi11i23gkkjg6193ak90g55akj69bhahy542frkwb68haky4pp3"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)))
-    (home-page
-     "https://hackage.haskell.org/package/regex-tdfa")
-    (synopsis "Tagged DFA regex engine for Haskell")
-    (description "A new all-Haskell \"tagged\" DFA regex engine, inspired by
-@code{libtre} (fork by Roman Cheplyaka).")
-    (license license:bsd-3)))
-
 (define-public ghc-regex-tdfa-text
   (package
     (name "ghc-regex-tdfa-text")
@@ -3041,6 +3043,7 @@ the parsers provided by @code{parsec}, @code{attoparsec} and @code{base}'s
                (base32
                 "0hznd8i65s81xy13i2qc7cvipw3lfb2yhkv53apbdsh6sbljz5sk"))))
     (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; doctest suite fails to build on i686
     (inputs
      `(("ghc-reducers" ,ghc-reducers)
        ("ghc-semigroups" ,ghc-semigroups)
@@ -3990,7 +3993,7 @@ instances of the @code{Pretty} class.")
          "0gnb4mkqryv08vncxnj0bzwcnd749613yw3cxfzw6y3nsldp4c56"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal-0.8)))
+     `(("ghc-ansi-terminal" ,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
@@ -4235,7 +4238,7 @@ interface.")
 (define-public ghc-ansi-terminal
   (package
     (name "ghc-ansi-terminal")
-    (version "0.9.1")
+    (version "0.8.0.4")
     (source
      (origin
        (method url-fetch)
@@ -4245,7 +4248,7 @@ interface.")
              ".tar.gz"))
        (sha256
         (base32
-         "1yr0ld0kqns3w3j9gl62bdwshvyazidx4dv1qkvq19ivnf08w23l"))))
+         "0428gq8m3fdnb7ldcsyk97qcch76hcxbgh2666p6f76fs2qbhg7b"))))
     (build-system haskell-build-system)
     (inputs
      `(("ghc-colour" ,ghc-colour)))
@@ -4256,21 +4259,6 @@ allows cursor movement, screen clearing, color output showing or hiding the
 cursor, and changing the title.")
     (license license:bsd-3)))
 
-(define-public ghc-ansi-terminal-0.8
-  (package (inherit ghc-ansi-terminal)
-           (name "ghc-ansi-terminal")
-           (version "0.8.0.4")
-           (source
-            (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/ansi-terminal/ansi-terminal-"
-                    version
-                    ".tar.gz"))
-              (sha256
-               (base32
-                "0428gq8m3fdnb7ldcsyk97qcch76hcxbgh2666p6f76fs2qbhg7b"))))))
-
 (define-public ghc-vault
   (package
     (name "ghc-vault")
@@ -5909,35 +5897,6 @@ within an enclosed computation, while remaining responsive to (external)
 asynchronous exceptions.")
     (license license:expat)))
 
-(define-public ghc-packedstring
-  (package
-    (name "ghc-packedstring")
-    (version "0.1.0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "packedstring/packedstring-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1x78pzzdlnpcmh9p37rlf8m5cxf3yqm2alf3whl4zpr9w25r0qj8"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'enable-extension
-          (lambda _
-            ;; This package won't compile without the StandaloneDeriving
-            ;; extension.
-            (substitute* "packedstring.cabal"
-              (("CPP") "CPP, StandaloneDeriving"))
-            #t)))))
-    (home-page "https://hackage.haskell.org/package/packedstring")
-    (synopsis "Library for packed strings")
-    (description
-     "This deprecated library provides an implementation of packed strings.")
-    (license license:bsd-3)))
-
 (define-public ghc-th-abstraction
   (package
     (name "ghc-th-abstraction")
@@ -6252,6 +6211,9 @@ back-ends.")
                (base32
                 "0cbsyh4ilvjzq1q7pxls43k6pdqxg1l85xzibcwpbvmlvrizh86w"))))
     (build-system haskell-build-system)
+    ;; The tests are broken on i686.  They are fixed in 0.10.3.0.
+    ;; See https://github.com/snoyberg/yaml/issues/158
+    (arguments `(#:tests? #f))
     (inputs
      `(("ghc-conduit" ,ghc-conduit)
        ("ghc-resourcet" ,ghc-resourcet)
@@ -11278,6 +11240,9 @@ imported with the correct Haskell types.")
         (base32
          "1931m23iqb4wddpdidm4ph746zpaw41kkjzmb074j7yyfpk7x1jv"))))
     (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)
@@ -11821,7 +11786,7 @@ default)
 (define-public ghc-validation
   (package
     (name "ghc-validation")
-    (version "1.1")
+    (version "1")
     (source
      (origin
        (method url-fetch)
@@ -11831,18 +11796,11 @@ default)
              ".tar.gz"))
        (sha256
         (base32
-         "1acj7mh3581ks405xswxw6667z7y1y0slisg6jvp6chc191ji9l5"))))
+         "08drmdvyzg2frbb26icy1mlz52xv0l6gi3v8gb7xp0vrcci5libh"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'add-setup-script
-           (lambda _
-             ;; The usual "Setup.hs" script is missing from the source.
-             (with-output-to-file "Setup.hs"
-               (lambda ()
-                 (format #t "import Distribution.Simple~%")
-                 (format #t "main = defaultMain~%"))))))))
+     `(#:cabal-revision
+       ("1" "1x1g4nannz81j1h64l1m3ancc96zc57d1bjhj1wk7bwn1xxbi5h3")))
     (inputs
      `(("ghc-semigroups" ,ghc-semigroups)
        ("ghc-semigroupoids" ,ghc-semigroupoids)
@@ -11875,7 +11833,7 @@ example of, \"An applicative functor that is not a monad.\"")
 (define-public ghc-concurrent-output
   (package
     (name "ghc-concurrent-output")
-    (version "1.10.10")
+    (version "1.10.9")
     (source
      (origin
        (method url-fetch)
@@ -11885,7 +11843,7 @@ example of, \"An applicative functor that is not a monad.\"")
              ".tar.gz"))
        (sha256
         (base32
-         "1wnjxnwbc3l853kiiijagzjyb6fmhz3lmkwls24plbximl1qrr22"))))
+         "0mwf155w89nbbkjln7hhbn8k3f8p0ylcvgrg31cm7ijpx4499i4c"))))
     (build-system haskell-build-system)
     (inputs
      `(("ghc-async" ,ghc-async)
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 38780e93fe..93eccf842d 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -577,9 +577,6 @@ collection of tools for doing simple manipulations of TIFF images.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
-           (lambda _
-             (invoke "sh" "autobuild")))
          (add-after 'unpack 'patch-reg-wrapper
            (lambda _
              (substitute* "prog/reg_wrapper.sh"
@@ -1004,7 +1001,7 @@ language bindings to VIGRA.")
 (define-public libwebp
   (package
     (name "libwebp")
-    (version "1.0.2")
+    (version "1.0.3")
     (source
      (origin
        ;; No tarballs are provided for >0.6.1.
@@ -1015,7 +1012,7 @@ language bindings to VIGRA.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1ay0sai7f74dyk2gi975qfllmq534vnsx456npf16583mqb6ib2q"))))
+         "1l8h9d3z3kla567ilmymrgg8vc2n763g8qss1hah8dg832hbqkxf"))))
     (build-system gnu-build-system)
     (inputs
      `(("freeglut" ,freeglut)
@@ -1074,14 +1071,14 @@ channels.")
 (define-public exiv2
   (package
     (name "exiv2")
-    (version "0.27.1")
+    (version "0.27.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.exiv2.org/builds/exiv2-" version
                            "-Source.tar.gz"))
        (sha256
-        (base32 "109hbfk63dh14fz20ivq20gcclb9jj9jmh48w4lcn6zxh1ljh9gi"))))
+        (base32 "0gqminvj14xm3rgbnydbywf22608js80rp7nmxxk4497j5mzali6"))))
     (build-system cmake-build-system)
     (arguments '(#:tests? #f))          ; no test suite
     (propagated-inputs
@@ -1206,12 +1203,6 @@ ISO/IEC 15444-1).")
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
-           (lambda _
-             (invoke "sh" "autogen.sh"))))))
     (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
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index 39fcf61a12..807fd43b9b 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -48,14 +48,14 @@
     ;; The 7 release series has an incompatible API, while the 6 series is still
     ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
     ;; users are ready for the 7-series API.
-    (version "6.9.10-51")
+    (version "6.9.10-58")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://imagemagick/ImageMagick-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "03c5r14ycp7mmlk6pryfcnpvjjnghk3z7dbjd1b7m1bgzmw21jhj"))))
+               "1hrd408lqgwg70aaif8g60lipwsplsg61722kpmx7a08pygs46hf"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch")
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index b5b1d4eb20..d8c0649131 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -320,7 +320,7 @@ plugins, as well as code to create plugins, or complete applications.")
 (define-public krita
   (package
     (name "krita")
-    (version "4.2.2")
+    (version "4.2.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -329,7 +329,7 @@ plugins, as well as code to create plugins, or complete applications.")
                     "/krita-" version ".tar.gz"))
               (sha256
                (base32
-                "1pzk5bqp3kh22djhvsvmsc7ybirs4hsnkpg1y9677m2gxwbqnnps"))))
+                "1f14r2mrqasl6nr3sss0xy2h8xlxd5wdcjcd64m9nz2gwlm39r7w"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index 58c451a4e9..ae87671611 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -41,7 +41,7 @@
 (define-public libevent
   (package
     (name "libevent")
-    (version "2.1.10")
+    (version "2.1.11")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -49,7 +49,7 @@
                     version "-stable/libevent-" version "-stable.tar.gz"))
               (sha256
                (base32
-                "1c25928gdv495clxk2v1d4gkr5py7ack4gx2n7d13frnld0syr78"))))
+                "0g988zqm45sj1hlhhz4il5z4dpi5dl74hzjwzl4md37a09iaqnx6"))))
     (build-system gnu-build-system)
     (arguments
      ;; This skips some of the tests which fail on armhf and aarch64.
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 998f197304..f2e36ee7b4 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -349,42 +349,42 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                         "linux-" version ".tar.xz"))
     (sha256 hash)))
 
-(define-public linux-libre-5.2-version "5.2.4")
+(define-public linux-libre-5.2-version "5.2.8")
 (define-public linux-libre-5.2-pristine-source
   (let ((version linux-libre-5.2-version)
-        (hash (base32 "0hzfayq79bksng09ngw3k3h3zkd6ndfn059rvwpznypy1fg8pkdi")))
+        (hash (base32 "0dv91zfjkil29lp2l35lswkrhrqbc4kjh965ciaqwih1rh3cs9x1")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.2)))
 
-(define-public linux-libre-4.19-version "4.19.62")
+(define-public linux-libre-4.19-version "4.19.66")
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "1p6s1ksrsq3za7644j0qf9brf6brwq39jxpfln5ypmyfi5qn9gh7")))
+        (hash (base32 "0r6vzarmi77fhivd1n6f667sgcw8zd54ykmhmp6rd52bbkhsp0f9")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.134")
+(define-public linux-libre-4.14-version "4.14.138")
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "0b9xj1rwr5fpw2giirfghzxxc0wp1hwf4nqvalx314pxxysyf88b")))
+        (hash (base32 "0yw39cqpk6g42q0xcv2aq8yyzsi0kzx9nvlfbw0iyg58wcfvsl7j")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
 
-(define-public linux-libre-4.9-version "4.9.186")
+(define-public linux-libre-4.9-version "4.9.189")
 (define-public linux-libre-4.9-pristine-source
   (let ((version linux-libre-4.9-version)
-        (hash (base32 "0sjbp7m6d625rw06wv34a0805d1lgldii4pxiqfpja871m1q8914")))
+        (hash (base32 "1cyhwnxkjd0qa5d48657yppjnzbi830q0p25jjv2dxs629k4bnck")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.9)))
 
-(define-public linux-libre-4.4-version "4.4.186")
+(define-public linux-libre-4.4-version "4.4.189")
 (define-public linux-libre-4.4-pristine-source
   (let ((version linux-libre-4.4-version)
-        (hash (base32 "113rjf8842glzi23y1g1yrwncihv2saah6wz0r726r06bk9p64hb")))
+        (hash (base32 "0nc8v62gw89m3ykqg6nqf749fzm8y1n481ns8vny4gbinyikjhlp")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.4)))
@@ -1397,15 +1397,18 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
 (define-public strace
   (package
     (name "strace")
-    (version "5.1")
+    (version "5.2")
     (home-page "https://strace.io")
     (source (origin
              (method url-fetch)
              (uri (string-append home-page "/files/" version
                                  "/strace-" version ".tar.xz"))
+             ;; XXX Remove the 'regenerate-tests' phase below when
+             ;; "strace-ipc-tests.patch" is no longer applied.
+             (patches (search-patches "strace-ipc-tests.patch"))
              (sha256
               (base32
-               "12wsga1v3rab24gr0mpfip7j7gwr90m8f9h6fviqxa3xgnwl38zm"))))
+               "1li49i75wrdw91hchyyd8spnzfcmxcfyfb5g9zbaza89aq4bq4ym"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1414,7 +1417,14 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
            (lambda _
              (substitute* "strace.c"
                (("/bin/sh") (which "sh")))
-             #t)))
+             #t))
+         (add-before 'configure 'regenerate-tests
+           ;; XXX Remove this phase when "strace-ipc-tests.patch" is no longer
+           ;; applied in the 'source' field above.  This phase is needed to
+           ;; regenerate many other files from tests/gen_tests.in, which is
+           ;; modified by the aforementioned patch.
+           (lambda _
+             (invoke "tests/gen_tests.sh"))))
        ;; 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>.
@@ -4613,7 +4623,7 @@ are exceeded.")
 (define-public mtd-utils
   (package
     (name "mtd-utils")
-    (version "2.0.2")
+    (version "2.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4621,17 +4631,19 @@ are exceeded.")
                     "mtd-utils-" version ".tar.bz2"))
               (sha256
                (base32
-                "1f30jszknc5v6ykmil8ajxgksmcg54q3rsp84jsancp9x0dycggv"))))
+                "1lijl89l7hljx8xx70vrz9srd3h41v5gh4b0lvqnlv831yvyh5cd"))))
     (arguments
      '(#:configure-flags '("--enable-unit-tests")))
     (native-inputs
      `(("cmocka" ,cmocka)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("acl" ,acl) ; for XATTR
+     `(("acl" ,acl)                     ; extended attributes (xattr)
        ("libuuid" ,util-linux)
        ("lzo" ,lzo)
-       ("zlib" ,zlib)))
+       ("openssl" ,openssl)             ; optional crypto support
+       ("zlib" ,zlib)
+       ("zstd" ,zstd "lib")))
     (build-system gnu-build-system)
     (synopsis "MTD Flash Storage Utilities")
     (description "This package provides utilities for testing, partitioning, etc
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index e7d0d5a44f..d2bed231bd 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -6563,7 +6563,24 @@ This system contains the CFFI foreign slot access extension.")))
        ("trivia.cffi" ,sbcl-trivia.cffi)
        ("optima" ,sbcl-optima)))
     (arguments
-     `(#:test-asd-file "trivia.test.asd"))
+     `(#:test-asd-file "trivia.test.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'create-asd 'remove-component
+           ;; XXX: The original .asd has no components, but our build system
+           ;; creates an entry nonetheless.  We need to remove it for the
+           ;; generated .asd to load properly.  See trivia.trivial for a
+           ;; similar problem.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (asd (string-append out "/lib/" (%lisp-type) "/trivia.asd")))
+               (substitute* asd
+                 (("  :components
+")
+                  ""))
+               (substitute* asd
+                 ((" *\\(\\(:compiled-file \"trivia--system\"\\)\\)")
+                  ""))))))))
     (description "Trivia is a pattern matching compiler that is compatible
 with Optima, another pattern matching library for Common Lisp.  It is meant to
 be faster and more extensible than Optima.")))
@@ -6598,3 +6615,38 @@ various string metrics in Common Lisp:
 @item Overlap coefficient
 @end itemize\n")
     (license license:x11)))
+
+(define-public sbcl-cl-str
+  (let ((commit "3d5ec86e3a0199e5973aacde951086dfd754b5e5"))
+    (package
+      (name "sbcl-cl-str")
+      (version (git-version "0.8" "1" commit))
+      (home-page "https://github.com/vindarel/cl-str")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url home-page)
+                      (commit commit)))
+                (sha256
+                 (base32 "0szzzbygw9h985yxz909vvqrp69pmpcpahn7hn350lnyjislk9ga"))
+                (file-name (git-file-name name version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("cl-ppcre" ,sbcl-cl-ppcre)
+         ("cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)))
+      (native-inputs
+       `(("prove" ,sbcl-prove)
+         ("prove-asdf" ,sbcl-prove-asdf)))
+      (arguments
+       `(#:asd-file "str.asd"
+         #:asd-system-name "str"
+         #:test-asd-file "str.test.asd"))
+      (synopsis "Modern, consistent and terse Common Lisp string manipulation library")
+      (description "A modern and consistent Common Lisp string manipulation
+library that focuses on modernity, simplicity and discoverability:
+@code{(str:trim s)} instead of @code{(string-trim '(#\\Space ...) s)}), or
+@code{str:concat strings} instead of an unusual format construct; one
+discoverable library instead of many; consistency and composability, where
+@code{s} is always the last argument, which makes it easier to feed pipes and
+arrows.")
+      (license license:expat))))
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 3eeb9cb1e2..d82bdc003c 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -193,7 +193,7 @@ classification.")
                 (uri (svn-reference
                       (url "http://svn.code.sf.net/p/ghmm/code/trunk")
                       (revision svn-revision)))
-                (file-name (string-append name "-" version))
+                (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
                   "0qbq1rqp94l530f043qzp8aw5lj7dng9wq0miffd7spd1ff638wq"))))
@@ -250,10 +250,7 @@ classification.")
                   (string-append indent
                                  "@unittest.skip(\"Disabled by Guix\")\n"
                                  line)))
-               #t))
-           (add-after 'disable-broken-tests 'autogen
-             (lambda _
-               (invoke "bash" "autogen.sh"))))))
+               #t)))))
       (inputs
        `(("python" ,python-2) ; only Python 2 is supported
          ("libxml2" ,libxml2)))
@@ -820,8 +817,14 @@ computing environments.")
              (setenv "HOME" "/tmp")
 
              (invoke "pytest" "sklearn" "-m" "not network")))
-         ;; FIXME: This fails with permission denied
-         (delete 'reset-gzip-timestamps))))
+         (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
      `(("openblas" ,openblas)))
     (native-inputs
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 40fe7d9450..b81b15d80c 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -1051,7 +1051,7 @@ useful features.")
     (arguments
       '(#:phases
         (modify-phases %standard-phases
-          (add-after 'unpack 'autogen
+          (replace 'bootstrap
             (lambda _
               (setenv "NOCONFIGURE" "true")
               (invoke "sh" "autogen.sh"))))
@@ -1365,12 +1365,7 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
      `(#:tests? #f ;No tests exist.
        #:configure-flags (list (string-append "--with-dovecot="
                                               (assoc-ref %build-inputs "dovecot")
-                                              "/lib/dovecot"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
-           (lambda _
-             (invoke "sh" "autogen.sh"))))))
+                                              "/lib/dovecot"))))
     (home-page "https://0xacab.org/riseuplabs/trees")
     (synopsis "NaCL-based Dovecot email storage encryption plugin")
     (description
@@ -1421,12 +1416,7 @@ using libsodium sealed boxes.
        `(#:tests? #f ;No tests exist.
          #:configure-flags (list (string-append "--with-dovecot="
                                                 (assoc-ref %build-inputs "dovecot")
-                                                "/lib/dovecot"))
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'autogen
-             (lambda _
-               (invoke "sh" "autogen.sh"))))))
+                                                "/lib/dovecot"))))
       (home-page "https://github.com/LuckyFellow/dovecot-libsodium-plugin")
       (synopsis "Libsodium password hashing schemes plugin for Dovecot")
       (description
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index a24c7eff22..d6005c1bd3 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -162,7 +162,7 @@ the traditional flat-text whatis databases.")
 (define-public man-pages
   (package
     (name "man-pages")
-    (version "5.01")
+    (version "5.02")
     (source
      (origin
        (method url-fetch)
@@ -172,7 +172,7 @@ the traditional flat-text whatis databases.")
               (string-append "mirror://kernel.org/linux/docs/man-pages/Archive/"
                              "man-pages-" version ".tar.xz")))
        (sha256
-        (base32 "09xn8d8xxwgms6h1bvjlgn3mxz51vxf3ra0ry9f5dqi29qry3z3x"))))
+        (base32 "1s4pdz2pwf0kvhdwx2s6lqn3xxzi38yz5jfyq5ymdmswc9gaiyn2"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases (delete 'configure))
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 87d1afb7d8..7ece795d60 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -325,7 +325,7 @@ enough to be used effectively as a scientific calculator.")
 (define-public double-conversion
   (package
     (name "double-conversion")
-    (version "3.1.4")
+    (version "3.1.5")
     (home-page "https://github.com/google/double-conversion")
     (source (origin
               (method git-fetch)
@@ -334,7 +334,7 @@ enough to be used effectively as a scientific calculator.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "13xwcqk2c0q8c1siw566clxcpvp0xrxvb72mra42wa3nvq9wlsv6"))))
+                "0csy4pjw1p8rp6g5qxi2h0ychhhp1fldv7gb761627fs2mclw9gv"))))
     (build-system cmake-build-system)
     (arguments
      '(#:test-target "test"
@@ -4333,14 +4333,14 @@ are noisy or are discontinuous at the solution.")
 (define-public r-desolve
   (package
     (name "r-desolve")
-    (version "1.21")
+    (version "1.24")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "deSolve" version))
         (sha256
          (base32
-          "0qqc4mknw1jblzcmph1dg3k1p6w42yal0k1xjh8pqk7yb3a75hs5"))))
+          "0hkvspq0fp8j64l9zayab2l2nazazhwfgfym0jllh0xv5a12r99s"))))
     (properties `((upstream-name . "deSolve")))
     (build-system r-build-system)
     (native-inputs
diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm
index 99ca4f9007..967e299803 100644
--- a/gnu/packages/mp3.scm
+++ b/gnu/packages/mp3.scm
@@ -65,7 +65,8 @@
               "14460zhacxhswnzb36qfpd1f2wbk10qvksvm6wyq5hpvdgnw7ymv"))
             (patches (search-patches "libmad-armv7-thumb-pt1.patch"
                                      "libmad-armv7-thumb-pt2.patch"
-                                     "libmad-frame-length.patch"
+                                     "libmad-md_size.patch"
+                                     "libmad-length-check.patch"
                                      "libmad-mips-newgcc.patch"))))
    (build-system gnu-build-system)
    (arguments
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index d65ac33416..e8070451c1 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -90,7 +90,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
 (define-public mpd
   (package
     (name "mpd")
-    (version "0.21.11")
+    (version "0.21.13")
     (source (origin
               (method url-fetch)
               (uri
@@ -99,7 +99,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
                               "/mpd-" version ".tar.xz"))
               (sha256
                (base32
-                "1gbcg8icm0pp918jw1lx1j066m39zg9wyqjla328ic848j5zhbnk"))))
+                "1sjyhmq50nlccwmd8xn7m0bk8xvyixvfyr24v9dy3g86hhk0pdwm"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Ddocumentation=true"))) ;the default is 'false'...
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
index 4320138b73..8e89836595 100644
--- a/gnu/packages/multiprecision.scm
+++ b/gnu/packages/multiprecision.scm
@@ -64,12 +64,11 @@
                           (else '())))))
    (synopsis "Multiple-precision arithmetic library")
    (description
-    "@dfn{GMP} (the GNU Multiple Precision Arithmetic Library) is a library for
-arbitrary-precision arithmetic, operating on signed integers, rational numbers
-and floating point numbers.  The precision is only limited by the available
-memory.  The library is highly optimized, with a design focus on execution
-speed.  It is aimed at use in, for example, cryptography and computational
-algebra.")
+    "The @acronym{GMP, the GNU Multiple Precision Arithmetic} library performs
+arbitrary-precision arithmetic on signed integers, rational numbers and floating
+point numbers.  The precision is only limited by the available memory.
+The library is highly optimized, with a design focus on execution speed.
+It is aimed at use in, for example, cryptography and computational algebra.")
    (license lgpl3+)
    (home-page "https://gmplib.org/")))
 
@@ -105,7 +104,7 @@ algebra.")
    (propagated-inputs `(("gmp" ,gmp)))            ; <mpfr.h> refers to <gmp.h>
    (synopsis "C library for arbitrary-precision floating-point arithmetic")
    (description
-    "GNU@tie{}@dfn{MPFR} (Multiple Precision Floating-Point Reliably) is a C
+    "GNU@tie{}@acronym{MPFR, Multiple Precision Floating-Point Reliably} is a C
 library for performing multiple-precision, floating-point computations with
 correct rounding.")
    (license lgpl3+)
@@ -128,8 +127,8 @@ correct rounding.")
                         ("mpfr" ,mpfr)))
    (synopsis "C library for arbitrary-precision complex arithmetic")
    (description
-    "GNU@tie{}@dfn{MPC} (Multiple Precision Complex library) is a C library for
-performing arithmetic on complex numbers.  It supports arbitrarily high
+    "GNU@tie{}@acronym{MPC, Multiple Precision Complex library} is a C library
+for performing arithmetic on complex numbers.  It supports arbitrarily high
 precision and correctly rounds the results.")
    (license lgpl3+)
    (home-page "http://multiprecision.org/mpc/")))
@@ -150,11 +149,11 @@ precision and correctly rounds the results.")
                          ("mpfr" ,mpfr)))
     (synopsis "C library for arbitrary-precision interval arithmetic")
     (description
-     "@dfn{MPFI} (Multiple Precision Floating-point Interval) is a portable C
+     "@acronym{MPFI, Multiple Precision Floating-point Interval} is a portable C
 library for arbitrary-precision interval arithmetic, with intervals represented
-using MPFR reliable floating-point numbers.  It's based on the @dfn{GMP} (GNU
-Multiple Precision Arithmetic) and GNU@tie{}@dfn{MPFR} (Multiple Precision
-Floating-Point Reliably) libraries.
+using MPFR reliable floating-point numbers.  It's based on the @acronym{GMP, GNU
+Multiple Precision Arithmetic} and GNU@tie{}@acronym{MPFR, Multiple Precision
+Floating-Point Reliably} libraries.
 
 The purpose of arbitrary-precision interval arithmetic is to get results that
 are both guaranteed, thanks to interval computation, and accurate, thanks to
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index f63418b2cc..813bbb8c81 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -592,14 +592,14 @@ of the same name.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "3.0.2")
+    (version "3.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.wireshark.org/download/src/wireshark-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0fz5lbyiw4a27fqc4ndi1w20bpcb6wi9k7vjv29l9fhd99kca7ky"))))
+        (base32 "0711jilp9sbgi46d105m3galw8n4wk5yncawi08031qxg2f754mg"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/nss.scm b/gnu/packages/nss.scm
index 40a8002954..b6df366a77 100644
--- a/gnu/packages/nss.scm
+++ b/gnu/packages/nss.scm
@@ -70,7 +70,7 @@ in the Mozilla clients.")
 (define-public nss
   (package
     (name "nss")
-    (version "3.44.1")
+    (version "3.45")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -81,9 +81,10 @@ in the Mozilla clients.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "1y0jvva4s3j7cjz22kqw2lsml0an1295bgpc2raf7kc9r60cpr7w"))
+                "12sfq9xvpwpc22qnjsg1if1lmchiy33byrh92wn91phz7li0abqi"))
               ;; Create nss.pc and nss-config.
               (patches (search-patches "nss-pkgconfig.patch"
+                                       "nss-freebl-stubs.patch"
                                        "nss-increase-test-timeout.patch"))))
     (build-system gnu-build-system)
     (outputs '("out" "bin"))
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 84bb3542f1..546806f284 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -561,16 +561,16 @@ transactions from C or Python.")
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "116")
+    (version "120")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://salsa.debian.org/reproducible-builds/diffoscope.git")
-                    (commit "116")))
+                    (commit "120")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1anz2c112y0w21mh7xp6bs6z7v10dcy1i25nypkvqy3j929m0g28"))))
+                "07z9yclvfkw4326739l2ywzzihax5vdijiaqqpfix9rz1rb923aa"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -1023,7 +1023,7 @@ the boot loader configuration.")
 (define-public flatpak
   (package
    (name "flatpak")
-   (version "1.2.4")
+   (version "1.4.2")
    (source
     (origin
      (method url-fetch)
@@ -1031,7 +1031,7 @@ the boot loader configuration.")
                          version "/flatpak-" version ".tar.xz"))
      (sha256
       (base32
-       "1qf3ys84fzv11z6f6li59rxjdjbyrv7cyi9539k73r9i9pckjr8v"))))
+       "08nmpp26mgv0vp3mlwk97rnp0j7i108h4hr9nllja19sjxnrlygj"))))
 
    ;; Wrap 'flatpak' so that GIO_EXTRA_MODULES is set, thereby allowing GIO to
    ;; find the TLS backend in glib-networking.
@@ -1059,6 +1059,7 @@ the boot loader configuration.")
    (inputs `(("appstream-glib" ,appstream-glib)
              ("bubblewrap" ,bubblewrap)
              ("dconf" ,dconf)
+             ("fuse" ,fuse)
              ("gdk-pixbuf" ,gdk-pixbuf)
              ("gpgme" ,gpgme)
              ("json-glib" ,json-glib)
diff --git a/gnu/packages/patches/emacs-dired-toggle-sudo-emacs-26.patch b/gnu/packages/patches/emacs-dired-toggle-sudo-emacs-26.patch
new file mode 100644
index 0000000000..d979b113d0
--- /dev/null
+++ b/gnu/packages/patches/emacs-dired-toggle-sudo-emacs-26.patch
@@ -0,0 +1,49 @@
+From 3c0f4b27a079b90dc632f5061a81ce28cef24801 Mon Sep 17 00:00:00 2001
+From: eryx67 <eryx67@gmail.com>
+Date: Thu, 29 Nov 2018 10:30:20 +0500
+Subject: [PATCH] fix for latest emacs
+
+---
+ dired-toggle-sudo.el | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/dired-toggle-sudo.el b/dired-toggle-sudo.el
+index 386921b..fe5898e 100644
+--- a/dired-toggle-sudo.el
++++ b/dired-toggle-sudo.el
+@@ -37,17 +37,20 @@
+ unless SUDO-USER is provided."
+   (let* (;; Handle the case of local files. `tramp-dissect-file-name' does
+ 	 ;; not raise an error anymore.
+-	 (path (if (tramp-tramp-file-p path) path (concat "/:" path)))
++	 ;;(path (if (tramp-tramp-file-p path) path (concat "/-::" path)))
+ 	 (file-vec (or (ignore-errors (tramp-dissect-file-name
+ 				       path))
+ 		       (tramp-dissect-file-name
+-			(concat "/:" path) 1)))
++			(concat "/-::" path) 1)))
+ 	 (method  (tramp-file-name-method file-vec))
+ 	 (user (tramp-file-name-user file-vec))
+ 	 (host  (tramp-file-name-host file-vec))
++         (domain  (tramp-file-name-domain file-vec))
++         (port  (tramp-file-name-port file-vec))
+ 	 (localname (expand-file-name
+ 		     (tramp-file-name-localname file-vec))))
+-    (when (string= system-name host)
++    (when (or (string= (system-name) host)
++              (string= "-" host))
+       (setq host nil))
+     (cond
+      ;; remote directory -> sudo
+@@ -67,7 +70,7 @@ unless SUDO-USER is provided."
+       (setq method "sudo" user sudo-user)))
+     (replace-regexp-in-string
+      "^/:/" "/"
+-     (tramp-make-tramp-file-name method user host localname))))
++     (tramp-make-tramp-file-name method domain user host port localname))))
+ 
+ (defun dired-toggle-sudo-find (fname)
+   "Create a new buffer for file name FNAME."
+-- 
+2.22.0
+
diff --git a/gnu/packages/patches/flac-CVE-2017-6888.patch b/gnu/packages/patches/flac-CVE-2017-6888.patch
deleted file mode 100644
index d2583201b4..0000000000
--- a/gnu/packages/patches/flac-CVE-2017-6888.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-https://git.xiph.org/?p=flac.git;a=patch;h=4f47b63e9c971e6391590caf00a0f2a5ed612e67
-
-From 4f47b63e9c971e6391590caf00a0f2a5ed612e67 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Sat, 8 Apr 2017 18:34:49 +1000
-Subject: [PATCH] stream_decoder.c: Fix a memory leak
-
-Leak reported by Secunia Research.
----
- src/libFLAC/stream_decoder.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/libFLAC/stream_decoder.c b/src/libFLAC/stream_decoder.c
-index 14d5fe7f..a5527511 100644
---- a/src/libFLAC/stream_decoder.c
-+++ b/src/libFLAC/stream_decoder.c
-@@ -1753,6 +1753,9 @@ FLAC__bool read_metadata_vorbiscomment_(FLAC__StreamDecoder *decoder, FLAC__Stre
- 					}
- 					memset (obj->comments[i].entry, 0, obj->comments[i].length) ;
- 					if (!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->comments[i].entry, obj->comments[i].length)) {
-+						/* Current i-th entry is bad, so we delete it. */
-+						free (obj->comments[i].entry) ;
-+						obj->comments[i].entry = NULL ;
- 						obj->num_comments = i;
- 						goto skip;
- 					}
--- 
-2.11.0
-
diff --git a/gnu/packages/patches/isc-dhcp-4.4.1-fixes-for-newer-bind.patch b/gnu/packages/patches/isc-dhcp-4.4.1-fixes-for-newer-bind.patch
new file mode 100644
index 0000000000..53e681ea31
--- /dev/null
+++ b/gnu/packages/patches/isc-dhcp-4.4.1-fixes-for-newer-bind.patch
@@ -0,0 +1,100 @@
+These fixes are needed to adapt isc-dhcp-4.4.1 to build
+successfully after its bundled copy of bind has been updated.
+
+It is derived from the following upstream commits:
+
+commit 8194daabfd590f17825f0c61e9534bee5c99cc86
+Author: Thomas Markwalder <tmark@isc.org>
+Date:   Fri Sep 14 13:41:14 2018 -0400
+
+  [master] Added includes of new BIND9 compatibility headers, updated util/bind.sh
+  
+      Merges in rt48072.
+
+commit cc35f84943df44dac2499f3e16e8aaba7d54191d
+Author: Thomas Markwalder <tmark@isc.org>
+Date:   Tue Mar 19 08:36:23 2019 -0400
+
+  [master] Avoid Bind9 python dependency
+  
+      merges [#3,!1] Avoid Bind9 python dependency
+
+--- a/bind/Makefile.in
++++ b/bind/Makefile.in
+@@ -23,7 +23,7 @@ exec_prefix = @exec_prefix@
+ 
+ bindconfig = --without-openssl --without-libxml2 --without-libjson \
+ 	--without-gssapi --disable-threads --without-lmdb \
+-	--includedir=@includedir@ --libdir=@libdir@ \
++	--includedir=@includedir@ --libdir=@libdir@  --without-python\
+ 	@BINDLT@ @BINDIOMUX@ @BINDCONFIG@ --enable-full-report
+ 
+ @BIND_ATF_FALSE@cleandirs = ./lib ./include
+diff --git a/includes/omapip/isclib.h b/includes/omapip/isclib.h
+index 75a87ff6..538b927f 100644
+--- a/includes/omapip/isclib.h
++++ b/includes/omapip/isclib.h
+@@ -48,6 +48,9 @@
+ #include <string.h>
+ #include <netdb.h>
+ 
++#include <isc/boolean.h>
++#include <isc/int.h>
++
+ #include <isc/buffer.h>
+ #include <isc/lex.h>
+ #include <isc/lib.h>
+diff --git a/includes/omapip/result.h b/includes/omapip/result.h
+index 91243e1b..860298f6 100644
+--- a/includes/omapip/result.h
++++ b/includes/omapip/result.h
+@@ -26,6 +26,7 @@
+ #ifndef DHCP_RESULT_H
+ #define DHCP_RESULT_H 1
+ 
++#include <isc/boolean.h>
+ #include <isc/lang.h>
+ #include <isc/resultclass.h>
+ #include <isc/types.h>
+diff --git a/server/dhcpv6.c b/server/dhcpv6.c
+index a7110f98..cde4f617 100644
+--- a/server/dhcpv6.c
++++ b/server/dhcpv6.c
+@@ -1034,7 +1034,8 @@ void check_pool6_threshold(struct reply_state *reply,
+ 				  shared_name,
+ 				  inet_ntop(AF_INET6, &lease->addr,
+ 					    tmp_addr, sizeof(tmp_addr)),
+-				  used, count);
++				  (long long unsigned)(used),
++				  (long long unsigned)(count));
+ 		}
+ 		return;
+ 	}
+@@ -1066,7 +1067,8 @@ void check_pool6_threshold(struct reply_state *reply,
+ 		  "address: %s; high threshold %d%% %llu/%llu.",
+ 		  shared_name,
+ 		  inet_ntop(AF_INET6, &lease->addr, tmp_addr, sizeof(tmp_addr)),
+-		  poolhigh, used, count);
++		  poolhigh, (long long unsigned)(used),
++		  (long long unsigned)(count));
+ 
+ 	/* handle the low threshold now, if we don't
+ 	 * have one we default to 0. */
+@@ -1436,12 +1438,15 @@ pick_v6_address(struct reply_state *reply)
+ 		log_debug("Unable to pick client address: "
+ 			  "no addresses available  - shared network %s: "
+ 			  " 2^64-1 < total, %llu active,  %llu abandoned",
+-			  shared_name, active - abandoned, abandoned);
++			  shared_name, (long long unsigned)(active - abandoned),
++			  (long long unsigned)(abandoned));
+ 	} else {
+ 		log_debug("Unable to pick client address: "
+ 			  "no addresses available  - shared network %s: "
+ 			  "%llu total, %llu active,  %llu abandoned",
+-			  shared_name, total, active - abandoned, abandoned);
++			  shared_name, (long long unsigned)(total),
++			  (long long unsigned)(active - abandoned),
++		          (long long unsigned)(abandoned));
+ 	}
+ 
+ 	return ISC_R_NORESOURCES;
diff --git a/gnu/packages/patches/libmad-frame-length.patch b/gnu/packages/patches/libmad-frame-length.patch
deleted file mode 100644
index 3434eba577..0000000000
--- a/gnu/packages/patches/libmad-frame-length.patch
+++ /dev/null
@@ -1,199 +0,0 @@
-Copied from Debian.
-
-; You can calculate where the next frame will start depending on things
-; like the bitrate. See mad_header_decode().  It seems that when decoding
-; the frame you can go past that boundary.  This attempts to catch those cases,
-; but might not catch all of them.
-; For more info see http://bugs.debian.org/508133
-Index: libmad-0.15.1b/layer12.c
-===================================================================
---- libmad-0.15.1b.orig/layer12.c	2008-12-23 21:38:07.000000000 +0100
-+++ libmad-0.15.1b/layer12.c	2008-12-23 21:38:12.000000000 +0100
-@@ -134,6 +134,12 @@
-   for (sb = 0; sb < bound; ++sb) {
-     for (ch = 0; ch < nch; ++ch) {
-       nb = mad_bit_read(&stream->ptr, 4);
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
- 
-       if (nb == 15) {
- 	stream->error = MAD_ERROR_BADBITALLOC;
-@@ -146,6 +152,12 @@
- 
-   for (sb = bound; sb < 32; ++sb) {
-     nb = mad_bit_read(&stream->ptr, 4);
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
- 
-     if (nb == 15) {
-       stream->error = MAD_ERROR_BADBITALLOC;
-@@ -162,6 +174,12 @@
-     for (ch = 0; ch < nch; ++ch) {
-       if (allocation[ch][sb]) {
- 	scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
- 
- # if defined(OPT_STRICT)
- 	/*
-@@ -187,6 +205,12 @@
- 	frame->sbsample[ch][s][sb] = nb ?
- 	  mad_f_mul(I_sample(&stream->ptr, nb),
- 		    sf_table[scalefactor[ch][sb]]) : 0;
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
-       }
-     }
- 
-@@ -195,6 +219,12 @@
- 	mad_fixed_t sample;
- 
- 	sample = I_sample(&stream->ptr, nb);
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
- 
- 	for (ch = 0; ch < nch; ++ch) {
- 	  frame->sbsample[ch][s][sb] =
-@@ -403,7 +433,15 @@
-     nbal = bitalloc_table[offsets[sb]].nbal;
- 
-     for (ch = 0; ch < nch; ++ch)
-+    {
-       allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
-+    }
-   }
- 
-   for (sb = bound; sb < sblimit; ++sb) {
-@@ -411,6 +449,13 @@
- 
-     allocation[0][sb] =
-     allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
-+
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
-   }
- 
-   /* decode scalefactor selection info */
-@@ -419,6 +464,12 @@
-     for (ch = 0; ch < nch; ++ch) {
-       if (allocation[ch][sb])
- 	scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
-     }
-   }
- 
-@@ -442,6 +493,12 @@
-     for (ch = 0; ch < nch; ++ch) {
-       if (allocation[ch][sb]) {
- 	scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
- 
- 	switch (scfsi[ch][sb]) {
- 	case 2:
-@@ -452,11 +509,23 @@
- 
- 	case 0:
- 	  scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
-+		if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+		{
-+			stream->error = MAD_ERROR_LOSTSYNC;
-+			stream->sync = 0;
-+			return -1;
-+		}
- 	  /* fall through */
- 
- 	case 1:
- 	case 3:
- 	  scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
-+		if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+		{
-+			stream->error = MAD_ERROR_LOSTSYNC;
-+			stream->sync = 0;
-+			return -1;
-+		}
- 	}
- 
- 	if (scfsi[ch][sb] & 1)
-@@ -488,6 +557,12 @@
- 	  index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
- 
- 	  II_samples(&stream->ptr, &qc_table[index], samples);
-+		if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+		{
-+			stream->error = MAD_ERROR_LOSTSYNC;
-+			stream->sync = 0;
-+			return -1;
-+		}
- 
- 	  for (s = 0; s < 3; ++s) {
- 	    frame->sbsample[ch][3 * gr + s][sb] =
-@@ -506,6 +581,12 @@
- 	index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
- 
- 	II_samples(&stream->ptr, &qc_table[index], samples);
-+	if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
-+	{
-+		stream->error = MAD_ERROR_LOSTSYNC;
-+		stream->sync = 0;
-+		return -1;
-+	}
- 
- 	for (ch = 0; ch < nch; ++ch) {
- 	  for (s = 0; s < 3; ++s) {
-Index: libmad-0.15.1b/layer3.c
-===================================================================
---- libmad-0.15.1b.orig/layer3.c	2008-12-23 21:38:07.000000000 +0100
-+++ libmad-0.15.1b/layer3.c	2008-12-23 21:38:12.000000000 +0100
-@@ -2608,6 +2608,12 @@
-     next_md_begin = 0;
- 
-   md_len = si.main_data_begin + frame_space - next_md_begin;
-+  if (md_len + MAD_BUFFER_GUARD > MAD_BUFFER_MDLEN)
-+  {
-+	stream->error = MAD_ERROR_LOSTSYNC;
-+	stream->sync = 0;
-+	return -1;
-+  }
- 
-   frame_used = 0;
- 
diff --git a/gnu/packages/patches/libmad-length-check.patch b/gnu/packages/patches/libmad-length-check.patch
new file mode 100644
index 0000000000..18ca68fd7e
--- /dev/null
+++ b/gnu/packages/patches/libmad-length-check.patch
@@ -0,0 +1,819 @@
+Copied from Debian.
+
+From: Kurt Roeckx <kurt@roeckx.be>
+Date: Sun, 28 Jan 2018 19:26:36 +0100
+Subject: Check the size before reading with mad_bit_read
+
+There are various cases where it attemps to read past the end of the buffer
+using mad_bit_read(). Most functions didn't even know the size of the buffer
+they were reading from.
+
+Index: libmad-0.15.1b/bit.c
+===================================================================
+--- libmad-0.15.1b.orig/bit.c
++++ libmad-0.15.1b/bit.c
+@@ -138,6 +138,9 @@ unsigned long mad_bit_read(struct mad_bi
+ {
+   register unsigned long value;
+ 
++  if (len == 0)
++    return 0;
++
+   if (bitptr->left == CHAR_BIT)
+     bitptr->cache = *bitptr->byte;
+ 
+Index: libmad-0.15.1b/frame.c
+===================================================================
+--- libmad-0.15.1b.orig/frame.c
++++ libmad-0.15.1b/frame.c
+@@ -120,11 +120,18 @@ static
+ int decode_header(struct mad_header *header, struct mad_stream *stream)
+ {
+   unsigned int index;
++  struct mad_bitptr bufend_ptr;
+ 
+   header->flags        = 0;
+   header->private_bits = 0;
+ 
++  mad_bit_init(&bufend_ptr, stream->bufend);
++
+   /* header() */
++  if (mad_bit_length(&stream->ptr, &bufend_ptr) < 32) {
++    stream->error = MAD_ERROR_BUFLEN;
++    return -1;
++  }
+ 
+   /* syncword */
+   mad_bit_skip(&stream->ptr, 11);
+@@ -225,8 +232,13 @@ int decode_header(struct mad_header *hea
+   /* error_check() */
+ 
+   /* crc_check */
+-  if (header->flags & MAD_FLAG_PROTECTION)
++  if (header->flags & MAD_FLAG_PROTECTION) {
++    if (mad_bit_length(&stream->ptr, &bufend_ptr) < 16) {
++      stream->error = MAD_ERROR_BUFLEN;
++      return -1;
++    }
+     header->crc_target = mad_bit_read(&stream->ptr, 16);
++  }
+ 
+   return 0;
+ }
+@@ -338,7 +350,7 @@ int mad_header_decode(struct mad_header
+       stream->error = MAD_ERROR_BUFLEN;
+       goto fail;
+     }
+-    else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
++    else if ((end - ptr >= 2) && !(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
+       /* mark point where frame sync word was expected */
+       stream->this_frame = ptr;
+       stream->next_frame = ptr + 1;
+@@ -361,6 +373,8 @@ int mad_header_decode(struct mad_header
+     ptr = mad_bit_nextbyte(&stream->ptr);
+   }
+ 
++  stream->error = MAD_ERROR_NONE;
++
+   /* begin processing */
+   stream->this_frame = ptr;
+   stream->next_frame = ptr + 1;  /* possibly bogus sync word */
+@@ -413,7 +427,7 @@ int mad_header_decode(struct mad_header
+     /* check that a valid frame header follows this frame */
+ 
+     ptr = stream->next_frame;
+-    if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
++    if ((end - ptr >= 2) && !(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
+       ptr = stream->next_frame = stream->this_frame + 1;
+       goto sync;
+     }
+Index: libmad-0.15.1b/layer12.c
+===================================================================
+--- libmad-0.15.1b.orig/layer12.c
++++ libmad-0.15.1b/layer12.c
+@@ -72,10 +72,18 @@ mad_fixed_t const linear_table[14] = {
+  * DESCRIPTION:	decode one requantized Layer I sample from a bitstream
+  */
+ static
+-mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb)
++mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb, struct mad_stream *stream)
+ {
+   mad_fixed_t sample;
++  struct mad_bitptr frameend_ptr;
+ 
++  mad_bit_init(&frameend_ptr, stream->next_frame);
++
++  if (mad_bit_length(ptr, &frameend_ptr) < nb) {
++    stream->error = MAD_ERROR_LOSTSYNC;
++    stream->sync = 0;
++    return 0;
++  }
+   sample = mad_bit_read(ptr, nb);
+ 
+   /* invert most significant bit, extend sign, then scale to fixed format */
+@@ -106,6 +114,10 @@ int mad_layer_I(struct mad_stream *strea
+   struct mad_header *header = &frame->header;
+   unsigned int nch, bound, ch, s, sb, nb;
+   unsigned char allocation[2][32], scalefactor[2][32];
++  struct mad_bitptr bufend_ptr, frameend_ptr;
++
++  mad_bit_init(&bufend_ptr, stream->bufend);
++  mad_bit_init(&frameend_ptr, stream->next_frame);
+ 
+   nch = MAD_NCHANNELS(header);
+ 
+@@ -118,6 +130,11 @@ int mad_layer_I(struct mad_stream *strea
+   /* check CRC word */
+ 
+   if (header->flags & MAD_FLAG_PROTECTION) {
++    if (mad_bit_length(&stream->ptr, &bufend_ptr)
++		< 4 * (bound * nch + (32 - bound))) {
++      stream->error = MAD_ERROR_BADCRC;
++      return -1;
++    }
+     header->crc_check =
+       mad_bit_crc(stream->ptr, 4 * (bound * nch + (32 - bound)),
+ 		  header->crc_check);
+@@ -133,6 +150,11 @@ int mad_layer_I(struct mad_stream *strea
+ 
+   for (sb = 0; sb < bound; ++sb) {
+     for (ch = 0; ch < nch; ++ch) {
++      if (mad_bit_length(&stream->ptr, &frameend_ptr) < 4) {
++	stream->error = MAD_ERROR_LOSTSYNC;
++	stream->sync = 0;
++	return -1;
++      }
+       nb = mad_bit_read(&stream->ptr, 4);
+ 
+       if (nb == 15) {
+@@ -145,6 +167,11 @@ int mad_layer_I(struct mad_stream *strea
+   }
+ 
+   for (sb = bound; sb < 32; ++sb) {
++    if (mad_bit_length(&stream->ptr, &frameend_ptr) < 4) {
++      stream->error = MAD_ERROR_LOSTSYNC;
++      stream->sync = 0;
++      return -1;
++    }
+     nb = mad_bit_read(&stream->ptr, 4);
+ 
+     if (nb == 15) {
+@@ -161,6 +188,11 @@ int mad_layer_I(struct mad_stream *strea
+   for (sb = 0; sb < 32; ++sb) {
+     for (ch = 0; ch < nch; ++ch) {
+       if (allocation[ch][sb]) {
++        if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
++	  stream->error = MAD_ERROR_LOSTSYNC;
++	  stream->sync = 0;
++	  return -1;
++	}
+ 	scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);
+ 
+ # if defined(OPT_STRICT)
+@@ -185,8 +217,10 @@ int mad_layer_I(struct mad_stream *strea
+       for (ch = 0; ch < nch; ++ch) {
+ 	nb = allocation[ch][sb];
+ 	frame->sbsample[ch][s][sb] = nb ?
+-	  mad_f_mul(I_sample(&stream->ptr, nb),
++	  mad_f_mul(I_sample(&stream->ptr, nb, stream),
+ 		    sf_table[scalefactor[ch][sb]]) : 0;
++	if (stream->error != 0)
++	  return -1;
+       }
+     }
+ 
+@@ -194,7 +228,14 @@ int mad_layer_I(struct mad_stream *strea
+       if ((nb = allocation[0][sb])) {
+ 	mad_fixed_t sample;
+ 
+-	sample = I_sample(&stream->ptr, nb);
++	if (mad_bit_length(&stream->ptr, &frameend_ptr) < nb) {
++	  stream->error = MAD_ERROR_LOSTSYNC;
++	  stream->sync = 0;
++          return -1;
++	}
++	sample = I_sample(&stream->ptr, nb, stream);
++        if (stream->error != 0)
++	  return -1;
+ 
+ 	for (ch = 0; ch < nch; ++ch) {
+ 	  frame->sbsample[ch][s][sb] =
+@@ -280,13 +321,21 @@ struct quantclass {
+ static
+ void II_samples(struct mad_bitptr *ptr,
+ 		struct quantclass const *quantclass,
+-		mad_fixed_t output[3])
++		mad_fixed_t output[3], struct mad_stream *stream)
+ {
+   unsigned int nb, s, sample[3];
++  struct mad_bitptr frameend_ptr;
++
++  mad_bit_init(&frameend_ptr, stream->next_frame);
+ 
+   if ((nb = quantclass->group)) {
+     unsigned int c, nlevels;
+ 
++    if (mad_bit_length(ptr, &frameend_ptr) < quantclass->bits) {
++      stream->error = MAD_ERROR_LOSTSYNC;
++      stream->sync = 0;
++      return;
++    }
+     /* degrouping */
+     c = mad_bit_read(ptr, quantclass->bits);
+     nlevels = quantclass->nlevels;
+@@ -299,8 +348,14 @@ void II_samples(struct mad_bitptr *ptr,
+   else {
+     nb = quantclass->bits;
+ 
+-    for (s = 0; s < 3; ++s)
++    for (s = 0; s < 3; ++s) {
++      if (mad_bit_length(ptr, &frameend_ptr) < nb) {
++	stream->error = MAD_ERROR_LOSTSYNC;
++	stream->sync = 0;
++	return;
++      }
+       sample[s] = mad_bit_read(ptr, nb);
++    }
+   }
+ 
+   for (s = 0; s < 3; ++s) {
+@@ -336,6 +391,9 @@ int mad_layer_II(struct mad_stream *stre
+   unsigned char const *offsets;
+   unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
+   mad_fixed_t samples[3];
++  struct mad_bitptr frameend_ptr;
++
++  mad_bit_init(&frameend_ptr, stream->next_frame);
+ 
+   nch = MAD_NCHANNELS(header);
+ 
+@@ -402,13 +460,24 @@ int mad_layer_II(struct mad_stream *stre
+   for (sb = 0; sb < bound; ++sb) {
+     nbal = bitalloc_table[offsets[sb]].nbal;
+ 
+-    for (ch = 0; ch < nch; ++ch)
++    for (ch = 0; ch < nch; ++ch) {
++      if (mad_bit_length(&stream->ptr, &frameend_ptr) < nbal) {
++	stream->error = MAD_ERROR_LOSTSYNC;
++	stream->sync = 0;
++	return -1;
++      }
+       allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
++    }
+   }
+ 
+   for (sb = bound; sb < sblimit; ++sb) {
+     nbal = bitalloc_table[offsets[sb]].nbal;
+ 
++    if (mad_bit_length(&stream->ptr, &frameend_ptr) < nbal) {
++      stream->error = MAD_ERROR_LOSTSYNC;
++      stream->sync = 0;
++      return -1;
++    }
+     allocation[0][sb] =
+     allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
+   }
+@@ -417,8 +486,14 @@ int mad_layer_II(struct mad_stream *stre
+ 
+   for (sb = 0; sb < sblimit; ++sb) {
+     for (ch = 0; ch < nch; ++ch) {
+-      if (allocation[ch][sb])
++      if (allocation[ch][sb]) {
++	if (mad_bit_length(&stream->ptr, &frameend_ptr) < 2) {
++	  stream->error = MAD_ERROR_LOSTSYNC;
++	  stream->sync = 0;
++	  return -1;
++	}
+ 	scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
++      }
+     }
+   }
+ 
+@@ -441,6 +516,11 @@ int mad_layer_II(struct mad_stream *stre
+   for (sb = 0; sb < sblimit; ++sb) {
+     for (ch = 0; ch < nch; ++ch) {
+       if (allocation[ch][sb]) {
++	if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
++	  stream->error = MAD_ERROR_LOSTSYNC;
++	  stream->sync = 0;
++	  return -1;
++	}
+ 	scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
+ 
+ 	switch (scfsi[ch][sb]) {
+@@ -451,11 +531,21 @@ int mad_layer_II(struct mad_stream *stre
+ 	  break;
+ 
+ 	case 0:
++	  if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
++	    stream->error = MAD_ERROR_LOSTSYNC;
++	    stream->sync = 0;
++	    return -1;
++	  }
+ 	  scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
+ 	  /* fall through */
+ 
+ 	case 1:
+ 	case 3:
++	  if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
++	    stream->error = MAD_ERROR_LOSTSYNC;
++	    stream->sync = 0;
++	    return -1;
++	  }
+ 	  scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
+ 	}
+ 
+@@ -487,7 +577,9 @@ int mad_layer_II(struct mad_stream *stre
+ 	if ((index = allocation[ch][sb])) {
+ 	  index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
+ 
+-	  II_samples(&stream->ptr, &qc_table[index], samples);
++	  II_samples(&stream->ptr, &qc_table[index], samples, stream);
++	  if (stream->error != 0)
++            return -1;
+ 
+ 	  for (s = 0; s < 3; ++s) {
+ 	    frame->sbsample[ch][3 * gr + s][sb] =
+@@ -505,7 +597,9 @@ int mad_layer_II(struct mad_stream *stre
+       if ((index = allocation[0][sb])) {
+ 	index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
+ 
+-	II_samples(&stream->ptr, &qc_table[index], samples);
++	II_samples(&stream->ptr, &qc_table[index], samples, stream);
++	if (stream->error != 0)
++          return -1;
+ 
+ 	for (ch = 0; ch < nch; ++ch) {
+ 	  for (s = 0; s < 3; ++s) {
+Index: libmad-0.15.1b/layer3.c
+===================================================================
+--- libmad-0.15.1b.orig/layer3.c
++++ libmad-0.15.1b/layer3.c
+@@ -598,7 +598,8 @@ enum mad_error III_sideinfo(struct mad_b
+ static
+ unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
+ 				  struct channel *channel,
+-				  struct channel *gr1ch, int mode_extension)
++				  struct channel *gr1ch, int mode_extension,
++				  unsigned int bits_left, unsigned int *part2_length)
+ {
+   struct mad_bitptr start;
+   unsigned int scalefac_compress, index, slen[4], part, n, i;
+@@ -644,8 +645,12 @@ unsigned int III_scalefactors_lsf(struct
+ 
+     n = 0;
+     for (part = 0; part < 4; ++part) {
+-      for (i = 0; i < nsfb[part]; ++i)
++      for (i = 0; i < nsfb[part]; ++i) {
++	if (bits_left < slen[part])
++	  return MAD_ERROR_BADSCFSI;
+ 	channel->scalefac[n++] = mad_bit_read(ptr, slen[part]);
++	bits_left -= slen[part];
++      }
+     }
+ 
+     while (n < 39)
+@@ -690,7 +695,10 @@ unsigned int III_scalefactors_lsf(struct
+       max = (1 << slen[part]) - 1;
+ 
+       for (i = 0; i < nsfb[part]; ++i) {
++	if (bits_left < slen[part])
++	  return MAD_ERROR_BADSCFSI;
+ 	is_pos = mad_bit_read(ptr, slen[part]);
++	bits_left -= slen[part];
+ 
+ 	channel->scalefac[n] = is_pos;
+ 	gr1ch->scalefac[n++] = (is_pos == max);
+@@ -703,7 +711,8 @@ unsigned int III_scalefactors_lsf(struct
+     }
+   }
+ 
+-  return mad_bit_length(&start, ptr);
++  *part2_length = mad_bit_length(&start, ptr);
++  return MAD_ERROR_NONE;
+ }
+ 
+ /*
+@@ -712,7 +721,8 @@ unsigned int III_scalefactors_lsf(struct
+  */
+ static
+ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
+-			      struct channel const *gr0ch, unsigned int scfsi)
++			      struct channel const *gr0ch, unsigned int scfsi,
++			      unsigned int bits_left, unsigned int *part2_length)
+ {
+   struct mad_bitptr start;
+   unsigned int slen1, slen2, sfbi;
+@@ -728,12 +738,20 @@ unsigned int III_scalefactors(struct mad
+     sfbi = 0;
+ 
+     nsfb = (channel->flags & mixed_block_flag) ? 8 + 3 * 3 : 6 * 3;
+-    while (nsfb--)
++    while (nsfb--) {
++      if (bits_left < slen1)
++	return MAD_ERROR_BADSCFSI;
+       channel->scalefac[sfbi++] = mad_bit_read(ptr, slen1);
++      bits_left -= slen1;
++    }
+ 
+     nsfb = 6 * 3;
+-    while (nsfb--)
++    while (nsfb--) {
++      if (bits_left < slen2)
++	return MAD_ERROR_BADSCFSI;
+       channel->scalefac[sfbi++] = mad_bit_read(ptr, slen2);
++      bits_left -= slen2;
++    }
+ 
+     nsfb = 1 * 3;
+     while (nsfb--)
+@@ -745,8 +763,12 @@ unsigned int III_scalefactors(struct mad
+ 	channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+     }
+     else {
+-      for (sfbi = 0; sfbi < 6; ++sfbi)
++      for (sfbi = 0; sfbi < 6; ++sfbi) {
++	if (bits_left < slen1)
++	  return MAD_ERROR_BADSCFSI;
+ 	channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
++	bits_left -= slen1;
++      }
+     }
+ 
+     if (scfsi & 0x4) {
+@@ -754,8 +776,12 @@ unsigned int III_scalefactors(struct mad
+ 	channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+     }
+     else {
+-      for (sfbi = 6; sfbi < 11; ++sfbi)
++      for (sfbi = 6; sfbi < 11; ++sfbi) {
++	if (bits_left < slen1)
++	  return MAD_ERROR_BADSCFSI;
+ 	channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
++	bits_left -= slen1;
++      }
+     }
+ 
+     if (scfsi & 0x2) {
+@@ -763,8 +789,12 @@ unsigned int III_scalefactors(struct mad
+ 	channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+     }
+     else {
+-      for (sfbi = 11; sfbi < 16; ++sfbi)
++      for (sfbi = 11; sfbi < 16; ++sfbi) {
++	if (bits_left < slen2)
++	  return MAD_ERROR_BADSCFSI;
+ 	channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
++	bits_left -= slen2;
++      }
+     }
+ 
+     if (scfsi & 0x1) {
+@@ -772,14 +802,19 @@ unsigned int III_scalefactors(struct mad
+ 	channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+     }
+     else {
+-      for (sfbi = 16; sfbi < 21; ++sfbi)
++      for (sfbi = 16; sfbi < 21; ++sfbi) {
++	if (bits_left < slen2)
++	  return MAD_ERROR_BADSCFSI;
+ 	channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
++	bits_left -= slen2;
++      }
+     }
+ 
+     channel->scalefac[21] = 0;
+   }
+ 
+-  return mad_bit_length(&start, ptr);
++  *part2_length = mad_bit_length(&start, ptr);
++  return MAD_ERROR_NONE;
+ }
+ 
+ /*
+@@ -933,19 +968,17 @@ static
+ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
+ 			      struct channel *channel,
+ 			      unsigned char const *sfbwidth,
+-			      unsigned int part2_length)
++			      signed int part3_length)
+ {
+   signed int exponents[39], exp;
+   signed int const *expptr;
+   struct mad_bitptr peek;
+-  signed int bits_left, cachesz;
++  signed int bits_left, cachesz, fakebits;
+   register mad_fixed_t *xrptr;
+   mad_fixed_t const *sfbound;
+   register unsigned long bitcache;
+ 
+-  bits_left = (signed) channel->part2_3_length - (signed) part2_length;
+-  if (bits_left < 0)
+-    return MAD_ERROR_BADPART3LEN;
++  bits_left = part3_length;
+ 
+   III_exponents(channel, sfbwidth, exponents);
+ 
+@@ -956,8 +989,12 @@ enum mad_error III_huffdecode(struct mad
+   cachesz  = mad_bit_bitsleft(&peek);
+   cachesz += ((32 - 1 - 24) + (24 - cachesz)) & ~7;
+ 
++  if (bits_left < cachesz) {
++    cachesz = bits_left;
++  }
+   bitcache   = mad_bit_read(&peek, cachesz);
+   bits_left -= cachesz;
++  fakebits = 0;
+ 
+   xrptr = &xr[0];
+ 
+@@ -986,7 +1023,7 @@ enum mad_error III_huffdecode(struct mad
+ 
+     big_values = channel->big_values;
+ 
+-    while (big_values-- && cachesz + bits_left > 0) {
++    while (big_values-- && cachesz + bits_left - fakebits > 0) {
+       union huffpair const *pair;
+       unsigned int clumpsz, value;
+       register mad_fixed_t requantized;
+@@ -1023,10 +1060,19 @@ enum mad_error III_huffdecode(struct mad
+ 	unsigned int bits;
+ 
+ 	bits       = ((32 - 1 - 21) + (21 - cachesz)) & ~7;
++	if (bits_left < bits) {
++	  bits = bits_left;
++	}
+ 	bitcache   = (bitcache << bits) | mad_bit_read(&peek, bits);
+ 	cachesz   += bits;
+ 	bits_left -= bits;
+       }
++      if (cachesz < 21) {
++	unsigned int bits = 21 - cachesz;
++	bitcache <<= bits;
++	cachesz += bits;
++	fakebits += bits;
++      }
+ 
+       /* hcod (0..19) */
+ 
+@@ -1041,6 +1087,8 @@ enum mad_error III_huffdecode(struct mad
+       }
+ 
+       cachesz -= pair->value.hlen;
++      if (cachesz < fakebits)
++	return MAD_ERROR_BADHUFFDATA;
+ 
+       if (linbits) {
+ 	/* x (0..14) */
+@@ -1054,10 +1102,15 @@ enum mad_error III_huffdecode(struct mad
+ 
+ 	case 15:
+ 	  if (cachesz < linbits + 2) {
+-	    bitcache   = (bitcache << 16) | mad_bit_read(&peek, 16);
+-	    cachesz   += 16;
+-	    bits_left -= 16;
++	    unsigned int bits = 16;
++	    if (bits_left < 16)
++	      bits = bits_left;
++	    bitcache   = (bitcache << bits) | mad_bit_read(&peek, bits);
++	    cachesz   += bits;
++	    bits_left -= bits;
+ 	  }
++	  if (cachesz - fakebits < linbits)
++	    return MAD_ERROR_BADHUFFDATA;
+ 
+ 	  value += MASK(bitcache, cachesz, linbits);
+ 	  cachesz -= linbits;
+@@ -1074,6 +1127,8 @@ enum mad_error III_huffdecode(struct mad
+ 	  }
+ 
+ 	x_final:
++	  if (cachesz - fakebits < 1)
++	    return MAD_ERROR_BADHUFFDATA;
+ 	  xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
+ 	    -requantized : requantized;
+ 	}
+@@ -1089,10 +1144,15 @@ enum mad_error III_huffdecode(struct mad
+ 
+ 	case 15:
+ 	  if (cachesz < linbits + 1) {
+-	    bitcache   = (bitcache << 16) | mad_bit_read(&peek, 16);
+-	    cachesz   += 16;
+-	    bits_left -= 16;
++	    unsigned int bits = 16;
++	    if (bits_left < 16)
++	      bits = bits_left;
++	    bitcache   = (bitcache << bits) | mad_bit_read(&peek, bits);
++	    cachesz   += bits;
++	    bits_left -= bits;
+ 	  }
++	  if (cachesz - fakebits < linbits)
++	    return MAD_ERROR_BADHUFFDATA;
+ 
+ 	  value += MASK(bitcache, cachesz, linbits);
+ 	  cachesz -= linbits;
+@@ -1109,6 +1169,8 @@ enum mad_error III_huffdecode(struct mad
+ 	  }
+ 
+ 	y_final:
++	  if (cachesz - fakebits < 1)
++	    return MAD_ERROR_BADHUFFDATA;
+ 	  xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
+ 	    -requantized : requantized;
+ 	}
+@@ -1128,6 +1190,8 @@ enum mad_error III_huffdecode(struct mad
+ 	    requantized = reqcache[value] = III_requantize(value, exp);
+ 	  }
+ 
++	  if (cachesz - fakebits < 1)
++	    return MAD_ERROR_BADHUFFDATA;
+ 	  xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
+ 	    -requantized : requantized;
+ 	}
+@@ -1146,6 +1210,8 @@ enum mad_error III_huffdecode(struct mad
+ 	    requantized = reqcache[value] = III_requantize(value, exp);
+ 	  }
+ 
++	  if (cachesz - fakebits < 1)
++	    return MAD_ERROR_BADHUFFDATA;
+ 	  xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
+ 	    -requantized : requantized;
+ 	}
+@@ -1155,9 +1221,6 @@ enum mad_error III_huffdecode(struct mad
+     }
+   }
+ 
+-  if (cachesz + bits_left < 0)
+-    return MAD_ERROR_BADHUFFDATA;  /* big_values overrun */
+-
+   /* count1 */
+   {
+     union huffquad const *table;
+@@ -1167,15 +1230,24 @@ enum mad_error III_huffdecode(struct mad
+ 
+     requantized = III_requantize(1, exp);
+ 
+-    while (cachesz + bits_left > 0 && xrptr <= &xr[572]) {
++    while (cachesz + bits_left - fakebits > 0 && xrptr <= &xr[572]) {
+       union huffquad const *quad;
+ 
+       /* hcod (1..6) */
+ 
+       if (cachesz < 10) {
+-	bitcache   = (bitcache << 16) | mad_bit_read(&peek, 16);
+-	cachesz   += 16;
+-	bits_left -= 16;
++	unsigned int bits = 16;
++	if (bits_left < 16)
++	  bits = bits_left;
++	bitcache   = (bitcache << bits) | mad_bit_read(&peek, bits);
++	cachesz   += bits;
++	bits_left -= bits;
++      }
++      if (cachesz < 10) {
++	unsigned int bits = 10 - cachesz;
++	bitcache <<= bits;
++	cachesz += bits;
++	fakebits += bits;
+       }
+ 
+       quad = &table[MASK(bitcache, cachesz, 4)];
+@@ -1188,6 +1260,11 @@ enum mad_error III_huffdecode(struct mad
+ 		      MASK(bitcache, cachesz, quad->ptr.bits)];
+       }
+ 
++      if (cachesz - fakebits < quad->value.hlen + quad->value.v
++        + quad->value.w + quad->value.x + quad->value.y)
++	/* We don't have enough bits to read one more entry, consider them
++	 * stuffing bits. */
++	break;
+       cachesz -= quad->value.hlen;
+ 
+       if (xrptr == sfbound) {
+@@ -1236,22 +1313,8 @@ enum mad_error III_huffdecode(struct mad
+ 
+       xrptr += 2;
+     }
+-
+-    if (cachesz + bits_left < 0) {
+-# if 0 && defined(DEBUG)
+-      fprintf(stderr, "huffman count1 overrun (%d bits)\n",
+-	      -(cachesz + bits_left));
+-# endif
+-
+-      /* technically the bitstream is misformatted, but apparently
+-	 some encoders are just a bit sloppy with stuffing bits */
+-
+-      xrptr -= 4;
+-    }
+   }
+ 
+-  assert(-bits_left <= MAD_BUFFER_GUARD * CHAR_BIT);
+-
+ # if 0 && defined(DEBUG)
+   if (bits_left < 0)
+     fprintf(stderr, "read %d bits too many\n", -bits_left);
+@@ -2348,10 +2411,11 @@ void III_freqinver(mad_fixed_t sample[18
+  */
+ static
+ enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
+-			  struct sideinfo *si, unsigned int nch)
++			  struct sideinfo *si, unsigned int nch, unsigned int md_len)
+ {
+   struct mad_header *header = &frame->header;
+   unsigned int sfreqi, ngr, gr;
++  int bits_left = md_len * CHAR_BIT;
+ 
+   {
+     unsigned int sfreq;
+@@ -2383,6 +2447,7 @@ enum mad_error III_decode(struct mad_bit
+     for (ch = 0; ch < nch; ++ch) {
+       struct channel *channel = &granule->ch[ch];
+       unsigned int part2_length;
++      unsigned int part3_length;
+ 
+       sfbwidth[ch] = sfbwidth_table[sfreqi].l;
+       if (channel->block_type == 2) {
+@@ -2391,18 +2456,30 @@ enum mad_error III_decode(struct mad_bit
+       }
+ 
+       if (header->flags & MAD_FLAG_LSF_EXT) {
+-	part2_length = III_scalefactors_lsf(ptr, channel,
++	error = III_scalefactors_lsf(ptr, channel,
+ 					    ch == 0 ? 0 : &si->gr[1].ch[1],
+-					    header->mode_extension);
++					    header->mode_extension, bits_left, &part2_length);
+       }
+       else {
+-	part2_length = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
+-					gr == 0 ? 0 : si->scfsi[ch]);
++	error = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
++					gr == 0 ? 0 : si->scfsi[ch], bits_left, &part2_length);
+       }
++      if (error)
++        return error;
++
++      bits_left -= part2_length;
+ 
+-      error = III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part2_length);
++      if (part2_length > channel->part2_3_length)
++        return MAD_ERROR_BADPART3LEN;
++
++      part3_length = channel->part2_3_length - part2_length;
++      if (part3_length > bits_left)
++        return MAD_ERROR_BADPART3LEN;
++
++      error = III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part3_length);
+       if (error)
+ 	return error;
++      bits_left -= part3_length;
+     }
+ 
+     /* joint stereo processing */
+@@ -2519,11 +2596,13 @@ int mad_layer_III(struct mad_stream *str
+   unsigned int nch, priv_bitlen, next_md_begin = 0;
+   unsigned int si_len, data_bitlen, md_len;
+   unsigned int frame_space, frame_used, frame_free;
+-  struct mad_bitptr ptr;
++  struct mad_bitptr ptr, bufend_ptr;
+   struct sideinfo si;
+   enum mad_error error;
+   int result = 0;
+ 
++  mad_bit_init(&bufend_ptr, stream->bufend);
++
+   /* allocate Layer III dynamic structures */
+ 
+   if (stream->main_data == 0) {
+@@ -2587,14 +2666,15 @@ int mad_layer_III(struct mad_stream *str
+     unsigned long header;
+ 
+     mad_bit_init(&peek, stream->next_frame);
++    if (mad_bit_length(&peek, &bufend_ptr) >= 57) {
++      header = mad_bit_read(&peek, 32);
++      if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
++        if (!(header & 0x00010000L))  /* protection_bit */
++	  mad_bit_skip(&peek, 16);  /* crc_check */
+ 
+-    header = mad_bit_read(&peek, 32);
+-    if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
+-      if (!(header & 0x00010000L))  /* protection_bit */
+-	mad_bit_skip(&peek, 16);  /* crc_check */
+-
+-      next_md_begin =
+-	mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
++        next_md_begin =
++	  mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
++      }
+     }
+ 
+     mad_bit_finish(&peek);
+@@ -2653,7 +2733,7 @@ int mad_layer_III(struct mad_stream *str
+   /* decode main_data */
+ 
+   if (result == 0) {
+-    error = III_decode(&ptr, frame, &si, nch);
++    error = III_decode(&ptr, frame, &si, nch, md_len);
+     if (error) {
+       stream->error = error;
+       result = -1;
diff --git a/gnu/packages/patches/libmad-md_size.patch b/gnu/packages/patches/libmad-md_size.patch
new file mode 100644
index 0000000000..0eb6844a2a
--- /dev/null
+++ b/gnu/packages/patches/libmad-md_size.patch
@@ -0,0 +1,60 @@
+Copied from Debian.
+
+From: Kurt Roeckx <kurt@roeckx.be>
+Date: Sun, 28 Jan 2018 15:44:08 +0100
+Subject: Check the size of the main data
+
+The main data to decode a frame can come from the current frame and part of the
+previous frame, the so called bit reservoir. si.main_data_begin is the part of
+the previous frame we need for this frame. frame_space is the amount of main
+data that can be in this frame, and next_md_begin is the part of this frame that
+is going to be used for the next frame.
+
+The maximum amount of data from a previous frame that the format allows is 511
+bytes. The maximum frame size for the defined bitrates is at MPEG 2.5 layer 2
+at 320 kbit/s and 8 kHz sample rate which gives 72 * (320000 / 8000) + 1 = 2881.
+So those defines are not large enough:
+ # define MAD_BUFFER_GUARD      8
+ # define MAD_BUFFER_MDLEN      (511 + 2048 + MAD_BUFFER_GUARD)
+
+There is also support for a "free" bitrate which allows you to create any frame
+size, which can be larger than the buffer.
+
+Changing the defines is not an option since it's part of the ABI, so we check
+that the main data fits in the bufer.
+
+The previous frame data is stored in *stream->main_data and contains
+stream->md_len bytes. If stream->md_len is larger than the data we
+need from the previous frame (si.main_data_begin) it still wouldn't fit
+in the buffer, so just keep the data that we need.
+
+Index: libmad-0.15.1b/layer3.c
+===================================================================
+--- libmad-0.15.1b.orig/layer3.c
++++ libmad-0.15.1b/layer3.c
+@@ -2608,6 +2608,11 @@ int mad_layer_III(struct mad_stream *str
+     next_md_begin = 0;
+ 
+   md_len = si.main_data_begin + frame_space - next_md_begin;
++  if (md_len + MAD_BUFFER_GUARD > MAD_BUFFER_MDLEN) {
++    stream->error = MAD_ERROR_LOSTSYNC;
++    stream->sync = 0;
++    return -1;
++  }
+ 
+   frame_used = 0;
+ 
+@@ -2625,8 +2630,11 @@ int mad_layer_III(struct mad_stream *str
+       }
+     }
+     else {
+-      mad_bit_init(&ptr,
+-		   *stream->main_data + stream->md_len - si.main_data_begin);
++      memmove(stream->main_data,
++	*stream->main_data + stream->md_len - si.main_data_begin,
++	si.main_data_begin);
++      stream->md_len = si.main_data_begin;
++      mad_bit_init(&ptr, *stream->main_data);
+ 
+       if (md_len > si.main_data_begin) {
+ 	assert(stream->md_len + md_len -
diff --git a/gnu/packages/patches/libvirt-remove-ATTRIBUTE_UNUSED.patch b/gnu/packages/patches/libvirt-remove-ATTRIBUTE_UNUSED.patch
deleted file mode 100644
index 5bfefa70bb..0000000000
--- a/gnu/packages/patches/libvirt-remove-ATTRIBUTE_UNUSED.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From: Tobias Geerinckx-Rice <me@tobias.gr>
-Date: Thu, 25 Jul 2019 21:48:25 +0200
-Subject: [PATCH]: libvirt: remove ATTRIBUTE_UNUSED
-
-This should fix the error reported here[0].  Patch taken verbatim from
-upstream[1].
-
-[0]: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=36634#28
-[1]: https://github.com/libvirt/libvirt/commit/759bf903a6c24a8efa25c7cf4b099d952eda9bd3
-
-From 759bf903a6c24a8efa25c7cf4b099d952eda9bd3 Mon Sep 17 00:00:00 2001
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Mon, 22 Jul 2019 14:46:34 +0200
-Subject: [PATCH] vircgroupv2: remove ATTRIBUTE_UNUSED for used attribute
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Acked-by: Peter Krempa <pkrempa@redhat.com>
----
- src/util/vircgroupv2.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
-index af3192c99c..e36c36685b 100644
---- a/src/util/vircgroupv2.c
-+++ b/src/util/vircgroupv2.c
-@@ -399,7 +399,7 @@ virCgroupV2EnableController(virCgroupPtr group,
- 
- 
- static int
--virCgroupV2MakeGroup(virCgroupPtr parent ATTRIBUTE_UNUSED,
-+virCgroupV2MakeGroup(virCgroupPtr parent,
-                      virCgroupPtr group,
-                      bool create,
-                      unsigned int flags)
diff --git a/gnu/packages/patches/mame-rapidjson-fix.patch b/gnu/packages/patches/mame-rapidjson-fix.patch
new file mode 100644
index 0000000000..70cf8458ea
--- /dev/null
+++ b/gnu/packages/patches/mame-rapidjson-fix.patch
@@ -0,0 +1,37 @@
+From 0b5b13cf1e28550b49c387dec93f9801f029e313 Mon Sep 17 00:00:00 2001
+From: Julian Sikorski <belegdol+github@gmail.com>
+Date: Mon, 5 Aug 2019 21:16:54 +0200
+Subject: [PATCH] Fix building using system rapidjson
+
+---
+ scripts/target/mame/arcade.lua | 1 +
+ src/mame/video/midtunit.cpp    | 4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
+index 964daa3572f..ef30ae3c2c2 100644
+--- a/scripts/target/mame/arcade.lua
++++ b/scripts/target/mame/arcade.lua
+@@ -930,6 +930,7 @@ function createMAMEProjects(_target, _subtarget, _name)
+ 		ext_includedir("flac"),
+ 		ext_includedir("glm"),
+ 		ext_includedir("jpeg"),
++		ext_includedir("rapidjson"),
+ 	}
+ 
+ end
+diff --git a/src/mame/video/midtunit.cpp b/src/mame/video/midtunit.cpp
+index b4cb98abacf..b307f3f722b 100644
+--- a/src/mame/video/midtunit.cpp
++++ b/src/mame/video/midtunit.cpp
+@@ -20,8 +20,8 @@
+ #include "emuopts.h" // Used by PNG logging
+ #include "png.h" // Used by PNG logging
+ 
+-#include "rapidjson/include/rapidjson/prettywriter.h" // Used by JSON logging
+-#include "rapidjson/include/rapidjson/stringbuffer.h" // Used by JSON logging
++#include <rapidjson/prettywriter.h> // Used by JSON logging
++#include <rapidjson/stringbuffer.h> // Used by JSON logging
+ 
+ DEFINE_DEVICE_TYPE(MIDTUNIT_VIDEO, midtunit_video_device, "tunitvid", "Midway T-Unit Video")
+ DEFINE_DEVICE_TYPE(MIDWUNIT_VIDEO, midwunit_video_device, "wunitvid", "Midway W-Unit Video")
diff --git a/gnu/packages/patches/nss-freebl-stubs.patch b/gnu/packages/patches/nss-freebl-stubs.patch
new file mode 100644
index 0000000000..3f7b47b029
--- /dev/null
+++ b/gnu/packages/patches/nss-freebl-stubs.patch
@@ -0,0 +1,20 @@
+This patch is required for Makefile-based builds of NSS 3.45 on armhf-linux.
+
+Taken from upstream bug tracker:
+https://bugzilla.mozilla.org/show_bug.cgi?id=1571316
+
+diff --git a/nss/lib/freebl/ecl/curve25519_32.c b/nss/lib/freebl/ecl/curve25519_32.c
+--- a/nss/lib/freebl/ecl/curve25519_32.c
++++ b/nss/lib/freebl/ecl/curve25519_32.c
+@@ -29,6 +29,10 @@
+  *  1. Convert custom integer types to stdint.h types
+  */
+ 
++#ifdef FREEBL_NO_DEPEND
++#include "../stubs.h"
++#endif
++
+ #include "ecl-priv.h"
+ 
+ /* fe means field element. Here the field is \Z/(2^255-19). An element t,
+
diff --git a/gnu/packages/patches/pcre2-fix-jit_match-crash.patch b/gnu/packages/patches/pcre2-fix-jit_match-crash.patch
new file mode 100644
index 0000000000..7543319ee9
--- /dev/null
+++ b/gnu/packages/patches/pcre2-fix-jit_match-crash.patch
@@ -0,0 +1,25 @@
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Thu, 01 Aug 2019 21:12:52 +0200
+Subject: [PATCH] gnu: pcre2: Fix jit_match crash.
+
+Fixes <https://bugs.exim.org/show_bug.cgi?id=2421>, reported as a ‘secrity
+problem’.
+
+Copied verbatim from upstream[0].
+
+[0]: https://vcs.pcre.org/pcre2/code/trunk/src/pcre2_jit_compile.c?view=patch&r1=1089&r2=1092&pathrev=1092
+
+--- trunk/src/pcre2_jit_compile.c	2019/05/10 13:15:20	1089
++++ trunk/src/pcre2_jit_compile.c	2019/05/13 16:38:18	1092
+@@ -8571,7 +8571,10 @@
+ PCRE2_SPTR bptr;
+ uint32_t c;
+ 
+-GETCHARINC(c, cc);
++/* Patch by PH */
++/* GETCHARINC(c, cc); */
++
++c = *cc++;
+ #if PCRE2_CODE_UNIT_WIDTH == 32
+ if (c >= 0x110000)
+   return NULL;
diff --git a/gnu/packages/patches/scribus-poppler.patch b/gnu/packages/patches/scribus-poppler.patch
deleted file mode 100644
index 9b969e4cb6..0000000000
--- a/gnu/packages/patches/scribus-poppler.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-Fix build with recent Poppler.
-
-From d867ec3c386baaed1b8e076dd70b278863411480 Mon Sep 17 00:00:00 2001
-From: Jean Ghali <jghali@libertysurf.fr>
-Date: Mon, 30 Apr 2018 09:19:33 +0000
-Subject: [PATCH] =?UTF-8?q?#15289:=20FTBFS=201.5.4=20with=20error:=20inval?=
- =?UTF-8?q?id=20conversion=20from=20=E2=80=98const=20GooString*=E2=80=99?=
- =?UTF-8?q?=20to=20=E2=80=98GooString*=E2=80=99?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-git-svn-id: svn://scribus.net/trunk/Scribus@22498 11d20701-8431-0410-a711-e3c959e3b870
----
- scribus/plugins/import/pdf/importpdf.cpp | 2 +-
- scribus/plugins/import/pdf/importpdf.h   | 2 +-
- scribus/plugins/import/pdf/slaoutput.cpp | 2 +-
- scribus/plugins/import/pdf/slaoutput.h   | 2 +-
- 4 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/scribus/plugins/import/pdf/importpdf.cpp b/scribus/plugins/import/pdf/importpdf.cpp
-index c1802861aa..d4c5a9ba49 100644
---- a/scribus/plugins/import/pdf/importpdf.cpp
-+++ b/scribus/plugins/import/pdf/importpdf.cpp
-@@ -1081,7 +1081,7 @@ QRectF PdfPlug::getCBox(int box, int pgNum)
- 	return cRect;

- }

- 

--QString PdfPlug::UnicodeParsedString(GooString *s1)

-+QString PdfPlug::UnicodeParsedString(const GooString *s1)

- {

- 	if ( !s1 || s1->getLength() == 0 )

- 		return QString();

-diff --git a/scribus/plugins/import/pdf/importpdf.h b/scribus/plugins/import/pdf/importpdf.h
-index c8c5efcd0d..5249562692 100644
---- a/scribus/plugins/import/pdf/importpdf.h
-+++ b/scribus/plugins/import/pdf/importpdf.h
-@@ -81,7 +81,7 @@ class PdfPlug : public QObject
- private:
- 	bool convert(const QString& fn);
- 	QRectF getCBox(int box, int pgNum);
--	QString UnicodeParsedString(GooString *s1);
-+	QString UnicodeParsedString(const GooString *s1);
- 	
- 	QList<PageItem*> Elements;
- 	double baseX, baseY;
-diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp
-index be1815dc29..17b6357246 100644
---- a/scribus/plugins/import/pdf/slaoutput.cpp
-+++ b/scribus/plugins/import/pdf/slaoutput.cpp
-@@ -4252,7 +4252,7 @@ void SlaOutputDev::pushGroup(QString maskName, GBool forSoftMask, GBool alpha, b
- 	m_groupStack.push(gElements);

- }

- 

--QString SlaOutputDev::UnicodeParsedString(GooString *s1)

-+QString SlaOutputDev::UnicodeParsedString(const GooString *s1)

- {

- 	if ( !s1 || s1->getLength() == 0 )

- 		return QString();

-diff --git a/scribus/plugins/import/pdf/slaoutput.h b/scribus/plugins/import/pdf/slaoutput.h
-index 20e8b2d311..6698c030e0 100644
---- a/scribus/plugins/import/pdf/slaoutput.h
-+++ b/scribus/plugins/import/pdf/slaoutput.h
-@@ -266,7 +266,7 @@ class SlaOutputDev : public OutputDev
- 	int getBlendMode(GfxState *state);
- 	void applyMask(PageItem *ite);
- 	void pushGroup(QString maskName = "", GBool forSoftMask = gFalse, GBool alpha = gFalse, bool inverted = false);
--	QString UnicodeParsedString(GooString *s1);
-+	QString UnicodeParsedString(const GooString *s1);
- 	bool checkClip();
- 	bool pathIsClosed;
- 	QString CurrColorFill;
diff --git a/gnu/packages/patches/strace-ipc-tests.patch b/gnu/packages/patches/strace-ipc-tests.patch
new file mode 100644
index 0000000000..49341765ca
--- /dev/null
+++ b/gnu/packages/patches/strace-ipc-tests.patch
@@ -0,0 +1,30 @@
+Fix a test failure on some systems.
+
+Taken from upstream:
+https://github.com/strace/strace/commit/4377e3a1535a0ec3a42da8a1366ad6943f4efa0e
+
+diff --git a/tests/gen_tests.in b/tests/gen_tests.in
+index 4a506b94c..4fdf4722c 100644
+--- a/tests/gen_tests.in
++++ b/tests/gen_tests.in
+@@ -168,16 +168,16 @@ ipc_msg-Xabbrev	+ipc.sh -Xabbrev -a26
+ ipc_msg-Xraw	+ipc.sh -Xraw -a16
+ ipc_msg-Xverbose	+ipc.sh -Xverbose -a34
+ ipc_msgbuf-Xabbrev	+ipc_msgbuf.test -Xabbrev
+-ipc_msgbuf-Xraw	+ipc_msgbuf.test -Xraw -a22
++ipc_msgbuf-Xraw	+ipc_msgbuf.test -Xraw -a20
+ ipc_msgbuf-Xverbose	+ipc_msgbuf.test -Xverbose
+ ipc_sem	+ipc.sh -a29
+ ipc_sem-Xabbrev	+ipc.sh -Xabbrev -a29
+ ipc_sem-Xraw	+ipc.sh -Xraw -a19
+ ipc_sem-Xverbose	+ipc.sh -Xverbose -a36
+-ipc_shm	+ipc.sh -a29
+-ipc_shm-Xabbrev	+ipc.sh -Xabbrev -a29
++ipc_shm	+ipc.sh -a26
++ipc_shm-Xabbrev	+ipc.sh -Xabbrev -a26
+ ipc_shm-Xraw	+ipc.sh -Xraw -a19
+-ipc_shm-Xverbose	+ipc.sh -Xverbose -a36
++ipc_shm-Xverbose	+ipc.sh -Xverbose -a34
+ kcmp	-a22
+ kcmp-y	-a22 -y -e trace=kcmp
+ kern_features -a16
diff --git a/gnu/packages/pcre.scm b/gnu/packages/pcre.scm
index 2e3db689f0..91c32d6e5d 100644
--- a/gnu/packages/pcre.scm
+++ b/gnu/packages/pcre.scm
@@ -94,7 +94,7 @@ POSIX regular expression API.")
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/pcre/pcre2/"
                                   version "/pcre2-" version ".tar.bz2"))
-
+              (patches (search-patches "pcre2-fix-jit_match-crash.patch"))
               (sha256
                (base32
                 "1anqi7vpbfzag7imccrc6di1zl5rl63ab7rfpmajpw6d1kzlsl9m"))))
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 7108386a34..6dc8e7b145 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -419,7 +419,7 @@ using the DjVuLibre library.")
 (define-public zathura-pdf-mupdf
   (package
     (name "zathura-pdf-mupdf")
-    (version "0.3.4")
+    (version "0.3.5")
     (source (origin
               (method url-fetch)
               (uri
@@ -427,7 +427,7 @@ using the DjVuLibre library.")
                               "/download/zathura-pdf-mupdf-" version ".tar.xz"))
               (sha256
                (base32
-                "166d5nz47ixzwj4pixsd5fd9qvjf5v34cdqi3p72vr23pswk2hyn"))))
+                "1pjwsb7zwclxsvz229fl7y2saf1pv3ifwv3ay8viqxgrp9x3z9hq"))))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs
      `(("jbig2dec" ,jbig2dec)
@@ -604,7 +604,7 @@ extracting content or merging files.")
 (define-public mupdf
   (package
     (name "mupdf")
-    (version "1.15.0")
+    (version "1.16.1")
     (source
       (origin
         (method url-fetch)
@@ -612,7 +612,7 @@ extracting content or merging files.")
                             name "-" version "-source.tar.xz"))
         (sha256
          (base32
-          "0kmcz3ivxmqmks8vg50ri1zar18q5svk829z0g1kj08lgz7kcl2n"))
+          "1npmy92lkj41nnc14b4fpq7z62pminy94zsdbrczj22jpn283rvg"))
         (modules '((guix build utils)))
         (snippet
          ;; We keep lcms2 since it is different than our lcms.
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index f35a71a41c..a3f6e5d050 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -4082,7 +4082,7 @@ relic support.")
         (base32
          "0h3wfnpv5d4d3f9xzmwkchay6251nhzngdv3f6xia56mj4hxabs0"))))
     (build-system perl-build-system)
-    (inputs
+    (propagated-inputs
      `(("perl-clone-choose" ,perl-clone-choose)))
     (home-page "https://metacpan.org/release/Hash-Merge")
     (synopsis "Merge arbitrarily deep hashes into a single hash")
@@ -9010,15 +9010,15 @@ Tree::Simple::Visitor::* objects.")
 (define-public perl-try-tiny
   (package
     (name "perl-try-tiny")
-    (version "0.22")
+    (version "0.30")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/D/DO/DOY/"
+       (uri (string-append "mirror://cpan/authors/id/E/ET/ETHER/"
                            "Try-Tiny-" version ".tar.gz"))
        (sha256
         (base32
-         "068vdbpacfawc3lkfs0b82xxl27h3l0gj14iada3vlwk8rps9yv0"))))
+         "0szgvlz19yz3mq1lbzmwh8w5dh6agg5s16xv22zrnl83r7ax0nys"))))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Try-Tiny")
     (synopsis "Minimal try/catch with proper preservation of $@@")
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index cbfc2debd8..b445374718 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -70,14 +70,14 @@
 (define-public libraw
   (package
     (name "libraw")
-    (version "0.19.3")
+    (version "0.19.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.libraw.org/data/LibRaw-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0xs1qb6pcvc4c43fy5xi3nkqxcif77gakkw99irf0fc5iccdd5px"))))
+                "07wnzw9k3mwdq9dmpmg94al3ksc065kskfbxkknnmhvrsv2iri8k"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index 62444308db..497989b781 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -58,15 +58,15 @@
 (define-public php
   (package
     (name "php")
-    (version "7.3.6")
+    (version "7.3.8")
     (home-page "https://secure.php.net/")
     (source (origin
               (method url-fetch)
               (uri (string-append home-page "distributions/"
-                                  name "-" version ".tar.xz"))
+                                  "php-" version ".tar.xz"))
               (sha256
                (base32
-                "0r51aiff2abbr3d2swhvja0wm56sjxzqbciabcvvq3m3v9kqkz7y"))
+                "19fm990yl97fq538lkp0m1imbp30qrx7785x211w1n15wqm6n17n"))
               (modules '((guix build utils)))
               (snippet
                '(with-directory-excursion "ext"
@@ -76,7 +76,7 @@
                             ;;"mbstring/libmbfl"
                             ;;"date/lib"
                             ;;"bcmath/libbcmath"
-                            ;;"fileinfo/libmagic" ; This is a patched version of libmagic.
+                            ;;"fileinfo/libmagic" ; a patched version of libmagic
                             '("gd/libgd"
                               "mbstring/oniguruma"
                               "pcre/pcre2lib"
@@ -378,7 +378,7 @@
      `(("pkg-config" ,pkg-config)
        ("bison" ,bison)
        ("intltool" ,intltool)
-       ("procps" ,procps)))         ; For tests.
+       ("procps" ,procps)))             ; for tests
     (synopsis "PHP programming language")
     (description
       "PHP (PHP Hypertext Processor) is a server-side (CGI) scripting
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index b4ea20e387..88bc6b3dc6 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -198,8 +198,7 @@ colors, styles, options and details.")
        ("perl" ,perl)
        ("texinfo" ,texinfo)           ;For generating documentation
        ;; For the manual and the tests.
-       ("texlive" ,(texlive-union (list texlive-fonts-amsfonts
-                                        texlive-latex-amsfonts
+       ("texlive" ,(texlive-union (list texlive-amsfonts
                                         texlive-latex-geometry
                                         texlive-latex-graphics
                                         texlive-latex-oberdiek ; for ifluatex
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 5c71298f70..c8db4c95ce 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -3211,14 +3211,14 @@ provides additional functionality on the produced Mallard documents.")
 (define-public python-cython
   (package
     (name "python-cython")
-    (version "0.29.11")
+    (version "0.29.13")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Cython" version))
        (sha256
         (base32
-         "1866m01ggl2h3rky4hac3m5p048gg4a0jb09ljkknryiqln54fkn"))))
+         "13k37lrcgagwwnzr5bzririsscb793vndj234d475x1h9ad0d7f2"))))
     (build-system python-build-system)
     ;; we need the full python package and not just the python-wrapper
     ;; because we need libpython3.3m.so
@@ -3548,12 +3548,11 @@ color scales, and color space conversion easy.  It has support for:
        ("pkg-config" ,pkg-config)
        ("python-sphinx" ,python-sphinx)
        ("python-numpydoc" ,python-numpydoc)
-       ("texlive" ,(texlive-union (list texlive-fonts-amsfonts
-                                        texlive-fonts-cm-super
+       ("texlive" ,(texlive-union (list texlive-fonts-cm-super
                                         texlive-fonts-ec
                                         texlive-generic-ifxetex
                                         texlive-generic-pdftex
-                                        texlive-latex-amsfonts
+                                        texlive-amsfonts
                                         texlive-latex-capt-of
                                         texlive-latex-cmap
                                         texlive-latex-environ
@@ -3952,7 +3951,7 @@ toolkits.")
        ("python-ipykernel" ,python-ipykernel)
        ("python-mock" ,python-mock)
        ("graphviz" ,graphviz)
-       ("texlive" ,(texlive-union (list texlive-latex-amsfonts
+       ("texlive" ,(texlive-union (list texlive-amsfonts
                                         texlive-latex-amsmath
                                         texlive-latex-enumitem
                                         texlive-latex-expdlist
@@ -3963,7 +3962,6 @@ toolkits.")
 
                                         texlive-generic-pdftex
 
-                                        texlive-fonts-amsfonts
                                         texlive-fonts-ec
                                         texlive-fonts-adobe-times
                                         texlive-fonts-txfonts)))
@@ -5520,11 +5518,10 @@ computing.")
      `(("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-fonts-amsfonts
+       ("texlive" ,(texlive-union (list texlive-amsfonts
                                         texlive-fonts-ec
                                         texlive-generic-ifxetex
                                         texlive-generic-pdftex
-                                        texlive-latex-amsfonts
                                         texlive-latex-capt-of
                                         texlive-latex-cmap
                                         texlive-latex-environ
@@ -8805,20 +8802,24 @@ python-xdo for newer bindings.)")
 (define-public python-mako
   (package
     (name "python-mako")
-    (version "1.0.13")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Mako" version))
        (sha256
         (base32
-         "0h95n0g0k1jwxiqarr09navpfajarvbmpm8mhmw66c25qc675vlm"))))
+         "0jqa3qfpykyn4fmkn0kh6043sfls7br8i2bsdbccazcvk9cijsd3"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda _
+                      (invoke "pytest" "-vv"))))))
     (propagated-inputs
      `(("python-markupsafe" ,python-markupsafe)))
     (native-inputs
      `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
        ("python-pytest" ,python-pytest)))
     (home-page "https://www.makotemplates.org/")
     (synopsis "Templating language for Python")
diff --git a/gnu/packages/regex.scm b/gnu/packages/regex.scm
index 71dac09737..ad01814318 100644
--- a/gnu/packages/regex.scm
+++ b/gnu/packages/regex.scm
@@ -30,7 +30,7 @@
 (define-public re2
    (package
      (name "re2")
-     (version "2019-07-01")
+     (version "2019-08-01")
      (home-page "https://github.com/google/re2")
      (source (origin
                (method git-fetch)
@@ -38,7 +38,7 @@
                (file-name (git-file-name name version))
                (sha256
                 (base32
-                 "1ric6gdnf5mqj5iy5f81al49mr3mmjqj3nqi3mw2hjdbbgwkdn71"))))
+                 "11w9x16y26nfgliis28ivrh9b1x6pxawdwxfwxfjh34h57c0dkzg"))))
      (build-system gnu-build-system)
      (arguments
       `(#:modules ((guix build gnu-build-system)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index d47c2ed07d..1b70f842ae 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -4849,14 +4849,14 @@ alternative to Marshal for Object serialization. ")
 (define-public ruby-pg
   (package
     (name "ruby-pg")
-    (version "1.1.3")
+    (version "1.1.4")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "pg" version))
        (sha256
         (base32
-         "1pnjw3rspdfjssxyf42jnbsdlgri8ylysimp0s28wxb93k6ff2qb"))))
+         "0fmnyxcyrvgdbgq7m09whgn9i8rwfybk0w8aii1nc4g5kqw0k2jy"))))
     (build-system ruby-build-system)
     (arguments
      '(#:test-target "spec"))
@@ -4865,7 +4865,7 @@ alternative to Marshal for Object serialization. ")
        ("ruby-hoe" ,ruby-hoe)
        ("ruby-rspec" ,ruby-rspec)))
     (inputs
-     `(("postgresql" ,postgresql-9.6)))
+     `(("postgresql" ,postgresql)))
     (synopsis "Ruby interface to PostgreSQL")
     (description "Pg is the Ruby interface to the PostgreSQL RDBMS.  It works
 with PostgreSQL 9.0 and later.")
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 4ecac8ab55..33505aa5c7 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -154,14 +154,14 @@ anywhere.")
 (define-public samba
   (package
     (name "samba")
-    (version "4.10.5")
+    (version "4.10.6")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.samba.org/pub/samba/stable/"
                                  "samba-" version ".tar.gz"))
              (sha256
               (base32
-               "0xb3mz38hcayqxchk0ws9mxn10vswsn97jbxl4gcwi4cbrnjc43c"))))
+               "0hpgdqlyczj98pkh2ldglvvnkrb1q541r3qikdvxq0qjvd9fpywy"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/scanner.scm b/gnu/packages/scanner.scm
index d23da9e502..b371cf3105 100644
--- a/gnu/packages/scanner.scm
+++ b/gnu/packages/scanner.scm
@@ -34,15 +34,16 @@
 (define-public sane-backends-minimal
   (package
     (name "sane-backends-minimal")
-    (version "1.0.27")
+    (version "1.0.28")
     (source (origin
              (method url-fetch)
              (uri (string-append
-                   "https://alioth.debian.org/frs/download.php/latestfile/176/"
+                   "https://gitlab.com/sane-project/backends/uploads/"
+                   "9e718daff347826f4cfe21126c8d5091/"
                    "sane-backends-" version ".tar.gz"))
              (sha256
               (base32
-               "1j9nbqspaj0rlgalafb5z6r606k0i22kz0rcpd744p176yzlfdr9"))
+               "00yy8q9hqdf0zjxxl4d8njr9zf0hhi3a9ib23ikc2anqf8zhy9ii"))
              (modules '((guix build utils)))
              (snippet
               ;; Generated HTML files and udev rules normally embed a
@@ -63,6 +64,10 @@
          (add-before 'configure 'disable-backends
            (lambda _
              (setenv "BACKENDS" " ")
+
+             ;; Disable tests that may require back ends to be built.
+             (substitute* "testsuite/Makefile.in"
+               ((" backend ") " "))
              #t))
          (add-after 'unpack 'disable-failing-tests
            (lambda _
@@ -113,6 +118,7 @@ package contains the library, but no drivers.")
     (name "sane-backends")
     (inputs
      `(("hplip" ,(@ (gnu packages cups) hplip-minimal))
+       ("libjpeg" ,libjpeg)             ; wanted by pixma, epsonds, others
        ("libpng" ,libpng)               ; support ‘scanimage --format=png’
        ,@(package-inputs sane-backends-minimal)))
     (arguments
diff --git a/gnu/packages/scribus.scm b/gnu/packages/scribus.scm
index 322a096414..e9c998c7b6 100644
--- a/gnu/packages/scribus.scm
+++ b/gnu/packages/scribus.scm
@@ -48,7 +48,7 @@
 (define-public scribus
   (package
     (name "scribus")
-    (version "1.5.4")
+    (version "1.5.5")
     (source
      (origin
        (method url-fetch)
@@ -56,86 +56,7 @@
                            version "/scribus-" version ".tar.xz"))
        (sha256
         (base32
-         "00ys0p6h3iq77kh72dkl0qrf7qvznq18qdrgiq10gfxja1995034"))
-       (patches (append
-                 ;; Scribus relies heavily on Poppler internals, which have
-                 ;; changed a lot since the latest Scribus release (2018-04).
-                 ;; Thus, we require a bunch of patches to stay compatible.
-                 (search-patches "scribus-poppler.patch")
-                 (list (origin
-                         (method url-fetch)
-                         (uri (string-append
-                               "https://github.com/scribusproject/scribus/commit/"
-                               "7d4ceeb5cac32287769e3c0238699e0b3e56c24d.patch"))
-                         (file-name "scribus-poppler-0.64.patch")
-                         (sha256
-                          (base32
-                           "1kr27bfzkpabrh42nsrrvlqyycdg9isbavpaa5spgmrhidcg02xj")))
-                       (origin
-                         (method url-fetch)
-                         (uri (string-append
-                               "https://github.com/scribusproject/scribus/commit/"
-                               "76561c1a55cd07c268f8f2b2fea888532933700b.patch"))
-                         (file-name "scribus-poppler-config.patch")
-                         (sha256
-                          (base32
-                           "01k18xjj82c3ndzp89dlpfhhdccc8z0acf8b04r592jyr5y9rc19")))
-                       (origin
-                         (method url-fetch)
-                         (uri (string-append
-                               "https://github.com/scribusproject/scribus/commit/"
-                               "8e05d26c19097ac2ad5b4ebbf40a3771ee6faf9c.patch"))
-                         (file-name "scribus-poppler-0.69.patch")
-                         (sha256
-                          (base32
-                           "1avdmsj5l543j0irq18nxgiw99n395jj56ih5dsal59fn0wbqk42")))
-                       (origin
-                         (method url-fetch)
-                         (uri (string-append "https://git.archlinux.org/svntogit/"
-                                             "community.git/plain/trunk/scribus-"
-                                             "poppler-0.70.patch?h=packages/scribus&id="
-                                             "8ef43ee2fceb0753ed5a76bb0a11c84775898ffc"))
-                         (file-name "scribus-poppler-0.70.patch")
-                         (sha256
-                          (base32
-                           "0dw7ix3jaj0y1q97cmmqwb2qgdx760yhxx86wa8rnx0xhfi5x6qr")))
-                       ;; This and the preceding patch are taken from Arch Linux
-                       ;; because they are adjusted for the Scribus release tarball
-                       ;; rather than the upstream master branch.
-                       (origin
-                         (method url-fetch)
-                         (uri (string-append "https://git.archlinux.org/svntogit/"
-                                             "community.git/plain/trunk/scribus-"
-                                             "poppler-0.75.patch?h=packages/scribus&id="
-                                             "4d35c4ad4869c1dcce9243c4786ff303bdd5c601"))
-                         (file-name "scribus-poppler-0.75.patch")
-                         (sha256
-                          (base32
-                           "1lhf2srp7iv44zzdbr3kqa0lfjmm77nalxnx80jqaixhr5yq2s8f")))
-                       (origin
-                         (method url-fetch)
-                         (uri (string-append
-                               "https://github.com/scribusproject/scribus/commit/"
-                               "9449265592a5195153d72c2a511d2010b0cf5b0b.patch"))
-                         (file-name "scribus-poppler-0.76.patch")
-                         (sha256
-                          (base32
-                           "0zghiqra9s6f6v06fdr97gdhiw41zr8r6vqh4ar4yw7rqn2771jd"))))
-                 (search-patches "scribus-poppler-0.73.patch")))
-       ;; The --binary flag is required for 'scribus-poppler-0.75.patch', because
-       ;; we need to retain the CRLF line endings.
-       (patch-flags '("-p1" "--binary"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           (for-each (lambda (file)
-                       (substitute* file
-                         ;; These are required for compatibility with Poppler 0.71.
-                         (("GBool") "bool") (("gTrue") "true") (("gFalse") "false")
-                         ;; ...and this for Poppler 0.72.
-                         (("getCString") "c_str")))
-                     (find-files "scribus/plugins/import/pdf"))
-           #t))))
+         "0w9zzsiaq3f7vpxybk01c9z2b4qqg67mzpyfb2gjchz8dhdb423r"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;no test target
@@ -145,9 +66,9 @@
        (modify-phases %standard-phases
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             ;; Fix "ImportError: No module named _sysconfigdata_nd" where
-             ;; Scribus checks PATH and eventually runs system's Python
-             ;; instead of package's.
+             ;; Fix "ImportError: No module named _sysconfigdata_nd"
+             ;; runtime error where Scribus checks PATH and eventually
+             ;; runs system's Python instead of package's.
              (let* ((out (assoc-ref outputs "out"))
                     (py2 (assoc-ref inputs "python")))
                (wrap-program (string-append out "/bin/scribus")
@@ -188,12 +109,13 @@
     (home-page "https://www.scribus.net")
     (synopsis "Desktop publishing and page layout program")
     (description
-     "Scribus is a @dfn{desktop publishing} (DTP) application and can be used
-for many tasks; from brochure design to newspapers, magazines, newsletters and
-posters to technical documentation.  Scribus supports professional DTP
-features, such as CMYK color and a color management system to soft proof
-images for high quality color printing, flexible PDF creation options,
-Encapsulated PostScript import/export and creation of four color separations,
-import of EPS/PS and SVG as native vector graphics, Unicode text including
-right to left scripts such as Arabic and Hebrew via freetype.")
+     "Scribus is a @dfn{desktop publishing} (DTP) application and can
+be used for many tasks; from brochure design to newspapers, magazines,
+newsletters and posters to technical documentation.  Scribus supports
+professional DTP features, such as CMYK color and a color management
+system to soft proof images for high quality color printing, flexible
+PDF creation options, Encapsulated PostScript import/export and
+creation of four color separations, import of EPS/PS and SVG as native
+vector graphics, Unicode text including right to left scripts such as
+Arabic and Hebrew via FreeType.")
     (license license:gpl2+)))
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index 9b2876c359..d786ad08d9 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -49,14 +49,14 @@
 (define-public xapian
   (package
     (name "xapian")
-    (version "1.4.11")
+    (version "1.4.12")
     ;; Note: When updating Xapian, remember to update xapian-bindings below.
     (source (origin
               (method url-fetch)
               (uri (string-append "https://oligarchy.co.uk/xapian/" version
                                   "/xapian-core-" version ".tar.xz"))
               (sha256
-               (base32 "01xwqljnp5afjf9097lyfbqc6x5bcqszfdkn9l1j86imwbrv45lz"))))
+               (base32 "0z5c1y9vp519h2x2igjq39v6j615nppry0wasd0xn4hphgd3d2jg"))))
     (build-system gnu-build-system)
     (inputs `(("zlib" ,zlib)
               ("util-linux" ,util-linux)))
@@ -94,7 +94,7 @@ rich set of boolean query operators.")
                                   "/xapian-bindings-" version ".tar.xz"))
               (sha256
                (base32
-                "13bi2vr5d39ys49nlwmsv64ik5pdwkz28bh08hyylrhanb45d8wx"))))
+                "0j9awiiw9zf97r60m848absq43k37gghpyw7acxqjazfzd71fxvm"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-python3")
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index 5fb75ce617..3d6ad4f9d7 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -64,7 +64,7 @@
 (define-public ccid
   (package
     (name "ccid")
-    (version "1.4.30")
+    (version "1.4.31")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -72,7 +72,7 @@
                     name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0z7zafdg75fr1adlv2x0zz34s07gljcjg2lsz76s1048w1xhh5xc"))))
+                "1xz8ikr6vk73w3xnwb931yq8lqc1zrj8c3v34n6h63irwjvdfj3b"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list (string-append "--enable-usbdropdir=" %output
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 1900925022..0579c167fc 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -709,18 +709,17 @@ interactive POSIX shell targeted at resource-constrained systems.")
 (define-public mksh
   (package
     (name "mksh")
-    (version "56")
+    (version "57")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R"
                            version ".tgz"))
        (sha256
-        (base32
-         "1x4zjj9259ijpf8jw0nyh1fnr1pbm5fwvylclpvcrlb45xrglf5d"))))
+        (base32 "0xdykm1z710wriwd6nc8s8lwk2dwjl63dq96xxaawlid31a1241x"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; tests require access to /dev/tty
+     `(#:tests? #f                      ; tests require access to /dev/tty
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -744,7 +743,7 @@ interactive POSIX shell targeted at resource-constrained systems.")
 Korn Shell programming language and a successor to the Public Domain Korn
 Shell (pdksh).")
     (license (list miros
-                   isc)))) ; strlcpy.c
+                   isc))))              ; strlcpy.c
 
 (define-public oil-shell
   (package
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index eb5e5b4b76..cdd0caec4a 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -75,6 +75,7 @@
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -180,7 +181,7 @@ This package also provides @command{xls2csv} to export Excel files to CSV.")
 (define r-with-tests
   (package
     (name "r-with-tests")
-    (version "3.6.0")
+    (version "3.6.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cran/src/base/R-"
@@ -188,7 +189,7 @@ This package also provides @command{xls2csv} to export Excel files to CSV.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "02bmylmzrm9sdidirmwy233lghmd2346z725ca71ari68lzarz1n"))))
+                "128kifbq0w25y8aq77w289ddax5i5w2djcfsqgffrb3i7syrxajv"))))
     (build-system gnu-build-system)
     (arguments
      `(#:disallowed-references (,tzdata-for-tests)
@@ -319,9 +320,8 @@ 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-fonts-amsfonts
-                                        texlive-fonts-ec
-                                        texlive-latex-amsfonts
+       ("texlive" ,(texlive-union (list texlive-fonts-ec
+                                        texlive-amsfonts
                                         texlive-latex-base
                                         texlive-latex-fancyvrb
                                         texlive-latex-graphics
@@ -397,14 +397,14 @@ available, greatly increasing its breadth and scope.")
 (define-public r-boot
   (package
     (name "r-boot")
-    (version "1.3-22")
+    (version "1.3-23")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "boot" version))
        (sha256
         (base32
-         "1z2dig1mi76b3b9ck6qlkh07l3hs478gaf70db5nv8x7w2qhq7yg"))))
+         "0bx07zbb5nfz2xfgnzbspg7r5vxz4bjdz1ry4d1vk434vlcrxj1h"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/boot")
     (synopsis "Bootstrap functions for R")
@@ -502,14 +502,14 @@ code for possible problems.")
 (define-public r-foreign
   (package
     (name "r-foreign")
-    (version "0.8-71")
+    (version "0.8-72")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "foreign" version))
        (sha256
         (base32
-         "1mv04w3ycz0ymsszn8aa87k6k5sb8mg8lhf1b8w4zpfrphpkkliv"))))
+         "124c9229is44p2rv7xyh2q86nsfi7vzyyh5n3c5ihziqrp4ig723"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/foreign")
     (synopsis "Read data stored by other statistics software")
@@ -588,14 +588,14 @@ and operations on them using LAPACK and SuiteSparse.")
 (define-public r-nlme
   (package
     (name "r-nlme")
-    (version "3.1-140")
+    (version "3.1-141")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "nlme" version))
        (sha256
         (base32
-         "0k9x5j34fx093a023da9ny3b3101lbwpmfm27mkvfj950l22z88x"))))
+         "0ml00g79bimjcl0sgn6h55l5b4gfmnsnc1vvmivggn0318k4c04i"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-lattice" ,r-lattice)))
@@ -804,13 +804,13 @@ effects of different types of color-blindness.")
 (define-public r-digest
   (package
     (name "r-digest")
-    (version "0.6.19")
+    (version "0.6.20")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "digest" version))
        (sha256
-        (base32 "1x6cbj9qvkk7pxv9xdqibazw3x8psjp6x0m0ildx1jwyb2ymkl98"))))
+        (base32 "1irhk2jaj9cg57cxprgyn1if06x121xwcxh1fzzn3148bl5lnrq5"))))
     (build-system r-build-system)
     ;; Vignettes require r-knitr, which requires r-digest, so we have to
     ;; disable them and the tests.
@@ -1138,13 +1138,13 @@ legends.")
 (define-public r-ggplot2
   (package
     (name "r-ggplot2")
-    (version "3.2.0")
+    (version "3.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggplot2" version))
        (sha256
-        (base32 "1cvk9pw59kxx19kamqwa15h26rbznp0vvqpn7y8kgjssnrzqkdii"))))
+        (base32 "0mjswqiqcwm0aqxll16bx2kwa6c9km3aql87bdj4347n1ali94g3"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-digest" ,r-digest)
@@ -1404,13 +1404,13 @@ data derived from /etc/mime.types in UNIX-type systems.")
 (define-public r-markdown
   (package
     (name "r-markdown")
-    (version "1.0")
+    (version "1.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "markdown" version))
               (sha256
                (base32
-                "19nrz0ba1yd5kicd65crkkz2r3kialm2hm6zdkp495l2s5r80b8p"))))
+                "06zwbrp14bri3470anadd7dvgmw06xf8df6v2pk64wx3f9sd934d"))))
     (build-system r-build-system)
     ;; Skip check phase because the tests require the r-knitr package to be
     ;; installed. This prevents installation failures. Knitr normally
@@ -1418,7 +1418,8 @@ data derived from /etc/mime.types in UNIX-type systems.")
     ;; package.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("r-mime" ,r-mime)))
+     `(("r-mime" ,r-mime)
+       ("r-xfun" ,r-xfun)))
     (home-page "https://github.com/rstudio/markdown")
     (synopsis "Markdown rendering for R")
     (description
@@ -1448,13 +1449,13 @@ emitter (http://pyyaml.org/wiki/LibYAML) for R.")
 (define-public r-knitr
   (package
     (name "r-knitr")
-    (version "1.23")
+    (version "1.24")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "knitr" version))
               (sha256
                (base32
-                "16ba4258c915xydhniw4cw7fvv1vp4cnwd1w49ykx7zw00rznfq6"))))
+                "12bvs9fd61m7k7bq321qzrh2ccl9rq653s1anrvfb9s5ni1j0378"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-evaluate" ,r-evaluate)
@@ -1603,18 +1604,19 @@ R packages that praise their users.")
 (define-public r-testthat
   (package
     (name "r-testthat")
-    (version "2.1.1")
+    (version "2.2.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "testthat" version))
               (sha256
                (base32
-                "03jgr0hlr77yp0aib4v30yjyjrjsa8dczr02yk21m93vl25vqvkp"))))
+                "0y0bvggm4pzkzp6xn7b8cf3ybqp9ijxkhhyp3z49a9iipc90bvk7"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-cli" ,r-cli)
        ("r-crayon" ,r-crayon)
        ("r-digest" ,r-digest)
+       ("r-evaluate" ,r-evaluate)
        ("r-magrittr" ,r-magrittr)
        ("r-praise" ,r-praise)
        ("r-r6" ,r-r6)
@@ -1696,13 +1698,13 @@ and printing capabilities than traditional data frames.")
 (define-public r-dplyr
   (package
     (name "r-dplyr")
-    (version "0.8.1")
+    (version "0.8.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "dplyr" version))
               (sha256
                (base32
-                "1nw12hzk1jcac5879nfmf1yp98jpb3i59qkb8sfpk2cd6zqgfgjz"))))
+                "032c89wa04g9rih9shyvwl3il0bsrv3xk489x6867sk9bb3amd38"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-assertthat" ,r-assertthat)
@@ -1979,13 +1981,13 @@ inference for statistical models.")
 (define-public r-coda
   (package
     (name "r-coda")
-    (version "0.19-2")
+    (version "0.19-3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "coda" version))
               (sha256
                (base32
-                "03fs3sdrrym3is92dgpa6ydk3m63gaihwy7bva4k0wm2hxm7x2k7"))))
+                "1mn50bshky968gn4nf6vnkaa768fnvm1xmhkms7szwdw9341zpyk"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-lattice" ,r-lattice)))
@@ -2021,14 +2023,14 @@ and environmental data in the framework of Euclidean exploratory methods.")
 (define-public r-xml2
   (package
     (name "r-xml2")
-    (version "1.2.0")
+    (version "1.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xml2" version))
        (sha256
         (base32
-         "154lmksfiwkhnlmryas25mjhfg6k4mmnnk7bbb29mnn5x5pr2yha"))))
+         "1x3q3a0xv8j0nx3hs4d3pfjm5g9nvaxmfrapba9f4nrkqi3z2l1h"))))
     (build-system r-build-system)
     (inputs
      `(("libxml2" ,libxml2)
@@ -2136,14 +2138,14 @@ R version.")
 (define-public r-checkmate
   (package
     (name "r-checkmate")
-    (version "1.9.3")
+    (version "1.9.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "checkmate" version))
        (sha256
         (base32
-         "15ccwvmw73c2zz1k10k5zdn8px0rrbnvs1b4nzvlb0iwj7cimhp4"))))
+         "08ddpgs4mv5d5y4j054pm8drmxkn7yvhfpbghwxlizjpnxa5g8ps"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-backports" ,r-backports)))
@@ -2333,14 +2335,14 @@ collation, and NAMESPACE files.")
 (define-public r-openssl
   (package
     (name "r-openssl")
-    (version "1.4")
+    (version "1.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "openssl" version))
        (sha256
         (base32
-         "0mh4xwb9wnn5j2n1zzmjldqjqv2nn4wdidiixxciaqrqsi0l9834"))))
+         "1ihz2qi33lhngl19xdanq0pbmfaacy63794mg8ll7z2lab3yryzp"))))
     (build-system r-build-system)
     (inputs
      `(("libressl" ,libressl)))
@@ -2366,13 +2368,13 @@ integers.")
 (define-public r-httr
   (package
     (name "r-httr")
-    (version "1.4.0")
+    (version "1.4.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "httr" version))
               (sha256
                (base32
-                "0j6vknwyvkjpjsxwch4q02aik4dnm3h4l0wc7dgzc555bm1g2cyn"))))
+                "0mp1il13q6n49n2hv1p2p8x6avjan6dr5az19ql4hb78pc3pwp37"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-curl" ,r-curl)
@@ -2392,20 +2394,16 @@ functions make it easy to control additional request components.")
 (define-public r-git2r
   (package
     (name "r-git2r")
-    (version "0.25.2")
+    (version "0.26.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "git2r" version))
               (sha256
                (base32
-                "15kpvz6ry2r8ii5hzinjwkggc5kgmkbcpsdwzahsf8gha52w80p0"))))
+                "0dbl845sahv2i641ncaf06w06djravwc5wknp9syzx0ad8l0kmhk"))))
     (build-system r-build-system)
-    ;; This R package contains modified sources of libgit2.  This modified
-    ;; version of libgit2 is built as the package is built.  Hence libgit2 is
-    ;; not among the inputs of this package.
     (inputs
-     `(("libssh2" ,libssh2) ; for SSH transport
-       ("openssl" ,openssl)
+     `(("libgit2" ,libgit2)
        ("zlib" ,zlib)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -2438,13 +2436,13 @@ informative error messages when it's not available.")
 (define-public r-devtools
   (package
     (name "r-devtools")
-    (version "2.0.2")
+    (version "2.1.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "devtools" version))
               (sha256
                (base32
-                "028pppj39ng7q17k27531s8k00lmw982vz5krn74n9b8f2azm8lr"))))
+                "0393v7nr22gr5g9afgrhq4ab3lwbqy6fd3shnmlhdpqam5357xy1"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-callr" ,r-callr)
@@ -2457,9 +2455,11 @@ informative error messages when it's not available.")
        ("r-pkgbuild" ,r-pkgbuild)
        ("r-pkgload" ,r-pkgload)
        ("r-rcmdcheck" ,r-rcmdcheck)
+       ("r-roxygen2" ,r-roxygen2)
        ("r-remotes" ,r-remotes)
        ("r-rstudioapi" ,r-rstudioapi)
        ("r-sessioninfo" ,r-sessioninfo)
+       ("r-testthat" ,r-testthat)
        ("r-usethis" ,r-usethis)
        ("r-withr" ,r-withr)))
     (home-page "https://github.com/hadley/devtools")
@@ -2490,18 +2490,19 @@ were originally a part of the r-devtools package.")
 (define-public r-hms
   (package
     (name "r-hms")
-    (version "0.4.2")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "hms" version))
        (sha256
         (base32
-         "1g6hslk3z0xga38r71irxq802wskg6nv804mp8y9f7i2wfrj0y55"))))
+         "06snfqdczr0x0nbp7qnvwhlp2pw0wx9c2y3xb4gr1wrvbik74y58"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-rlang" ,r-rlang)
-       ("r-pkgconfig" ,r-pkgconfig)))
+       ("r-pkgconfig" ,r-pkgconfig)
+       ("r-vctrs" ,r-vctrs)))
     (home-page "https://github.com/rstats-db/hms")
     (synopsis "Pretty time of day")
     (description
@@ -2597,13 +2598,13 @@ well as additional utilities such as panel and axis annotation functions.")
 (define-public r-rcpparmadillo
   (package
     (name "r-rcpparmadillo")
-    (version "0.9.500.2.0")
+    (version "0.9.600.4.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RcppArmadillo" version))
               (sha256
                (base32
-                "1lyvpb7n54ijlqns29qiixqr39334knf67cnixvlic58945glrhv"))))
+                "07jg2667xyhmp1fbcdi5nnhmkk81da76s9rlswfq4k2sjsmbfmr0"))))
     (properties `((upstream-name . "RcppArmadillo")))
     (build-system r-build-system)
     ;; All needed for vignettes
@@ -2695,14 +2696,14 @@ certain criterion, e.g., it contains a certain regular file.")
 (define-public r-rmarkdown
   (package
     (name "r-rmarkdown")
-    (version "1.13")
+    (version "1.14")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "rmarkdown" version))
         (sha256
           (base32
-            "1vv3b8nlw8ra19492rjg3na42lwh3xr5a2jy2ia81fvvs846pywn"))))
+            "0qfw5rkvwqpgix32g6qy9xrr50awmm146aqbm836xravih2b2dpn"))))
     (properties `((upstream-name . "rmarkdown")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2788,17 +2789,18 @@ that package, other packages are unaffected.")
 (define-public r-blob
   (package
     (name "r-blob")
-    (version "1.1.1")
+    (version "1.2.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "blob" version))
               (sha256
                (base32
-                "0lsg91hk508dd95ivig2lwg62qafwnarjw68110kx63cfk4zkjxc"))))
+                "08z071jzac4gasgfgab0y5g3ilfmlw08ln813wphxg07hsiczw8s"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-prettyunits" ,r-prettyunits)
-       ("r-tibble" ,r-tibble)))
+       ("r-rlang" ,r-rlang)
+       ("r-vctrs" ,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
@@ -2810,13 +2812,13 @@ a column in data frame.")
 (define-public r-rsqlite
   (package
     (name "r-rsqlite")
-    (version "2.1.1")
+    (version "2.1.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RSQLite" version))
               (sha256
                (base32
-                "1giwk4335sc6yhj3rs8h070g1mwy38kyqyqv6vcfxvskykj7vp6z"))))
+                "1inrhap5cs0wry2jbw42fx9wwxb3qdzlpy0ba4f6a29bs8jx9nk6"))))
     (properties `((upstream-name . "RSQLite")))
     (build-system r-build-system)
     (propagated-inputs
@@ -3069,14 +3071,14 @@ standard R subsetting and Kronecker products.")
 (define-public r-iterators
   (package
     (name "r-iterators")
-    (version "1.0.10")
+    (version "1.0.12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "iterators" version))
        (sha256
         (base32
-         "1s3iykfvccpnzs73z90rx18qvbvgw2dgl4nfcrvm5m1850qb5qd9"))))
+         "0jwzxaa3jm1xzgfv5pn0xqkk7rhm0xwvgn85w7xaw8xx1vb33gwn"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/iterators")
     (synopsis "Iterator construct for R")
@@ -3089,14 +3091,14 @@ data.")
 (define-public r-foreach
   (package
     (name "r-foreach")
-    (version "1.4.4")
+    (version "1.4.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "foreach" version))
        (sha256
         (base32
-         "0j2yj0rn0d5nbzz9nq5rqqgnxhp9pbd92q4klsarl2xpsn8119y0"))))
+         "0q7iyniw5iri4hl57bhil3r69s5wnaijzn0q0x4h3z42245jqqwm"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-codetools" ,r-codetools)
@@ -3117,14 +3119,14 @@ parallel.")
 (define-public r-doparallel
   (package
     (name "r-doparallel")
-    (version "1.0.14")
+    (version "1.0.15")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "doParallel" version))
        (sha256
         (base32
-         "01qjs4iw9f1kgymcypj0m2s4pvgqhxaycpli0fb8lq3dc0vpzfyb"))))
+         "0vnqbha3gig3awbfvsfx3ni5jir398md1n7xmsb8jihnjsk7xbbi"))))
     (properties `((upstream-name . "doParallel")))
     (build-system r-build-system)
     (propagated-inputs
@@ -3140,14 +3142,14 @@ using the parallel package.")
 (define-public r-domc
   (package
     (name "r-domc")
-    (version "1.3.5")
+    (version "1.3.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "doMC" version))
        (sha256
         (base32
-         "1vfrykvfvsyq12mypd266867ml1dcwc3rj5k9c3wrn5bddcm88kr"))))
+         "1cn9gxavhvjswip8pwvkpi7q6wpzdllcsdjabga8akf55nggqxr9"))))
     (properties `((upstream-name . "doMC")))
     (build-system r-build-system)
     (propagated-inputs
@@ -3163,13 +3165,13 @@ using the multicore functionality of the parallel package.")
 (define-public r-dt
   (package
     (name "r-dt")
-    (version "0.7")
+    (version "0.8")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "DT" version))
               (sha256
                (base32
-                "0b6ywgzk9b35y5f69zwfz3vv7qwqqj3xsmy0xymf7nfcvrqg3qqx"))))
+                "08cfmv3d5awvd9h8648bvidcg2ak5pvl2p6vqwqwy1l82ia506ch"))))
     (properties
      `((upstream-name . "DT")))
     (build-system r-build-system)
@@ -3177,6 +3179,7 @@ using the multicore functionality of the parallel package.")
      `(("r-crosstalk" ,r-crosstalk)
        ("r-htmltools" ,r-htmltools)
        ("r-htmlwidgets" ,r-htmlwidgets)
+       ("r-jsonlite" ,r-jsonlite)
        ("r-magrittr" ,r-magrittr)
        ("r-promises" ,r-promises)))
     (home-page "http://rstudio.github.io/DT")
@@ -3315,14 +3318,14 @@ package registries.")
 (define-public r-rngtools
   (package
     (name "r-rngtools")
-    (version "1.3.1.1")
+    (version "1.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rngtools" version))
        (sha256
         (base32
-         "0k1nlcxggflq0043m15dfclnqnzchkpw2ik7jk82h4dqwvysiqcr"))))
+         "1kivj594bn774lbn29ws2rmzy2km99sza0j3jqvhal6hwmk27a9s"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-digest" ,r-digest)
@@ -4566,19 +4569,19 @@ Farebrother's algorithm or Liu et al.'s algorithm.")
 (define-public r-cowplot
   (package
     (name "r-cowplot")
-    (version "0.9.4")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cowplot" version))
        (sha256
         (base32
-         "0yvalwalvyddyqk0q66y8361nxlh2cvp3ssazax9g5q89lghjmzv"))))
+         "19cqdhgfyr1wj0fz0c5ly8f0aiy9sfgzq6lzb78hkx0hdp2agybh"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ggplot2" ,r-ggplot2)
        ("r-gtable" ,r-gtable)
-       ("r-plyr" ,r-plyr)
+       ("r-rlang" ,r-rlang)
        ("r-scales" ,r-scales)))
     (home-page "https://github.com/wilkelab/cowplot")
     (synopsis "Streamlined plot theme and plot annotations for ggplot2")
@@ -4640,14 +4643,14 @@ regression.")
 (define-public r-fastica
   (package
     (name "r-fastica")
-    (version "1.2-1")
+    (version "1.2-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fastICA" version))
        (sha256
         (base32
-         "108z2ymby5y4h8l4l2krqwm28rya93gq09yylgilnm3afvfrfabg"))))
+         "1zpijqcipm0aa3rxj0mys06lskqy4dbppjpxr1aby0j16y9ka8ij"))))
     (properties `((upstream-name . "fastICA")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/fastICA")
@@ -4749,14 +4752,14 @@ models, generalized linear models and model-based clustering.")
 (define-public r-mclust
   (package
     (name "r-mclust")
-    (version "5.4.4")
+    (version "5.4.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "mclust" version))
        (sha256
         (base32
-         "039ymr57bq5327gypizw0v2qb81j6bkqhjdh8yj23qa5sh51phyc"))))
+         "0whandnda1fnjn5k3hgxdbp3b0xr7nlzy1j37saqb536h8q9dwkm"))))
     (build-system r-build-system)
     (native-inputs
      `(("gfortran" ,gfortran)))
@@ -4919,14 +4922,14 @@ generally.")
 (define-public r-robust
   (package
     (name "r-robust")
-    (version "0.4-18")
+    (version "0.4-18.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "robust" version))
        (sha256
         (base32
-         "1b7qh1aff500nd6dh4y2ipmjgdiq8991shflb63pc39vpc0ny6g4"))))
+         "0xs098pfw5zdcdk3rsxkylfl6d2pyp566s5v92bzhgl7h8c90cfy"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-fit-models" ,r-fit-models)
@@ -5025,14 +5028,14 @@ VGLMs can be loosely thought of as multivariate generalised linear models.")
 (define-public r-pbapply
   (package
     (name "r-pbapply")
-    (version "1.4-0")
+    (version "1.4-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pbapply" version))
        (sha256
         (base32
-         "0bn7a9ni36xy5acnrl9ky3gd1k8jr5kxgazzh3pzd1q6bri1nx7k"))))
+         "1bbws9n90cqnnp5k58hp852jwmm6513jnhn4vzhl9f8x314k6qxk"))))
     (build-system r-build-system)
     (home-page "https://github.com/psolymos/pbapply")
     (synopsis "Adding progress bar to apply functions")
@@ -5138,14 +5141,14 @@ using modular prediction and response module classes.")
 (define-public r-quantreg
   (package
     (name "r-quantreg")
-    (version "5.41")
+    (version "5.51")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "quantreg" version))
        (sha256
         (base32
-         "110ax3ngn6i94h7iw7ha67kfsmj94hycp7lk62nmyvkp34vpfykh"))))
+         "1cdx51a9g6fjq2g9arr6wp6ghkyl2m6bs2dj4kcycvpn8p9304yz"))))
     (build-system r-build-system)
     (native-inputs
      `(("gfortran" ,gfortran)))
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index c35ee8639c..0f81b8804a 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -30,7 +30,7 @@
 (define-public syncthing
   (package
     (name "syncthing")
-    (version "1.2.0")
+    (version "1.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/syncthing/syncthing"
@@ -38,7 +38,7 @@
                                   "/syncthing-source-v" version ".tar.gz"))
               (sha256
                (base32
-                "1l7crhggg2vq4y7pgzsj8wp7k4l9hw5yblflly5bzwywzxz8ff83"))
+                "1b6fidpkwfa2bm6hlv4p0bzxa1ha6s88vajczhryhqi5vjfxafri"))
               (modules '((guix build utils)))
               ;; Delete bundled ("vendored") free software source code.
               (snippet '(begin
@@ -422,7 +422,7 @@ address of the default LAN gateway.")
 (define-public go-github-com-lib-pq
   (package
     (name "go-github-com-lib-pq")
-    (version "1.1.1")
+    (version "1.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -431,7 +431,7 @@ address of the default LAN gateway.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0g64wlg1l1ybq4x44idksl4pgm055s58jxc6r6x4qhqm5q76h0km"))))
+                "08j1smm6rassdssdks4yh9aspa1dv1g5nvwimmknspvhx8a7waqz"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/lib/pq"
@@ -793,8 +793,8 @@ using sh's word-splitting rules.")
       (license expat))))
 
 (define-public go-github-com-syncthing-notify
-  (let ((commit "4e389ea6c0d84e6195eb585ffaf62c8c143306ae")
-        (revision "4"))
+  (let ((commit "69c7a957d3e261f9744f46b3dd4d608d8480ad90")
+        (revision "5"))
     (package
       (name "go-github-com-syncthing-notify")
       (version (git-version "0.0.0" revision commit))
@@ -806,7 +806,7 @@ using sh's word-splitting rules.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "19gvl14s1l9m82f8c2xsjcr8lmbqrvw1mxkayvfcpimvxfz0j61i"))))
+                  "1mmdzyfnmjabyhbipl4bggw4w5nlxyyjp0d93qd824kj07kmsr1f"))))
       (build-system go-build-system)
       (arguments
        '(#:import-path "github.com/syncthing/notify"))
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index df8d1e4b79..9077d295db 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -57,6 +57,7 @@
   #:use-module (gnu packages golang)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
@@ -954,7 +955,7 @@ tmux.")
 (define-public kitty
   (package
     (name "kitty")
-    (version "0.14.2")
+    (version "0.14.3")
     (home-page "https://sw.kovidgoyal.net/kitty/")
     (source
      (origin
@@ -965,7 +966,7 @@ tmux.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "15iv3k7iryf10n8n67d37x24pzcarq97a3dr42lbld00k1lx19az"))
+         "0wi6b6b1nyp16rcpcghk6by62wy6qsamv1xdymyn0zbqgd8h9n6b"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -984,6 +985,7 @@ tmux.")
      `(("python" ,python)
        ("harfbuzz" ,harfbuzz)
        ("zlib" ,zlib)
+       ("libcanberra" ,libcanberra)
        ("libpng" ,libpng)
        ("freetype" ,freetype)
        ("fontconfig" ,fontconfig)
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 10233a05b7..7cb9dd033d 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -66,6 +66,7 @@
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages gawk)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -75,6 +76,154 @@
   #:use-module (ice-9 match)
   #:use-module ((srfi srfi-1) #:hide (zip)))
 
+(define* (simple-texlive-package name locations hash
+                                 #:key trivial?)
+  "Return a template for a simple TeX Live package with the given NAME,
+downloading from a list of LOCATIONS in the TeX Live repository, and expecting
+the provided output HASH.  If TRIVIAL? is provided, all files will simply be
+copied to their outputs; otherwise the TEXLIVE-BUILD-SYSTEM is used."
+  (define with-documentation?
+    (and trivial?
+         (any (lambda (location)
+                (string-prefix? "/doc" location))
+              locations)))
+  (package
+    (name name)
+    (version (number->string %texlive-revision))
+    (source (texlive-origin name version
+                            locations hash))
+    (outputs (if with-documentation?
+                 '("out" "doc")
+                 '("out")))
+    (build-system (if trivial?
+                      gnu-build-system
+                      texlive-build-system))
+    (arguments
+     (let ((copy-files
+            `(lambda* (#:key outputs inputs #:allow-other-keys)
+               (let (,@(if with-documentation?
+                           `((doc (string-append (assoc-ref outputs "doc")
+                                                 "/share/texmf-dist/")))
+                           '())
+                     (out (string-append (assoc-ref outputs "out")
+                                         "/share/texmf-dist/")))
+                 ,@(if with-documentation?
+                       '((mkdir-p doc)
+                         (copy-recursively
+                          (string-append (assoc-ref inputs "source") "/doc")
+                          (string-append doc "/doc")))
+                       '())
+                 (mkdir-p out)
+                 (copy-recursively (assoc-ref inputs "source") out)
+                 ,@(if with-documentation?
+                       '((delete-file-recursively (string-append out "/doc")))
+                       '())
+                 #t))))
+       (if trivial?
+           `(#:tests? #f
+             #:phases
+             (modify-phases %standard-phases
+               (delete 'configure)
+               (replace 'build (const #t))
+               (replace 'install ,copy-files)))
+           `(#:phases
+             (modify-phases %standard-phases
+               (add-after 'install 'copy-files ,copy-files))))))
+    (home-page #f)
+    (synopsis #f)
+    (description #f)
+    (license #f)))
+
+(define hyph-utf8-scripts
+  (origin
+    (method svn-fetch)
+    (uri (texlive-ref "generic" "hyph-utf8"))
+    (file-name (string-append "hyph-utf8-scripts-"
+                              (number->string %texlive-revision)
+                              "-checkout"))
+    (sha256
+     (base32
+      "1ix8h637hwhz4vrdhilf84kzzdza0wi8fp26nh7iws0bq08sl517"))))
+
+(define (texlive-hyphen-package name code locations hash)
+  (let ((parent (simple-texlive-package
+                 name locations hash #:trivial? #t)))
+    (package
+      (inherit parent)
+      (arguments
+       (substitute-keyword-arguments (package-arguments parent)
+         ((#:modules _ '())
+          '((guix build gnu-build-system)
+            (guix build utils)
+            (ice-9 match)))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (root (string-append out "/share/texmf-dist"))
+                        (patterns
+                         (string-append root "/tex/generic/hyph-utf8/patterns/txt/"))
+                        (loaders
+                         (string-append root "/tex/generic/hyph-utf8/loadhyph"))
+                        (ptex
+                         (string-append root "/tex/generic/hyph-utf8/patterns/ptex"))
+                        (filter-expression
+                         (match ',code
+                           ((? string?)
+                            (format #f "\nlanguages.select!{|l| l.code == \"~a\"}\n" ',code))
+                           ((a b ...)
+                            (format #f "\nlanguages.select!{|l| [~{\"~a\",~}].include? l.code }\n" ',code)))))
+                   (mkdir "scripts")
+                   (copy-recursively
+                    (assoc-ref inputs "hyph-utf8-scripts") "scripts")
+
+                   ;; Prepare target directories
+                   (mkdir-p patterns)
+                   (mkdir-p loaders)
+                   (mkdir-p ptex)
+
+                   ;; Generate plain patterns
+                   (with-directory-excursion "scripts"
+                     (substitute* "languages.rb"
+                       (("../../../tex/generic/") "../tex/generic/"))
+                     (substitute* "generate-plain-patterns.rb"
+                       ;; Ruby 2 does not need this.
+                       (("require 'unicode'") "")
+                       (("Unicode.upcase\\(ch\\)") "ch.upcase")
+                       ;; Write directly to the output directory
+                       (("\\$path_root=File.*")
+                        (string-append "$path_root=\"" out "/share/texmf-dist/\"\n"))
+                       ;; Create quote directory when needed
+                       (("f = File.open\\(\"#\\{\\$path_quote\\}" m)
+                        (string-append "require 'fileutils'; FileUtils.mkdir_p $path_quote;" m))
+                       ;; Only generate patterns for this language.
+                       (("languages =.*" m)
+                        (string-append m filter-expression)))
+                     (invoke "ruby" "generate-plain-patterns.rb")
+
+                     ;; Build pattern loaders
+                     (substitute* "generate-pattern-loaders.rb"
+                       (("\\$path_tex_generic=File.*")
+                        (string-append "$path_tex_generic=\"" root "/tex/generic\"\n"))
+                       ;; Only generate loader for this language.
+                       (("languages =.*" m)
+                        (string-append m filter-expression)))
+                     (invoke "ruby" "generate-pattern-loaders.rb")
+
+                     ;; Build ptex patterns
+                     (substitute* "generate-ptex-patterns.rb"
+                       (("\\$path_root=File.*")
+                        (string-append "$path_root=\"" root "\"\n"))
+                       ;; Only generate ptex patterns for this language.
+                       (("languages =.*" m)
+                        (string-append m filter-expression)))
+                     (invoke "ruby" "generate-ptex-patterns.rb")))))))))
+      (native-inputs
+       `(("ruby" ,ruby)
+         ("hyph-utf8-scripts" ,hyph-utf8-scripts)))
+      (home-page "https://ctan.org/pkg/hyph-utf8"))))
+
 (define texlive-extra-src
   (origin
     (method url-fetch)
@@ -122,6 +271,20 @@
    (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
+            "0wrjls1y9b4k1z10l9l8w2l3yjcw7v7by2y16kchdpkiyldlkry6"))))
       ("cairo" ,cairo)
       ("fontconfig" ,fontconfig)
       ("fontforge" ,fontforge)
@@ -247,6 +410,13 @@
                 (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.
@@ -273,99 +443,30 @@ This package contains the binaries.")
    (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
    (home-page "https://www.tug.org/texlive/")))
 
-(define-public texlive-dvips
+
+(define texlive-docstrip
   (package
-    (name "texlive-dvips")
-    (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/"
-                                        "/dvips"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1ky6wc173jhf0b33lhyb4r3bx1d4bmiqkn6y1hxn92kwjdzl42p7"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let* ((root (string-append (assoc-ref %outputs "out")
-                                     "/share/texmf-dist"))
-                (dvips (string-append root "/dvips"))
-                (maps  (string-append root "/fonts/map/dvips"))
-                (encs  (string-append root "/fonts/enc/dvips/base")))
-           (mkdir-p dvips)
-           (copy-recursively (assoc-ref %build-inputs "source") dvips)
-           (mkdir-p maps)
-           (copy-recursively (assoc-ref %build-inputs "dvips-font-maps") maps)
-           (mkdir-p encs)
-           (copy-recursively (assoc-ref %build-inputs "dvips-base-enc") encs)
-           #t))))
-    (native-inputs
-     `(("dvips-font-maps"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/dvips"))
-                 (revision %texlive-revision)))
-           (file-name (string-append "dvips-font-maps-" version "-checkout"))
-           (sha256
-            (base32
-             "0nxvfbb5vsvakiw0iviicghdc2sxk05cj056ilqnpa62fffc36a6"))))
-       ("dvips-base-enc"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/enc/dvips/base"))
-                 (revision %texlive-revision)))
-           (file-name (string-append "dvips-base-enc-" version "-checkout"))
-           (sha256
-            (base32
-             "1xnf6ms0h87r55kxik4vicwr1907scj789lhqflqns8svvsli5iy"))))))
-    (home-page "https://www.ctan.org/pkg/dvips")
-    (synopsis "DVI to PostScript drivers")
-    (description "This package provides files needed for converting DVI files
-to PostScript.")
-    ;; Various free software licenses apply to individual files.
-    (license (list license:lppl1.3c+
-                   license:expat
-                   license:lgpl3+))))
+    (inherit (simple-texlive-package
+              "texlive-docstrip"
+              (list "/tex/latex/base/docstrip.tex")
+              (base32
+               "17vdy43d9vknldz7wb69hp33r8awmdvn4xszamvgs5ikcl4cp289")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/texlive")
+    (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+)))
 
-(define-public texlive-generic-unicode-data
+(define-public texlive-unicode-data
   (package
-    (name "texlive-generic-unicode-data")
-    (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/"
-                                        "/tex/generic/unicode-data"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0r1v16jyfpz6dwqsgm6b9jcj4kf2pkzc9hg07s6fx9g8ba8qglih"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/generic/unicode-data")))
-             (mkdir-p target)
-             (copy-recursively (assoc-ref %build-inputs "source") target)
-             #t))))
+    (inherit (simple-texlive-package
+              "texlive-unicode-data"
+              (list "/tex/generic/unicode-data/"
+                    "/doc/generic/unicode-data/")
+              (base32
+               "1j63kz29arfiydb8r1a53q1r4zyk1yjbcq0w9i93zddczgqzgbfb")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/unicode-data")
     (synopsis "Unicode data and loaders for TeX")
     (description "This bundle provides generic access to Unicode Consortium
@@ -379,68 +480,61 @@ set up and one for initializing XeTeX character classes as has been carried
 out to date by @code{unicode-letters.tex}. ")
     (license license:lppl1.3c+)))
 
-(define-public texlive-generic-dehyph-exptl
+(define-public texlive-generic-unicode-data
+  (deprecated-package "texlive-generic-unicode-data" texlive-unicode-data))
+
+(define-public texlive-hyphen-base
+  (package
+    (inherit (simple-texlive-package
+              "texlive-hyphen-base"
+              (list "/tex/generic/config/language.dat"
+                    "/tex/generic/config/language.dat.lua"
+                    "/tex/generic/config/language.def"
+                    "/tex/generic/config/language.us"
+                    "/tex/generic/config/language.us.def"
+                    "/tex/generic/config/language.us.lua"
+                    "/tex/generic/hyphen/dumyhyph.tex"
+                    "/tex/generic/hyphen/hyphen.tex"
+                    "/tex/generic/hyphen/hypht1.tex"
+                    "/tex/generic/hyphen/zerohyph.tex")
+              (base32
+               "002g5zhzbj3ikgg8zidagdp605ac9f4qmfl148mp0mbpz1svk0ni")
+              #:trivial? #t))
+    (home-page "https://tug.org/texlive/")
+    (synopsis "Core hyphenation support files")
+    (description "This package includes Knuth's original @file{hyphen.tex},
+@file{zerohyph.tex} to disable hyphenation, @file{language.us} which starts
+the autogenerated files @file{language.dat} and @file{language.def} (and
+default versions of those), etc.")
+    (license license:knuth)))
+
+(define-public texlive-dvips
   (package
-    (name "texlive-generic-dehyph-exptl")
-    (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/"
-                                        "/tex/generic/dehyph-exptl"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "03yj1di9py92drp6gpfva6q69vk2iixr79r7cp7ja570s3pr0m33"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/generic/dehyph-exptl")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
-    (home-page "http://projekte.dante.de/Trennmuster/WebHome")
-    (synopsis "Hyphenation patterns for German")
-    (description "The package provides experimental hyphenation patterns for
-the German language, covering both traditional and reformed orthography.  The
-patterns can be used with packages Babel and hyphsubst from the Oberdiek
-bundle.")
-    ;; Hyphenation patterns are under the Expat license; documentation is
-    ;; under LPPL.
-    (license (list license:expat license:lppl))))
+    (inherit (simple-texlive-package
+              "texlive-dvips"
+              (list "/doc/man/man1/afm2tfm.1"
+                    "/doc/man/man1/dvips.1"
+                    "/dvips/base/"
+                    "/dvips/config/"
+                    "/fonts/enc/dvips/base/"
+                    "/tex/generic/dvips/")
+              (base32
+               "1qr7h0ahycmz5wmpv54glfss9jqdmmyymj6kim626d1c8v9bmg86")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/dvips")
+    (synopsis "DVI to PostScript drivers")
+    (description "This package provides files needed for converting DVI files
+to PostScript.")
+    (license license:lppl)))
 
-(define-public texlive-generic-tex-ini-files
+(define-public texlive-tex-ini-files
   (package
-    (name "texlive-generic-tex-ini-files")
-    (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/"
-                                        "/tex/generic/tex-ini-files"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1wh42n1lmzcvi3g6mm31nm3yd5ha5bl260xqc444jg1m9fdp3wz5"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/generic/tex-ini-files")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-tex-ini-files"
+              (list "/tex/generic/tex-ini-files/")
+              (base32
+               "0q1g62jg0qiqslm93ycvm30bw8ydmssjdshzsnzl7n2vpd62qfi2")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/tex-ini-files")
     (synopsis "Files for creating TeX formats")
     (description "This bundle provides a collection of model \".ini\" files
@@ -450,62 +544,8 @@ 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-hyph-utf8
-  (package
-    (name "texlive-generic-hyph-utf8")
-    (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/"
-                                        "/tex/generic/hyph-utf8"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1alnn9cd60m2c12vym9f9q22ap1ngywxpkjl9dk472why44g1dmy"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/generic/hyph-utf8")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
-    (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
-hyphenation patterns in UTF-8 format, whereas older systems require
-hyphenation patterns in the 8-bit encoding of the font in use (such encodings
-are codified in the LaTeX scheme with names like OT1, T2A, TS1, OML, LY1,
-etc).  The present package offers a collection of conversions of existing
-patterns to UTF-8 format, together with converters for use with 8-bit fonts in
-older systems.  Since hyphenation patterns for Knuthian-style TeX systems are
-only read at iniTeX time, it is hoped that the UTF-8 patterns, with their
-converters, will completely supplant the older patterns.")
-    ;; Individual files each have their own license.  Most of these files are
-    ;; independent hyphenation patterns.
-    (license (list license:lppl1.0+
-                   license:lppl1.2+
-                   license:lppl1.3
-                   license:lppl1.3+
-                   license:lppl1.3a+
-                   license:lgpl2.1
-                   license:lgpl2.1+
-                   license:lgpl3+
-                   license:gpl2+
-                   license:gpl3+
-                   license:mpl1.1
-                   license:asl2.0
-                   license:expat
-                   license:bsd-3
-                   license:cc0
-                   license:public-domain
-                   license:wtfpl2))))
+(define-public texlive-generic-tex-ini-files
+  (deprecated-package "texlive-generic-tex-ini-files" texlive-tex-ini-files))
 
 (define-public texlive-metafont-base
   (package
@@ -559,68 +599,108 @@ converters, will completely supplant the older patterns.")
 build fonts using the Metafont system.")
     (license license:knuth)))
 
-(define-public texlive-tex-fontinst-base
-  (package
-    (name "texlive-tex-fontinst-base")
-    (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/"
-                                        "/tex/fontinst/base"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "12gnb8hc45p47pqn31msvi4mpr3wxbbbf2k4xhmshjqykwzlx508"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/fontinst/base")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
-    (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
+(define-public texlive-fontinst
+  (let ((template (simple-texlive-package
+                   "texlive-fontinst"
+                   (list "/doc/fonts/fontinst/"
+                         "/doc/man/man1/fontinst.1"
+                         "/doc/man/man1/fontinst.man1.pdf"
+
+                         ;; This is used to build parts of
+                         ;; /tex/fontinst/{base,misc}/ and
+                         ;; /tex/latex/fontinst/fontdoc.sty.
+                         "/source/fontinst/base/"
+
+                         ;; These are not generated.
+                         "/tex/fontinst/base/bbox.sty"
+                         "/tex/fontinst/base/multislot.sty"
+                         "/tex/fontinst/misc/glyphbox.mtx"
+                         "/tex/fontinst/misc/glyphoff.mtx"
+                         "/tex/fontinst/misc/glyphon.mtx"
+                         "/tex/fontinst/misc/kernoff.mtx"
+                         "/tex/fontinst/misc/kernon.mtx"
+
+                         "/tex/fontinst/latinetx/"
+                         "/tex/fontinst/latinmtx/"
+                         "/tex/fontinst/mathmtx/"
+                         "/tex/fontinst/smblmtx/"
+
+                         "/scripts/texlive/fontinst.sh")
+                   (base32
+                    "09drlb0krhnizw92xlm5wxzzpgn3shcxd684xlg0zc5p16l47w6h")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules _ '())
+          '((guix build gnu-build-system)
+            (guix build utils)
+            (ice-9 match)))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (setenv "TEXINPUTS"
+                         (string-append (getcwd) "//:"
+                                        (getcwd) "/source/fontinst/base//:"
+                                        (assoc-ref inputs "texlive-docstrip") "//"))
+                 (mkdir "build")
+                 (invoke "tex" "-ini" "-interaction=scrollmode"
+                         "-output-directory=build"
+                         "fontinst.ins")))
+             ;; Since we're using docstrip without LaTeX we can't set \UseTDS
+             ;; or \BaseDirectory, so the generated files are just dumped in
+             ;; the "build" directory.
+             (add-after 'install 'install-generated-files
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (root (string-append out "/share/texmf-dist")))
+                   (for-each (match-lambda
+                               ((dir files ...)
+                                (for-each (lambda (file)
+                                            (install-file
+                                             (string-append "build/" file)
+                                             (string-append root dir)))
+                                          files)))
+                             '(("/tex/fontinst/base"
+                                "fontinst.sty"
+                                "cfntinst.sty"
+                                "xfntinst.sty"
+                                "finstmsc.sty"
+                                "fontinst.ini")
+                               ("/tex/fontinst/misc"
+                                "csc2x.tex"
+                                "csckrn2x.tex"
+                                "osf2x.tex")
+                               ("/tex/latex/fontinst"
+                                "fontdoc.sty")))
+                   #t)))))))
+      (native-inputs
+       `(("texlive-bin" ,texlive-bin)
+         ("texlive-docstrip" ,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
 Metric files to TeX metric and virtual font format.  Fontinst helps mainly
 with the number crunching and shovelling parts of font installation.  This
 means in practice that it creates a number of files which give the TeX
 metrics (and related information) for a font family that TeX needs to do any
 typesetting in these fonts.")
-    (license license:lppl1.1+)))
+      (license license:lppl1.1+))))
+
+(define-public texlive-tex-fontinst-base
+  (deprecated-package "texlive-tex-fontinst-base" texlive-fontinst))
 
 (define-public texlive-fontname
   (package
-    (name "texlive-fontname")
-    (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/map/fontname"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "05rbn7z30xawd3n6w7c3ijp2yc67ga220jgqmkla9pd9wx185rzq"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/fonts/map/fontname")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-fontname"
+              (list "/doc/fonts/fontname/fontname.texi"
+                    "/fonts/map/fontname/")
+              (base32
+               "0h5im5rnhycrrkd6z10f17m2caa8lv594wf482b68qjmnxfrqnxj")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fontname")
     (synopsis "Scheme for naming fonts in TeX")
     (description "This is Fontname, a naming scheme for (the base part of)
@@ -629,236 +709,134 @@ from (almost) arbitrarily complex font names, thus helping portability of TeX
 documents.")
     (license license:public-domain)))
 
-(define-public texlive-fonts-cm
-  (package
-    (name "texlive-fonts-cm")
-    (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/cm"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0vfjhidr9pha613h8mfhnpcpvld6ahdfb449918fpsfs93cppkyj"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1)
-                  (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")
-             (mkdir-p "pk/ljfour/public/cm/dpi600")
-             (for-each (lambda (font)
-                         (format #t "building font ~a\n" font)
-                         (invoke "mf" "-progname=mf"
-                                 "-output-directory=build"
-                                 (string-append "\\"
-                                                "mode:=ljfour; "
-                                                "mag:=1+0/600; "
-                                                "batchmode; "
-                                                "input "
-                                                (basename font ".mf")))
-                         (invoke "gftopk"
-                                 (string-append "build/"
-                                                (basename font ".mf") ".600gf")
-                                 (string-append "pk/ljfour/public/cm/dpi600/"
-                                                (basename font ".mf") ".pk")))
-                       (find-files "." "cm(.*[0-9]+.*|inch)\\.mf$"))
-             #t))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out   (assoc-ref outputs "out"))
-                    (fonts (string-append out "/share/texmf-dist/fonts/"))
-                    (pk    (string-append fonts "pk"))
-                    (tfm   (string-append fonts "tfm/public/cm"))
-                    (mf    (string-append fonts "source/public/cm"))
-                    (type1 (string-append fonts "type1/public/amsfonts/cm")))
-               (for-each (cut install-file <> tfm)
-                         (find-files "build" "\\.*"))
-               (for-each (cut install-file <> mf)
-                         (find-files "." "\\.mf"))
-               (copy-recursively "pk" pk)
-               (mkdir-p type1)
-               (copy-recursively (assoc-ref inputs "cm-type1") type1)
-               #t))))))
-    (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
-       ("cm-type1"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/type1/public/amsfonts/cm"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-type1-" version "-checkout"))
-           (sha256
-            (base32
-             "12jyl9jp3hidifa4l5pmi47p71d5mb5kj5rknxkygilix8yz2iy6"))))))
-    (home-page "https://www.ctan.org/pkg/cm")
-    (synopsis "Computer Modern fonts for TeX")
-    (description "This package provides the Computer Modern fonts by Donald
+(define-public texlive-cm
+  (let ((template (simple-texlive-package
+                   "texlive-cm"
+                   (list "/fonts/source/public/cm/"
+                         "/fonts/map/dvips/cm/cmtext-bsr-interpolated.map"
+                         "/doc/fonts/cm/")
+                   (base32
+                    "1h0q71paqmg1xjg6k35ni2i6m93kmlq9rdwm913xg9n4qngywl18")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules 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)
+                 (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) "/fonts/source/public/cm/:"
+                                          mf "/share/texmf-dist/metafont/base")))
+                 (for-each make-file-writable
+                           (cons "fonts/source/public/cm/"
+                                 (find-files "fonts/source/public/cm/" ".*")))
+                 (let ((build (string-append (getcwd) "/build"))
+                       (pkdir (string-append (getcwd) "/pk/ljfour/public/cm/dpi600")))
+                   (mkdir-p pkdir)
+                   (mkdir-p build)
+                   (with-directory-excursion "fonts/source/public/cm/"
+                     (for-each (lambda (font)
+                                 (format #t "building font ~a\n" font)
+                                 (invoke "mf" "-progname=mf"
+                                         (string-append "-output-directory=" build)
+                                         (string-append "\\"
+                                                        "mode:=ljfour; "
+                                                        "mag:=1+0/600; "
+                                                        "scrollmode; "
+                                                        "input "
+                                                        (basename font ".mf")))
+                                 (invoke "gftopk"
+                                         (string-append build "/"
+                                                        (basename font ".mf") ".600gf")
+                                         (string-append pkdir "/"
+                                                        (basename font ".mf") ".pk")))
+                               (find-files "." "cm(.*[0-9]+.*|inch)\\.mf$"))))
+                 #t))
+             (add-after 'install 'install-generated-fonts
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out    (assoc-ref outputs "out"))
+                        (fonts  (string-append out "/share/texmf-dist/fonts/"))
+                        (pk     (string-append fonts "pk"))
+                        (tfm    (string-append fonts "tfm/public/cm")))
+                   (for-each (cut install-file <> tfm)
+                             (find-files "build" "\\.*"))
+                   (copy-recursively "pk" pk)
+                   #t)))))))
+      (native-inputs
+       `(("texlive-bin" ,texlive-bin)
+         ("texlive-metafont-base" ,texlive-metafont-base)))
+      (home-page "https://www.ctan.org/pkg/cm")
+      (synopsis "Computer Modern fonts for TeX")
+      (description "This package provides the Computer Modern fonts by Donald
 Knuth.  The Computer Modern font family is a large collection of text,
 display, and mathematical fonts in a range of styles, based on Monotype Modern
 8A.")
-    (license license:knuth)))
+      (license license:knuth))))
 
-(define-public texlive-fonts-cm-super
-  (package
-    (name "texlive-fonts-cm-super")
-    (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/"
-                                        "/tex/latex/cm-super"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0ybb4gi2rblzpb6wfzm2wk7dj3y2jnmkzsla7mz7g3zc12y4r2b9"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (ice-9 match))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match))
-         (let ((root (string-append (assoc-ref %outputs "out")
-                                    "/share/texmf-dist/"))
-               (pkgs '(("source"         . "tex/latex/cm-super")
-                       ("cm-super-afm"   . "fonts/afm/public/cm-super")
-                       ("cm-super-type1" . "fonts/type1/public/cm-super")
-                       ("cm-super-enc"   . "fonts/enc/dvips/cm-super")
-                       ("cm-super-map"   . "fonts/map/dvips/cm-super")
-                       ("cm-super-vtex"  . "fonts/map/vtex/cm-super"))))
-           (for-each (match-lambda
-                       ((pkg . dir)
-                        (let ((target (string-append root dir)))
-                          (mkdir-p target)
-                          (copy-recursively (assoc-ref %build-inputs pkg)
-                                            target))))
-                     pkgs)
-           #t))))
-    (native-inputs
-     `(("cm-super-vtex"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/vtex/cm-super"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-map-vtex-" version "-checkout"))
-           (sha256
-            (base32
-             "14c9allsgfv6za9wznz4cxqxwz5nsmj8rnwvxams8fhs5rvglxqi"))))
-       ("cm-super-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/public/cm-super"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "048ih65f2nghdabdar2p957c4s2spgllmy2gxdscddwqpnmd26yn"))))
-       ("cm-super-type1"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/type1/public/cm-super"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-type1-" version "-checkout"))
-           (sha256
-            (base32
-             "1140swk3w2ka0y4zdsq6pdifrdanb281q71p5gngbbjxdxjxf4qx"))))
-       ("cm-super-map"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/dvips/cm-super"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-map-" version "-checkout"))
-           (sha256
-            (base32
-             "10r6xqbwf9wk3ylg7givwyrw1952zydc6p7fw29zjf8ijl0lndim"))))
-       ("cm-super-enc"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/enc/dvips/cm-super"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-enc-" version "-checkout"))
-           (sha256
-            (base32
-             "1pgksy96gfgyjxfhs2k04bgg7nr7i128y01kjcahr7n38080h4ij"))))))
-    (home-page "https://www.ctan.org/pkg/cm-super")
-    (synopsis "Computer Modern Super family of fonts")
-    (description "The CM-Super family provides Adobe Type 1 fonts that replace
+(define-public texlive-fonts-cm
+  (deprecated-package "texlive-fonts-cm" texlive-cm))
+
+(define-public texlive-cm-super
+  (let ((template (simple-texlive-package
+                   "texlive-cm-super"
+                   (list "/doc/fonts/cm-super/"
+                         "/dvips/cm-super/"
+                         "/fonts/afm/public/cm-super/"
+                         "/fonts/enc/dvips/cm-super/"
+                         "/fonts/map/dvips/cm-super/"
+                         "/fonts/map/vtex/cm-super/"
+                         "/fonts/type1/public/cm-super/"
+                         "/tex/latex/cm-super/")
+                   (base32
+                    "1k3afl0x0bqbr5mnawbnp7rr2126dwn0vwnxzibm9ggvzqilnkm6")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (delete 'reset-gzip-timestamps)))))
+      (home-page "https://www.ctan.org/pkg/cm-super")
+      (synopsis "Computer Modern Super family of fonts")
+      (description "The CM-Super family provides Adobe Type 1 fonts that replace
 the T1/TS1-encoded Computer Modern (EC/TC), T1/TS1-encoded Concrete,
 T1/TS1-encoded CM bright and LH Cyrillic fonts (thus supporting all European
 languages except Greek), and bringing many ameliorations in typesetting
 quality.  The fonts exhibit the same metrics as the METAFONT-encoded
 originals.")
-    ;; With font exception
-    (license license:gpl2+)))
+      ;; With font exception
+      (license license:gpl2+))))
 
-(define-public texlive-fonts-lm
-  (package
-    (name "texlive-fonts-lm")
-    (version "2.004")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "http://www.gust.org.pl/projects/e-foundry/"
-                                  "latin-modern/download/lm" version "bas.zip"))
-              (sha256
-               (base32
-                "0z2s253y751m2ci5aw8nq0sf2kyg9hpimv2gyixkch9d07m2b9wp"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((root (string-append (assoc-ref %outputs "out")
-                                    "/share/texmf-dist/")))
-           (mkdir-p root)
-           (with-directory-excursion root
-             (invoke (string-append (assoc-ref %build-inputs "unzip")
-                                    "/bin/unzip")
-                     (assoc-ref %build-inputs "source")))
-           #t))))
-    (native-inputs
-     `(("unzip" ,unzip)))
+(define-public texlive-fonts-cm-super
+  (deprecated-package "texlive-fonts-cm-super" texlive-cm-super))
+
+(define-public texlive-lm
+  (package
+    (inherit (simple-texlive-package
+              "texlive-lm"
+              (list "/doc/fonts/lm/"
+                    "/fonts/afm/public/lm/"
+                    "/fonts/enc/dvips/lm/"
+                    "/fonts/map/dvipdfm/lm/"
+                    "/fonts/map/dvips/lm/"
+                    "/fonts/opentype/public/lm/"
+                    "/fonts/tfm/public/lm/"
+                    "/fonts/type1/public/lm/"
+                    "/tex/latex/lm/")
+              (base32
+               "0i1hwr8rp0jqyvs4qyplrirscd4w7lsgwsncyv3yzy80bsa56jq5")
+              #:trivial? #t))
     (home-page "http://www.gust.org.pl/projects/e-foundry/latin-modern/")
     (synopsis "Latin Modern family of fonts")
     (description "The Latin Modern fonts are derived from the famous Computer
@@ -869,6 +847,9 @@ 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-public texlive-fonts-knuth-lib
   (package
     (name "texlive-fonts-knuth-lib")
@@ -971,7 +952,7 @@ fonts.")
                (setenv "MFINPUTS"
                        (string-append (getcwd) ":"
                                       mf "/share/texmf-dist/metafont/base:"
-                                      (assoc-ref inputs "texlive-fonts-cm")
+                                      (assoc-ref inputs "texlive-cm")
                                       "/share/texmf-dist/fonts/source/public/cm")))
              (mkdir "build")
              (for-each (lambda (font)
@@ -1004,7 +985,7 @@ fonts.")
     (native-inputs
      `(("texlive-bin" ,texlive-bin)
        ("texlive-metafont-base" ,texlive-metafont-base)
-       ("texlive-fonts-cm" ,texlive-fonts-cm)))
+       ("texlive-cm" ,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
@@ -1034,67 +1015,17 @@ Knuthian mflogo fonts described in The Metafontbook and to typeset Metafont
 logos in LaTeX documents.")
     (license license:lppl)))
 
-(define-public texlive-fonts-mflogo-font
+(define-public texlive-mflogo-font
   (package
-    (name "texlive-fonts-mflogo-font")
-    (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/type1/hoekwater/mflogo-font"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "09fsxfpiyxjljkrb52b197728bjnkcnv3bdwm4hl6hf23mbmqadf"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (ice-9 match))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match))
-         (let ((root (string-append (assoc-ref %outputs "out")
-                                    "/share/texmf-dist/"))
-               (pkgs '(("source"    . "fonts/type1/hoekwater/mflogo-font")
-                       ("afm"       . "fonts/afm/hoekwater/mflogo-font")
-                       ("fonts-map" . "fonts/map/dvips/mflogo-font"))))
-           (for-each (match-lambda
-                       ((pkg . dir)
-                        (let ((target (string-append root dir)))
-                          (mkdir-p target)
-                          (copy-recursively (assoc-ref %build-inputs pkg)
-                                            target))))
-                     pkgs)
-           #t))))
-    (native-inputs
-     `(("afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/hoekwater/mflogo-font"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "0bx1mfhhzsk9gj1pha36q2rk0jd0y285qm62zgvdvzzzlfnk8sdb"))))
-       ("fonts-map"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/dvips/mflogo-font/"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-fonts-map-" version "-checkout"))
-           (sha256
-            (base32
-             "044xrrpl8hnvj55cx2ql1ib1bcyr33nzanx5nkwxpai7fb7pg4y6"))))))
+    (inherit (simple-texlive-package
+              "texlive-mflogo-font"
+              (list "/doc/fonts/mflogo-font/README"
+                    "/fonts/afm/hoekwater/mflogo-font/"
+                    "/fonts/map/dvips/mflogo-font/"
+                    "/fonts/type1/hoekwater/mflogo-font/")
+              (base32
+               "094mknjv8ki2pvj1zin0f1z4f1w12g0cfqjiqcsawjsry4yfrmbg")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/mflogo-font")
     (synopsis "Metafont logo font")
     (description
@@ -1105,198 +1036,144 @@ source; they have since been autotraced and reissued in Adobe Type 1 format by
 Taco Hoekwater.")
     (license license:knuth)))
 
-(define-public texlive-fonts-amsfonts
-  (package
-    (name "texlive-fonts-amsfonts")
-    (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/amsfonts"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "07h20rvpbdb4k72hzmjkyb29426zr9wxsfp6yd4ajbbpd3vx8grb"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 match)
-                  (srfi srfi-1)
-                  (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-union"))
-                   (cwd (getcwd)))
-               ;; 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 cwd ":"
-                                      cwd "/cmextra:"
-                                      cwd "/cyrillic:"
-                                      cwd "/dummy:"
-                                      cwd "/symbols:"
-                                      mf "/share/texmf-dist/metafont/base:"
-                                      (assoc-ref inputs "texlive-fonts-cm")
-                                      "/share/texmf-dist/fonts/source/public/cm")))
-             (mkdir "build")
-             (for-each (lambda (font)
-                         (format #t "building font ~a\n" (basename font ".mf"))
-                         (with-directory-excursion (dirname font)
-                           (invoke "mf" "-progname=mf"
-                                   "-output-directory=../build"
-                                   (string-append "\\"
-                                                  "mode:=ljfour; "
-                                                  "mag:=1; "
-                                                  "nonstopmode; "
-                                                  "input "
-                                                  (getcwd) "/"
-                                                  (basename font ".mf")))))
-                       (find-files "." "[0-9]+\\.mf$"))
-
-             ;; There are no metafont sources for the Euler fonts, so we
-             ;; convert the afm files instead.
-             (mkdir "build/euler")
-             (for-each (lambda (font)
-                         (format #t "converting afm font ~a\n" (basename font ".afm"))
-                         (invoke "afm2tfm" font
-                                 (string-append "build/euler/"
-                                                (basename font ".tfm"))))
-                       (find-files (assoc-ref inputs "amsfonts-afm")
-                                   "\\.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.
-             (with-directory-excursion "build/euler"
-               (setenv "TEXINPUTS"
-                       (string-append (getcwd) "//:"
-                                      (assoc-ref inputs "amsfonts-afm") "//:"
-                                      (assoc-ref inputs "texlive-union") "//"))
-               (for-each (match-lambda
-                           (((target-base target-size)
-                             (source-base source-size))
-                            (let ((factor (number->string
-                                           (truncate/ (* 1000 target-size)
-                                                      source-size))))
-                              (invoke "tex"
-                                      "-interaction=scrollmode"
-                                      (string-append "\\input fontinst.sty "
-                                                     "\\transformfont{" target-base "}"
-                                                     "{\\scalefont{" factor "}"
-                                                     "{\\fromafm{" source-base "}}} "
-                                                     "\\bye")))
-                            (invoke "pltotf"
-                                    (string-append target-base ".pl")
-                                    (string-append target-base ".tfm"))
-                            (delete-file (string-append target-base ".pl"))))
-
-                         '((("eufm8" 8) ("eufm10" 10))
-
-                           (("eufb6" 6) ("eufb7" 7))
-                           (("eufb8" 8) ("eufb10" 10))
-                           (("eufb9" 9) ("eufb10" 10))
-
-                           (("eufm6" 6) ("eufb7" 7))
-                           (("eufm9" 9) ("eufb10" 10))
-
-                           (("eurb6" 6) ("eurb7" 7))
-                           (("eurb8" 8) ("eurb10" 10))
-                           (("eurb9" 9) ("eurb10" 10))
-
-                           (("eurm6" 6) ("eurm7" 7))
-                           (("eurm8" 8) ("eurm10" 10))
-                           (("eurm9" 9) ("eurm10" 10)))))
-             #t))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out  (assoc-ref outputs "out"))
-                    (root (string-append out "/share/texmf-dist/fonts/"))
-                    (pkgs '(("amsfonts-afm"   . "afm/public/amsfonts")
-                            ("amsfonts-type1" . "type1/public/amsfonts")
-                            ("amsfonts-map"   . "map/dvips/amsfonts"))))
-               (for-each (match-lambda
-                           ((pkg . dir)
-                            (let ((target (string-append root dir)))
-                              (mkdir-p target)
-                              (copy-recursively (assoc-ref inputs pkg)
-                                                target))))
-                         pkgs)
-               (copy-recursively (assoc-ref inputs "amsfonts-plain")
-                                 (string-append out "/share/texmf-dist/tex/plain/amsfonts"))
-               (let* ((tfm (string-append root "tfm/public/amsfonts"))
-                      (mf  (string-append root "source/public/amsfonts")))
-                 (copy-recursively "build" tfm)
-                 (for-each (cut install-file <> mf)
-                           (find-files "." "\\.mf"))
-                 #t)))))))
-    (native-inputs
-     `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
-                                              texlive-fonts-cm
-                                              texlive-metafont-base)))
-       ("amsfonts-plain"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/tex/plain/amsfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-plain-" version "-checkout"))
-           (sha256
-            (base32
-             "1hi8c9rkfb6395sxf7fhkr91xygfg8am1hqij9g3h2c7qx3714qp"))))
-       ("amsfonts-map"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/dvips/amsfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-map-" version "-checkout"))
-           (sha256
-            (base32
-             "1lrj3bd9ybj4aawzlygc6qvakbrwc5s0mc5n9rpic331frv3axfs"))))
-       ("amsfonts-type1"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/type1/public/amsfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-type1-" version "-checkout"))
-           (sha256
-            (base32
-             "1zfz33vn6gm19njy74n8wmn7sljrimfhwns5z8qqhxqfh1g4qip2"))))
-       ("amsfonts-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/public/amsfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "1fifzkaihmjgchnk7dmw0c23k0cz999dxnc78ivmqvgi1dhx0iv8"))))))
-    (home-page "https://www.ctan.org/pkg/amsfonts")
-    (synopsis "TeX fonts from the American Mathematical Society")
-    (description
-     "This package provides an extended set of fonts for use in mathematics,
+(define-public texlive-fonts-mflogo-font
+  (deprecated-package "texlive-fonts-mflogo-font" texlive-mflogo-font))
+
+(define-public texlive-amsfonts
+  (let ((template (simple-texlive-package
+                   "texlive-amsfonts"
+                   (list "/source/latex/amsfonts/"
+                         "/fonts/source/public/amsfonts/"
+                         "/fonts/type1/public/amsfonts/"
+                         "/fonts/afm/public/amsfonts/"
+                         "/fonts/map/dvips/amsfonts/"
+                         "/tex/plain/amsfonts/"
+                         "/doc/fonts/amsfonts/")
+                   (base32
+                    "15q70nkjf8wqzbd5ivcdx3i2sdgqxjb38q0qn9a2qw9i0qcnx6zw"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:build-targets _ #t)
+          '(list "amsfonts.ins"))
+         ((#:tex-directory _ #t)
+          "latex/amsfonts")
+         ((#:modules modules '())
+          `((guix build texlive-build-system)
+            (guix build utils)
+            (ice-9 match)
+            (srfi srfi-1)
+            (srfi srfi-26)))
+         ((#:phases phases)
+          `(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")))
+                   (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$"))))
+
+                 ;; 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)
+                   (with-directory-excursion "fonts/afm/public/amsfonts/"
+                     (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$")))
+
+                   ;; 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 "//:"
+                                          (getcwd) "/fonts/afm/public/amsfonts//:"
+                                          (getcwd) "/source/latex/amsfonts//:"
+                                          (assoc-ref inputs "texlive-union") "//"))
+                   (with-directory-excursion build
+                     (for-each (match-lambda
+                                 (((target-base target-size)
+                                   (source-base source-size))
+                                  (let ((factor (number->string
+                                                 (truncate/ (* 1000 target-size)
+                                                            source-size))))
+                                    (invoke "tex"
+                                            "-interaction=scrollmode"
+                                            (string-append "\\input fontinst.sty "
+                                                           "\\transformfont{" target-base "}"
+                                                           "{\\scalefont{" factor "}"
+                                                           "{\\fromafm{" source-base "}}} "
+                                                           "\\bye")))
+                                  (invoke "pltotf"
+                                          (string-append target-base ".pl")
+                                          (string-append target-base ".tfm"))
+                                  (delete-file (string-append target-base ".pl"))))
+
+                               '((("eufm8" 8) ("eufm10" 10))
+
+                                 (("eufb6" 6) ("eufb7" 7))
+                                 (("eufb8" 8) ("eufb10" 10))
+                                 (("eufb9" 9) ("eufb10" 10))
+
+                                 (("eufm6" 6) ("eufb7" 7))
+                                 (("eufm9" 9) ("eufb10" 10))
+
+                                 (("eurb6" 6) ("eurb7" 7))
+                                 (("eurb8" 8) ("eurb10" 10))
+                                 (("eurb9" 9) ("eurb10" 10))
+
+                                 (("eurm6" 6) ("eurm7" 7))
+                                 (("eurm8" 8) ("eurm10" 10))
+                                 (("eurm9" 9) ("eurm10" 10))))))
+                 #t))
+             (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))))))
+      (native-inputs
+       `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
+                                                texlive-cm
+                                                texlive-metafont-base)))))
+      (home-page "https://www.ctan.org/pkg/amsfonts")
+      (synopsis "TeX fonts from the American Mathematical Society")
+      (description
+       "This package provides an extended set of fonts for use in mathematics,
 including: extra mathematical symbols; blackboard bold letters (uppercase
 only); fraktur letters; subscript sizes of bold math italic and bold Greek
 letters; subscript sizes of large symbols such as sum and product; added sizes
@@ -1306,249 +1183,1549 @@ files, and all except the Euler fonts are provided as Metafont source.  The
 distribution also includes the canonical Type 1 versions of the Computer
 Modern family of fonts.  The Euler fonts are supported by separate packages;
 details can be found in the documentation.")
-    (license license:silofl1.1)))
+      (license license:silofl1.1))))
+
+(define-public texlive-fonts-amsfonts
+  (deprecated-package "texlive-fonts-amsfonts" texlive-amsfonts))
 
 (define-public texlive-latex-amsfonts
+  (deprecated-package "texlive-latex-amsfonts" texlive-amsfonts))
+
+(define-public texlive-mkpattern
   (package
-    (name "texlive-latex-amsfonts")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "amsfonts"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0slzfv5h2m03b2xvm2sasznz4azh6rgi069z161dja3l8rln79hm"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/amsfonts"))
-    (native-inputs
-     `(("texlive-fonts-cm" ,texlive-fonts-cm)
-       ("texlive-metafont-base" ,texlive-metafont-base)))
-    (home-page "https://www.ctan.org/pkg/amsfonts")
-    (synopsis "TeX fonts from the American Mathematical Society")
-    (description
-     "This package provides basic LaTeX support for the symbol fonts provides
-by the amsfonts package.  It provides @code{amsfonts.sty}, with names of
-individual symbols defined in @code{amssymb.sty}.")
-    (license license:silofl1.1)))
+    (inherit (simple-texlive-package
+              "texlive-mkpattern"
+              (list "/doc/plain/mkpattern/README"
+                    "/doc/plain/mkpattern/mkpatdoc.tex"
+                    "/doc/plain/mkpattern/mkpatter.pdf"
+                    "/doc/plain/mkpattern/mkpattern-exmpl.tex"
+                    "/tex/plain/mkpattern/mkpatter.tex")
+              (base32
+               "0sxnkbcc802jl3fj56x9hvg978bpv15lhrwj0aykb4syq29l47ga")
+              #:trivial? #t))
+    (home-page "https://ctan.org/pkg/mkpattern")
+    (synopsis "Utility for making hyphenation patterns")
+    (description "Mkpattern is a general purpose program for the generation of
+hyphenation patterns, with definition of letter sets and template-like
+constructions.  It also provides an easy way to handle different input and
+output encodings, and features generation of clean UTF-8 patterns.")
+    (license license:lppl)))
 
 ;; This provides etex.src which is needed to build various formats, including
 ;; luatex.fmt and pdflatex.fmt
+(define-public texlive-etex
+  (let ((template (simple-texlive-package
+                   "texlive-etex"
+                   (list "/doc/etex/base/"
+                         "/doc/man/man1/etex.1"
+                         "/doc/man/man1/etex.man1.pdf"
+                         "/tex/plain/etex/"
+                         "/fonts/source/public/etex/")
+                   (base32
+                    "1qv6vxm5a8pw38gas3i69ivmsn79zj2yq5n5vdmh0rzic5hw2hmc")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             ;; Build tfm font.
+             (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)
+                                          "/fonts/source/public/etex/:"
+                                          mf "/share/texmf-dist/metafont/base:"
+                                          (assoc-ref inputs "texlive-cm")
+                                          "/share/texmf-dist/fonts/source/public/cm")))
+                 (invoke "mf" "-progname=mf"
+                         (string-append "\\"
+                                        "mode:=ljfour; "
+                                        "mag:=1; "
+                                        "scrollmode; "
+                                        "input xbmc10"))
+                 #t))
+             (add-after 'install 'install-font
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (install-file
+                  "xbmc10.tfm"
+                  (string-append (assoc-ref outputs "out")
+                                 "/share/texmf-dist/fonts/tfm/public/etex/"))
+                 #t))))))
+      (native-inputs
+       `(("texlive-bin" ,texlive-bin)
+         ("texlive-metafont-base" ,texlive-metafont-base)
+         ("texlive-cm" ,texlive-cm)))
+      (home-page "https://www.ctan.org/pkg/etex")
+      (synopsis "Extended version of TeX")
+      (description
+       "This package provides an extended version of TeX (which is capable of
+running as if it were TeX unmodified).  E-TeX has been specified by the LaTeX
+team as the engine for the development of LaTeX2e; as a result, LaTeX
+programmers may assume e-TeX functionality.  The pdftex engine directly
+incorporates the e-TeX extensions.")
+      (license license:knuth))))
+
 (define-public texlive-tex-plain
   (package
-    (name "texlive-tex-plain")
-    (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/"
-                                        "/tex/plain"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1xknlb3gcw6jjqh97bhghxi594bzpj1zfzzfsrr9pvr9s1bx7dnf"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/plain")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-tex-plain"
+              (list "/tex/plain/")
+              (base32
+               "1rrfay4d7lbyj02wlf23mwvbpjd160nwlgryx97hq1vb7dva4swr")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/plain")
     (synopsis "Plain TeX format and supporting files")
     (description
-     "Contains files used to build the Plain TeX format, as described in the
-TeXbook, together with various supporting files (some also discussed in the
-book).")
+     "This package contains files used to build the Plain TeX format, as
+described in the TeXbook, together with various supporting files (some also
+discussed in the book).")
     (license license:knuth)))
 
-(define-public texlive-latex-base
-  (let ((texlive-dir
-         (lambda (dir hash)
-           (origin
-             (method svn-fetch)
-             (uri (svn-reference
-                   (url (string-append "svn://www.tug.org/texlive/tags/"
-                                       %texlive-tag "/Master/texmf-dist/"
-                                       dir))
-                   (revision %texlive-revision)))
-             (file-name (string-append "texlive-generic-"
-                                       (last (string-split
-                                               (string-drop-right dir 1) #\/))
-                                       "-" (number->string %texlive-revision)
-                                       "-checkout"))
-             (sha256 (base32 hash))))))
+(define-public texlive-hyphen-afrikaans
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-afrikaans" "af"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-af.tex")
+              (base32
+               "1vb3jccqnn1pm0680yqx52kvz595fmxnwa0cbf8qman6zglsssiw")))
+    (synopsis "Hyphenation patterns for Afrikaans")
+    (description "The package provides hyphenation patterns for the Afrikaans
+language.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-hyphen-ancientgreek
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-ancientgreek" "grc"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-grc.tex"
+                    "/tex/generic/hyphen/grahyph5.tex"
+                    "/tex/generic/hyphen/ibyhyph.tex")
+              (base32
+               "0kwrqsz7wdr1d9kylzwp60ka3wfbj8iad029k5h6y94nb86mf7zv")))
+    (synopsis "Hyphenation patterns for ancient Greek")
+    (description "The package provides hyphenation patterns for ancient
+Greek.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-hyphen-armenian
+  (let ((template (texlive-hyphen-package
+                   "texlive-hyphen-armenian" "hy"
+                   (list "/source/generic/hyph-utf8/languages/hy/generate_patterns_hy.rb")
+                   (base32
+                    "0z666y580w1kpxssdanz67ykq257lf11a1mnp1jrn08zijvfrw9c"))))
     (package
-      (name "texlive-latex-base")
-      (version (number->string %texlive-revision))
-      (source (origin
-                (method svn-fetch)
-                (uri (texlive-ref "latex" "base"))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "17bqrzzjz16k52sc7ydl4vw7ddy2z3g0p1xsk2c35h1ynq9h3wwm"))))
-      (build-system gnu-build-system)
+      (inherit template)
       (arguments
-       `(#:modules ((guix build gnu-build-system)
-                    (guix build utils)
-                    (ice-9 match)
-                    (srfi srfi-1)
-                    (srfi srfi-26))
-         #:tests? #f                    ; no tests
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)
-           (replace 'build
-             (lambda* (#:key inputs #:allow-other-keys)
-               ;; Find required fonts
-               (setenv "TFMFONTS"
-                       (string-append (assoc-ref inputs "texlive-fonts-cm")
-                                      "/share/texmf-dist/fonts/tfm/public/cm:"
-                                      (assoc-ref inputs "texlive-fonts-latex")
-                                      "/share/texmf-dist/fonts/tfm/public/latex-fonts:"
-                                      (assoc-ref inputs "texlive-fonts-knuth-lib")
-                                      "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
-               (setenv "TEXINPUTS"
-                       (string-append
-                        (getcwd) ":"
-                        (getcwd) "/build:"
-                        (string-join
-                         (map (match-lambda ((_ . dir) dir)) inputs)
-                         "//:")))
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-before 'build 'build-patterns
+               (lambda _
+                 (let ((target (string-append (getcwd)
+                                              "/tex/generic/hyph-utf8/patterns/tex")))
+                   (mkdir-p target)
+                   (with-directory-excursion "source/generic/hyph-utf8/languages/hy/"
+                     (substitute* "generate_patterns_hy.rb"
+                       (("\\$file = File.new.*")
+                        (string-append "$file = File.new(\"" target
+                                       "/hyph-hy.tex\",\"w\")\n")))
+                     (invoke "ruby" "generate_patterns_hy.rb"))
+                   #t)))
+             (add-after 'install 'install-hyph-hy.tex
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (target (string-append out "/share/texmf-dist/tex")))
+                   (copy-recursively "tex" target)
+                   #t)))))))
+      (synopsis "Hyphenation patterns for Armenian")
+      (description "The package provides hyphenation patterns for the Armenian
+language.")
+      ;; Any version of the LGPL.
+      (license license:lgpl3+))))
+
+(define-public texlive-hyphen-basque
+  (let ((template (texlive-hyphen-package
+                    "texlive-hyphen-basque" "eu"
+                    (list "/source/generic/hyph-utf8/languages/eu/generate_patterns_eu.rb")
+                    (base32
+                     "1yhsbzf1g9dm70jfixsz51hsfvn26cwfkfxvhg7xv2piynr4v51l"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-before 'build 'build-patterns
+               (lambda _
+                 (let ((target (string-append (getcwd)
+                                              "/tex/generic/hyph-utf8/patterns/tex")))
+                   (mkdir-p target)
+                   (with-directory-excursion "source/generic/hyph-utf8/languages/eu/"
+                     (substitute* "generate_patterns_eu.rb"
+                       (("\\$file = File.new.*")
+                        (string-append "$file = File.new(\"" target
+                                       "/hyph-eu.tex\",\"w\")\n")))
+                     (invoke "ruby" "generate_patterns_eu.rb"))
+                   #t)))
+             (add-after 'install 'install-hyph-eu.tex
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (target (string-append out "/share/texmf-dist/tex")))
+                   (copy-recursively "tex" target)
+                   #t)))))))
+      (synopsis "Hyphenation patterns for Basque")
+      (description "The package provides hyphenation patterns for the Basque
+language.")
+      ;; "Free for any purpose".
+      (license (license:fsf-free
+                "/source/generic/hyph-utf8/languages/eu/generate_patterns_eu.rb")))))
+
+(define-public texlive-hyphen-belarusian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-belarusian" "be"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-be.tex")
+              (base32
+               "1xvffph824rg43gi2xs3ny9gzlp708fyxj9zfhckmg8pzh9vv3n6")))
+    (synopsis "Hyphenation patterns for Belarusian")
+    (description "The package provides hyphenation patterns for the Belarusian
+language.")
+    (license license:expat)))
+
+(define-public texlive-hyphen-bulgarian
+  (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")
+              (base32
+               "06dxkk9azsggbri04i6g62lswygzadsx3rpqvbyzvbxc5wxz1dj1")))
+    (synopsis "Hyphenation patterns for Bulgarian")
+    (description "The package provides hyphenation patterns for the Bulgarian
+language in T2A and UTF-8 encodings.")
+    (license (license:non-copyleft
+              "file:///tex/generic/hyph-utf8/patterns/tex/hyph-bg.tex"
+              "Ancestral BSD variant"))))
+
+(define-public texlive-hyphen-catalan
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-catalan" "ca"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-ca.tex")
+              (base32
+               "0cisx76jpw8kpd3an37m9h8ppiysnizgfzl48y9d9n3fvx8jyykb")))
+    (synopsis "Hyphenation patterns for Catalan")
+    (description "The package provides hyphenation patterns for Catalan in
+T1/EC and UTF-8 encodings.")
+    (license license:lppl1.0+)))
 
-               ;; Create an empty texsys.cfg, because latex.ltx wants to include
-               ;; it.  This file must exist and it's fine if it's empty.
-               (with-output-to-file "texsys.cfg"
-                 (lambda _ (format #t "%")))
+(define-public texlive-hyphen-chinese
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-chinese" "zh-latn-pinyin"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-zh-latn-pinyin.tex")
+              (base32
+               "07gbrn5fcl5d3hyg1zpai3zp1ggl73cmvpalwvh7ah313f57gjkk")))
+    (synopsis "Hyphenation patterns for unaccented Chinese pinyin")
+    (description "The package provides hyphenation patterns for unaccented
+Chinese pinyin T1/EC and UTF-8 encodings.")
+    (license license:gpl2+)))
 
-               (mkdir "build")
-               (mkdir "web2c")
-               (invoke "luatex" "-ini" "-interaction=batchmode"
-                       "-output-directory=build" "unpack.ins")
-               (invoke "tex" "-ini" "-interaction=batchmode"
-                       "-output-directory=web2c" "tex.ini")
-               ;; LaTeX, pdfetex/pdftex, and XeTeX require e-TeX, which
-               ;; is enabled only in extended mode (activated with a
-               ;; leading asterisk).  We should not use luatex here,
-               ;; because that would make the generated format files
-               ;; incompatible with any other TeX engine.
-               (for-each (lambda (format)
-                           (invoke "latex" "-ini" "-interaction=batchmode"
-                                   "-output-directory=web2c"
-                                   "-translate-file=cp227.tcx"
-                                   (string-append "*" format ".ini")))
-                         '("latex"
-                           "pdflatex"
-                           "pdfetex"))
-               (for-each (lambda (format)
-                           (invoke format "-ini" "-interaction=batchmode"
-                                   "-output-directory=web2c"
-                                   (string-append "*" format ".ini")))
-                         '("xetex"
-                           "xelatex"))
-               (for-each (lambda (format)
-                           (invoke "luatex" "-ini" "-interaction=batchmode"
-                                   "-output-directory=web2c"
-                                   (string-append format ".ini")))
-                         '("dviluatex" "dvilualatex" "luatex" "lualatex"))
-               #t))
-           (replace 'install
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (target (string-append
-                               out "/share/texmf-dist/tex/latex/base"))
-                      (web2c (string-append
-                              out "/share/texmf-dist/web2c"))
-                      (support-files (assoc-ref inputs "texlive-latex-base-support-files")))
-                 (mkdir-p target)
-                 (mkdir-p web2c)
-                 (for-each delete-file (find-files "." "\\.(log|aux)$"))
-                 (for-each (cut install-file <> target)
-                           (find-files "build" ".*"))
-                 (for-each (cut install-file <> web2c)
-                           (find-files "web2c" ".*"))
-                 ;; pdftex is really just the same as pdfetex, but since it
-                 ;; doesn't have its own format file, we need to copy it.
-                 (copy-file "web2c/pdfetex.fmt"
-                            (string-append web2c "/pdftex.fmt"))
-                 ;; "source" is missing the support files as per doc/latex/base/manifest.txt.
-                 ;; FIXME: We are probably not packaging this right.
-                 (for-each (lambda (file)
-                             (install-file
-                              (string-append support-files "/" file)
-                              target))
-                           '("ltxguide.cls" "ltnews.cls" "minimal.cls" "idx.tex"
-                             "lablst.tex" "testpage.tex" "ltxcheck.tex"))
-                 ;; Install configurations
-                 (copy-recursively
-                  (assoc-ref inputs "texlive-latex-latexconfig")
-                  (string-append out "/share/texmf-dist/tex/latex/latexconfig"))
-                 (copy-recursively
-                  (assoc-ref inputs "texlive-generic-config")
-                  (string-append out "/share/texmf-dist/tex/generic/config"))
-                 (copy-recursively
-                  (assoc-ref inputs "texlive-generic-hyphen")
-                  (string-append out "/share/texmf-dist/tex/generic/hyphen"))
-                 (copy-recursively
-                  (assoc-ref inputs "texlive-generic-ruhyphen")
-                  (string-append out "/share/texmf-dist/tex/generic/ruhyphen"))
-                 (copy-recursively
-                  (assoc-ref inputs "texlive-generic-ukrhyph")
-                  (string-append out "/share/texmf-dist/tex/generic/ukrhyph"))
-                 #t))))))
+(define-public texlive-hyphen-churchslavonic
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-churchslavonic" "cu"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-cu.tex")
+              (base32
+               "0xkqlz3ixyl4fxsnzrbxqrb82p0n67rhgpddbiyv3qwfnbr2b5a4")))
+    (synopsis "Hyphenation patterns for Church Slavonic")
+    (description "The package provides hyphenation patterns for Church
+Slavonic in UTF-8 encoding.")
+    (license license:expat)))
+
+(define-public texlive-hyphen-coptic
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-coptic" "cop"
+              (list "/tex/generic/hyph-utf8/patterns/tex-8bit/copthyph.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-cop.tex")
+              (base32
+               "07i03jpdfy4ip7zbg4gnk4hk8zwj8rlni9dgrb1p8mfw2w19d80c")))
+    (synopsis "Hyphenation patterns for Coptic")
+    (description "The package provides hyphenation patterns for Coptic in
+UTF-8 encoding as well as in ASCII-based encoding for 8-bit engines.")
+    ;; No explicit license declaration, so we use the project license.
+    (license license:lppl)))
+
+(define-public texlive-hyphen-croatian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-croatian" "hr"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-hr.tex")
+              (base32
+               "129nz2nqilyq2477n2clx20xfbxh1qxm69zg4n2f6c4d4a8711nc")))
+    (synopsis "Hyphenation patterns for Croatian")
+    (description "The package provides hyphenation patterns for Croatian in
+T1/EC and UTF-8 encodings.")
+    (license license:lppl1.0+)))
+
+(define-public texlive-hyphen-czech
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-czech" "cs"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-cs.tex")
+              (base32
+               "1k5516gbfp1d5p97j247byag9sdgds5zwc11bwxfk58i6zq1v0m6")))
+    (synopsis "Hyphenation patterns for Czech")
+    (description "The package provides hyphenation patterns for Czech in T1/EC
+and UTF-8 encodings.")
+    (license license:gpl2+)))
+
+(define-public texlive-hyphen-danish
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-danish" "da"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-da.tex")
+              (base32
+               "0zxzs1b1723mav76i0wiyq4w82x8715cykvwa2bc60ldc2amv0vs")))
+    (synopsis "Hyphenation patterns for Danish")
+    (description "The package provides hyphenation patterns for Danish in
+T1/EC and UTF-8 encodings.")
+    ;; Either LPPL 1.3 or later, or Expat
+    (license (list license:lppl1.3+ license:expat))))
+
+(define-public texlive-hyphen-dutch
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-dutch" "nl"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-nl.tex")
+              (base32
+               "0cq46cmgjc4y2x0xs9b0a5zca3jmszv4rkzmrhgjb5z2nm3xkrpi")))
+    (synopsis "Hyphenation patterns for Dutch")
+    (description "The package provides hyphenation patterns for Dutch in T1/EC
+and UTF-8 encodings.")
+    (license license:lppl1.0+)))
+
+(define-public texlive-hyphen-english
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-english" '("en-gb" "en-us")
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-en-gb.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-en-us.tex")
+              (base32
+               "08hyih8hn2w2q12gc4zygz0ckbz00mkzzn9898z2bicky02zg3kc")))
+    (synopsis "Hyphenation patterns for American and British English")
+    (description "The package provides additional hyphenation patterns for
+American and British English in ASCII encoding.")
+    (license (license:non-copyleft
+              "file:///tex/generic/hyph-utf8/patterns/tex/hyph-en-us.tex"
+              "FSF all permissive license"))))
+
+(define-public texlive-hyphen-esperanto
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-esperanto" "eo"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-eo.tex")
+              (base32
+               "03xbjbzasznsyf4wd45bya6f4snfmzpdzg5zpvqj5q6gjykdg54k")))
+    (synopsis "Hyphenation patterns for Esperanto")
+    (description "The package provides hyphenation patterns for Esperanto ISO
+Latin 3 and UTF-8 encodings.")
+    (license license:lppl1.0+)))
+
+(define-public texlive-hyphen-estonian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-estonian" "et"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-et.tex")
+              (base32
+               "0idl6xajkkgxqngjn19jcfd29is5rhfn59v0z8h4sv8yjv6k934m")))
+    (synopsis "Hyphenation patterns for Estonian")
+    (description "The package provides hyphenation patterns for Estonian in
+T1/EC and UTF-8 encodings.")
+    ;; Dual licensed under either license.
+    (license (list license:lppl1.3+ license:expat))))
+
+(define-public texlive-hyphen-ethiopic
+  (let ((template (texlive-hyphen-package
+                   "texlive-hyphen-ethiopic" "mul-ethi"
+                   (list "/source/generic/hyph-utf8/languages/mul-ethi/generate_patterns_mul-ethi.lua")
+                   (base32
+                    "1dp5qn1mhv62kj27lqc7s0ca65z9bziyavkvif9ds5ivk7aq9drw"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-before 'build 'build-patterns
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((tex (string-append (getcwd)
+                                           "/tex/generic/hyph-utf8/patterns/tex/")))
+                   (mkdir-p tex)
+                   (with-directory-excursion "source/generic/hyph-utf8/languages/mul-ethi/"
+                     (substitute* "generate_patterns_mul-ethi.lua"
+                       (("\"UnicodeData.txt\"")
+                        (string-append "\""
+                                       (assoc-ref inputs "UnicodeData.txt")
+                                       "\"")))
+                     (invoke "texlua" "generate_patterns_mul-ethi.lua")
+                     (rename-file "hyph-mul-ethi.tex"
+                                  (string-append tex "/hyph-mul-ethi.tex"))
+                     #t))))
+             (add-after 'install 'install-hyph-mul-ethi.tex
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (target (string-append out "/share/texmf-dist/tex")))
+                   (copy-recursively "tex" target)
+                   #t)))))))
       (native-inputs
-       `(("texlive-bin" ,texlive-bin)
-         ("texlive-generic-unicode-data" ,texlive-generic-unicode-data)
-         ("texlive-generic-dehyph-exptl" ,texlive-generic-dehyph-exptl)
-         ("texlive-generic-tex-ini-files" ,texlive-generic-tex-ini-files)
-         ("texlive-latex-latexconfig"
-          ,(texlive-dir "tex/latex/latexconfig/"
-                        "1zb3j49cj8p75yph6c8iysjp7qbdvghwf0mn9j0l7qq3qkbz2xaf"))
-         ("texlive-generic-hyphen"
-          ,(texlive-dir "tex/generic/hyphen/"
-                        "0xim36wybw2625yd0zwlp9m2c2xrcybw58gl4rih9nkph0wqwwhd"))
-         ("texlive-generic-ruhyphen"
-          ,(texlive-dir "tex/generic/ruhyphen/"
-                        "14rjkpl4zkjqs13rcf9kcd24mn2kx7i1jbdwxq8ds94bi66ylzsd"))
-         ("texlive-generic-ukrhyph"
-          ,(texlive-dir "tex/generic/ukrhyph/"
-                        "1cfwdg2rhbayl3w0x1xqd36d45zbc96f029myp13s7cb6kbmbppv"))
-         ("texlive-generic-config"
-          ,(texlive-dir "tex/generic/config/"
-                        "1v90iihy112q93zdpblpdk8zv8rf99fgslsg06s1sxm27zjm9nap"))
-         ("texlive-latex-base-support-files"
+       `(,@(package-native-inputs template)
+         ("texlive-bin" ,texlive-bin)
+         ("UnicodeData.txt"
           ,(origin
-             (method svn-fetch)
-             (uri (svn-reference
-                   (url (string-append "svn://www.tug.org/texlive/tags/"
-                                       %texlive-tag "/Master/texmf-dist/"
-                                       "/tex/latex/base"))
-                   (revision %texlive-revision)))
-             (file-name (string-append name "-" version "-checkout"))
+             (method url-fetch)
+             (uri (string-append "http://www.unicode.org/Public/10.0.0/ucd/"
+                                 "UnicodeData.txt"))
              (sha256
               (base32
-               "18wy8dlcw8adl6jzqwbg54pdwlhs8hilnfvqbw6ikj6y3zhqkj7q"))))
-         ("texlive-tex-plain" ,texlive-tex-plain)
-         ("texlive-fonts-cm" ,texlive-fonts-cm)
-         ("texlive-fonts-latex" ,texlive-fonts-latex)
-         ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)))
-      (propagated-inputs
-       `(("texlive-generic-hyph-utf8" ,texlive-generic-hyph-utf8)))
-      (home-page "https://www.ctan.org/pkg/latex-base")
-      (synopsis "Base sources of LaTeX")
-      (description
-       "This bundle comprises the source of LaTeX itself, together with several
+               "1cfak1j753zcrbgixwgppyxhm4w8vda8vxhqymi7n5ljfi6kwhjj"))))))
+      (synopsis "Hyphenation patterns for Ethiopic scripts")
+      (description "The package provides hyphenation patterns for languages
+written using the Ethiopic script for Unicode engines.  They are not supposed
+to be linguistically relevant in all cases and should, for proper typography,
+be replaced by files tailored to individual languages.")
+      (license license:lppl))))
+
+(define-public texlive-hyphen-finnish
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-finnish" "fi"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-fi.tex")
+              (base32
+               "03n6s8dwwa5vfk9bbyhcdf7p0bc0d1rrr312hpgbz8jfc9fbgd7n")))
+    (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-french
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-french" "fr"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-fr.tex")
+              (base32
+               "1q82mmwvy7fdkm42958ajb53w89qkcdwybswxlwcvqngvhpy3zf0")))
+    (synopsis "Hyphenation patterns for French")
+    (description "The package provides hyphenation patterns for French in
+T1/EC and UTF-8 encodings.")
+    (license license:expat)))
+
+(define-public texlive-hyphen-friulan
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-friulan" "fur"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-fur.tex")
+              (base32
+               "07m975p0ghzs9sjqqgxy7qdkqmgvg4rx4xp08zwm1parqsdlwd5d")))
+    (synopsis "Hyphenation patterns for Friulan")
+    (description "The package provides hyphenation patterns for Friulan in
+ASCII encodings.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-hyphen-galician
+  (let ((template (texlive-hyphen-package
+                   "texlive-hyphen-galician" "gl"
+                   (list "/source/generic/hyph-utf8/languages/gl/README"
+                         "/source/generic/hyph-utf8/languages/gl/glhybiox.tex"
+                         "/source/generic/hyph-utf8/languages/gl/glhyextr.tex"
+                         "/source/generic/hyph-utf8/languages/gl/glhymed.tex"
+                         "/source/generic/hyph-utf8/languages/gl/glhyquim.tex"
+                         "/source/generic/hyph-utf8/languages/gl/glhytec.tex"
+                         "/source/generic/hyph-utf8/languages/gl/glhyxeog.tex"
+                         "/source/generic/hyph-utf8/languages/gl/glpatter-utf8.tex")
+                   (base32
+                    "1yj1gxhkqqlyaand5gd6ij6xwffskryzlbcigdam3871a9p8x18w"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-before 'build 'build-patterns
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((tex (string-append (getcwd)
+                                           "/tex/generic/hyph-utf8/patterns/tex/")))
+                   (mkdir-p tex)
+                   (with-directory-excursion "source/generic/hyph-utf8/languages/gl/"
+                     (setenv "TEXINPUTS"
+                             (string-append (getcwd) "//:"
+                                            (assoc-ref inputs "texlive-mkpattern") "//"))
+                     (invoke "tex" "-ini" "-8bit" "glpatter-utf8.tex")
+                     (rename-file "hyph-gl.tex"
+                                  (string-append tex "/hyph-gl.tex"))
+                     #t))))
+             (add-after 'install 'install-hyph-gl.tex
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (target (string-append out "/share/texmf-dist/tex")))
+                   (copy-recursively "tex" target)
+                   #t)))))))
+      (native-inputs
+       `(,@(package-native-inputs template)
+         ("texlive-bin" ,texlive-bin)
+         ("texlive-mkpattern" ,texlive-mkpattern)))
+      (synopsis "Hyphenation patterns for Galician")
+      (description "The package provides hyphenation patterns for Galician in
+T1/EC and UTF-8 encodings.")
+      ;; glhyextr.tex is the only file in the public domain.
+      (license (list license:lppl1.3 license:public-domain)))))
+
+(define-public texlive-hyphen-georgian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-georgian" "ka"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-ka.tex")
+              (base32
+               "01zhn6mflpiqw4lyi8dx8syiz5mky9jrxm87cgw31hanis5cml4l")))
+    (synopsis "Hyphenation patterns for Georgian")
+    (description "The package provides hyphenation patterns for Georgian in
+T8M, T8K, and UTF-8 encodings.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-hyphen-german
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-german" '("de-1901" "de-1996" "de-ch-1901")
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-de-1901.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-de-1996.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-de-ch-1901.tex"
+                    "/tex/generic/hyphen/dehyphn.tex"
+                    "/tex/generic/hyphen/dehypht.tex"
+                    "/tex/generic/hyphen/dehyphtex.tex"
+                    "/tex/generic/hyphen/ghyphen.README")
+              (base32
+               "1g0vhpvl2l69rn2lx7lkw0inrjbcxkj2sjgwd2fq7hdi4yb2ms76")))
+    (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
+Swiss German.")
+    ;; The patterns are released under the Expat license; the dehyph* files
+    ;; are released under the LPPL version 1 or later.
+    (license (list license:expat license:lppl1.0+))))
+
+(define-public texlive-hyphen-greek
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-greek" '("el-monoton" "el-polyton")
+              (list "/doc/generic/elhyphen/"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-el-monoton.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-el-polyton.tex"
+                    "/tex/generic/hyphen/grmhyph5.tex"
+                    "/tex/generic/hyphen/grphyph5.tex")
+              (base32
+               "04626jhlrv2flgdygm7sfv6xpqhfwiavi16gy2ac04iliyk4rypg")))
+    (synopsis "Hyphenation patterns for Greek")
+    (description "This package provides hyphenation patterns for Modern Greek
+in monotonic and polytonic spelling in LGR and UTF-8 encodings.")
+    (license license:lppl)))
+
+(define-public texlive-hyphen-hungarian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-hungarian" "hu"
+              (list "/doc/generic/huhyphen/"
+                    "/doc/generic/hyph-utf8/hu/"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-hu.tex")
+              (base32
+               "0c81w2569cqsi4j56azwz0lfx16541zhiqgmn3m4iwh7mpx3rji8")))
+    (synopsis "Hyphenation patterns for Hungarian")
+    (description "This package provides hyphenation patterns for Hungarian in
+T1/EC and UTF-8 encodings.")
+    ;; Any of these licenses
+    (license (list license:gpl2 license:lgpl2.1+ license:mpl1.1))))
+
+(define-public texlive-hyphen-icelandic
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-icelandic" "is"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-is.tex")
+              (base32
+               "1ah1f82lgfhqgid4ngsfiypybx10v8gwxnb12396vfsj3bq6j0ba")))
+    (synopsis "Hyphenation patterns for Icelandic")
+    (description "This package provides hyphenation patterns for Icelandic in
+T1/EC and UTF-8 encodings.")
+    (license license:lppl1.2+)))
+
+(define-public texlive-hyphen-indic
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-indic"
+              '("as" "bn" "gu" "hi" "kn" "ml" "mr" "or" "pa" "ta" "te")
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-as.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-bn.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-gu.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-hi.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-kn.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-ml.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-mr.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-or.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-pa.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-ta.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-te.tex")
+              (base32
+               "1v8zc3wdbkhzjrflndmz4gdj11syz8vrcg0vwvm5bwhkx23g91lv")))
+    (synopsis "Indic hyphenation patterns")
+    (description "This package provides hyphenation patterns for Assamese,
+Bengali, Gujarati, Hindi, Kannada, Malayalam, Marathi, Oriya, Panjabi, Tamil
+and Telugu for Unicode engines.")
+    (license license:expat)))
+
+(define-public texlive-hyphen-indonesian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-indonesian" "id"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-id.tex")
+              (base32
+               "0mf0hr9c952kb2hmzid7fqg5whshwpribbyndb3ba092wh02abh5")))
+    (synopsis "Indonesian hyphenation patterns")
+    (description "This package provides hyphenation patterns for
+Indonesian (Bahasa Indonesia) in ASCII encoding.  They are probably also
+usable for Malay (Bahasa Melayu).")
+    (license license:gpl2)))
+
+(define-public texlive-hyphen-interlingua
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-interlingua" "ia"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-ia.tex")
+              (base32
+               "1aihgma3rix4jkc1z5k1lh6hlfrncn66yj0givd3j6xjqflafr2g")))
+    (synopsis "Interlingua hyphenation patterns")
+    (description "This package provides hyphenation patterns for Interlingua
+in ASCII encoding.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-hyphen-irish
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-irish" "ga"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-ga.tex")
+              (base32
+               "02k1fykgj3xamczjq16i9fsjjsh78pp5ypmh93p64izk2vymfwk0")))
+    (synopsis "Irish hyphenation patterns")
+    (description "This package provides hyphenation patterns for
+Irish (Gaeilge) in T1/EC and UTF-8 encodings.")
+    ;; Either of these licenses
+    (license (list license:gpl2+ license:expat))))
+
+(define-public texlive-hyphen-italian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-italian" "it"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-it.tex")
+              (base32
+               "1a65q3hjn2p212cgv6p7wa0wcn34qnxcz2pl3v3ip0xmb16qqsk5")))
+    (synopsis "Italian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Italian in
+ASCII encoding.  Compliant with the Recommendation UNI 6461 on hyphenation
+issued by the Italian Standards Institution (Ente Nazionale di Unificazione
+UNI).")
+    (license license:lppl1.3+)))
+
+(define-public texlive-hyphen-kurmanji
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-kurmanji" "kmr"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-kmr.tex")
+              (base32
+               "1145ykfd0b0hgklindlxdgkqmsnj3cai3cwgllz411yqmrhjc6y9")))
+    (synopsis "Kurmanji hyphenation patterns")
+    (description "This package provides hyphenation patterns for
+Kurmanji (Northern Kurdish) as spoken in Turkey and by the Kurdish diaspora in
+Europe, in T1/EC and UTF-8 encodings.")
+    (license license:lppl1.3)))
+
+(define-public texlive-hyphen-latin
+  (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")
+              (base32
+               "1d8d6b47r4r000gqgzyl0sy9is0y0dg41jp8fw4gqq8qmcgdxgsg")))
+    (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
+when v is needed), medieval spelling with the ligatures @code{\\ae} and
+@code{\\oe} and the (uncial) lowercase 'v' written as a 'u' is also supported.
+Apparently there is no conflict between the patterns of modern Latin and those
+of medieval Latin.  It also includes hyphenation patterns for the Classical
+Latin in T1/EC and UTF-8 encodings.  Classical Latin hyphenation patterns are
+different from those of 'plain' Latin, the latter being more adapted to modern
+Latin.  It also provides hyphenation patterns for the Liturgical Latin in
+T1/EC and UTF-8 encodings.")
+    ;; Either of these licenses
+    (license (list license:lppl1.0+ license:expat))))
+
+(define-public texlive-hyphen-latvian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-latvian" "lv"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-lv.tex")
+              (base32
+               "1xbh5s6nwfjbv7g4kmcpjkm02a6s767p7jn9qjcnz5ip0ndl5g66")))
+    (synopsis "Latvian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Latvian in
+L7X and UTF-8 encodings.")
+    ;; Either of these licenses.
+    (license (list license:gpl2 license:lgpl2.1))))
+
+(define-public texlive-hyphen-lithuanian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-lithuanian" "lt"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-lt.tex")
+              (base32
+               "0v9spw0qkygkihj5app2immzqqr98w81pz460bcgvj1ah35jdfsl")))
+    (synopsis "Lithuanian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Lithuanian in
+L7X and UTF-8 encodings.")
+    ;; "Do ... whatever ... as long as you respect the copyright"; as part of
+    ;; the hyph-utf8 package we choose the LPPL license.
+    (license license:lppl)))
+
+(define-public texlive-hyphen-mongolian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-mongolian" '("mn-cyrl-x-lmc" "mn-cyrl")
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-mn-cyrl-x-lmc.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-mn-cyrl.tex")
+              (base32
+               "0lqq3jgwgnclb1cn3x99xmk90xra9q51b00ypwy5crssmy023hqc")))
+    (synopsis "Mongolian hyphenation patterns in Cyrillic script")
+    (description "This package provides hyphenation patterns for Mongolian in
+T2A, LMC and UTF-8 encodings.")
+    ;; Either of these licenses
+    (license (list license:lppl1.3+ license:expat))))
+
+(define-public texlive-hyphen-norwegian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-norwegian" '("nb" "nn" "no")
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-nb.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-nn.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-no.tex")
+              (base32
+               "1fxnf671yz0p3lmdkspna7fjh96br1jy6yf7v17yh4fxwry3s4yz")))
+    (synopsis "Norwegian Bokmal and Nynorsk hyphenation patterns")
+    (description "This package provides hyphenation patterns for Norwegian
+Bokmal and Nynorsk in T1/EC and UTF-8 encodings.")
+    (license (license:non-copyleft
+              "/tex/generic/hyph-utf8/patterns/tex/hyph-no.tex"
+              "FSF All permissive license"))))
+
+(define-public texlive-hyphen-occitan
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-occitan" "oc"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-oc.tex")
+              (base32
+               "1y6j6ac9ncn79p7hnp6mdwdsw9ij14zyjby5iwdhpvzzn7yyc7p8")))
+    (synopsis "Occitan hyphenation patterns")
+    (description "This package provides hyphenation patterns for Occitan in
+T1/EC and UTF-8 encodings.  They are supposed to be valid for all the Occitan
+variants spoken and written in the wide area called 'Occitanie' by the French.
+It ranges from the Val d'Aran within Catalunya, to the South Western Italian
+Alps encompassing the southern half of the French pentagon.")
+    (license license:lppl1.0+)))
+
+(define-public texlive-hyphen-piedmontese
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-piedmontese" "pms"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-pms.tex")
+              (base32
+               "00fqzymkg374r3dzf1y82k6b18bqrf688vnjv0vkvw5a45srlb5r")))
+    (synopsis "Piedmontese hyphenation patterns")
+    (description "This package provides hyphenation patterns for Piedmontese
+in ASCII encoding.  Compliant with 'Gramatica dla lengua piemonteisa' by
+Camillo Brero.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-hyphen-polish
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-polish" "pl"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-pl.tex")
+              (base32
+               "0dzq8ca96q7m5bslh51x8d30pdb86glh2gn3mmvq5ip813ckwh3s")))
+    (synopsis "Polish hyphenation patterns")
+    (description "This package provides hyphenation patterns for Polish in QX
+and UTF-8 encodings.")
+    ;; No differing license declared, so we choose the project license.
+    (license license:lppl)))
+
+(define-public texlive-hyphen-portuguese
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-portuguese" "pt"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-pt.tex")
+              (base32
+               "1waxrmm33fd2qfc4kiaiblg8kwzasrvgq4j3l14z733d0hlg4rfz")))
+    (synopsis "Portuguese hyphenation patterns")
+    (description "This package provides hyphenation patterns for Portuguese in
+T1/EC and UTF-8 encodings.")
+    (license license:bsd-3)))
+
+(define-public texlive-hyphen-romanian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-romanian" "ro"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-ro.tex")
+              (base32
+               "12i1vryl51yhdpj163ahfyiy21rjmf4gkqgslpriirdjmyrwrs65")))
+    (synopsis "Romanian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Romanian in
+T1/EC and UTF-8 encodings.")
+    ;; No differing license declared, so we choose the project license.
+    (license license:lppl)))
+
+(define-public texlive-hyphen-romansh
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-romansh" "rm"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-rm.tex")
+              (base32
+               "06wan8i4appc1zfvc0q4cgnfv1nj0qgk02w3sg56zc11hf8sywl9")))
+    (synopsis "Romansh hyphenation patterns")
+    (description "This package provides hyphenation patterns for Romansh in
+ASCII encodings.  They are supposed to comply with the rules indicated by the
+Lia Rumantscha (Romansh language society).")
+    (license license:lppl1.3+)))
+
+(define-public texlive-hyphen-russian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-russian" "ru"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-ru.tex")
+              (base32
+               "09s4vq23x4vff08ykmf08dvcdradjzzwvyys8p2wk6jxaqp980s3")))
+    (synopsis "Russian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Russian in
+T2A and UTF-8 encodings.")
+    (license license:lppl1.2+)))
+
+(define-public texlive-hyphen-sanskrit
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-sanskrit" "sa"
+              (list "/doc/generic/hyph-utf8/sa/hyphenmin.txt"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-sa.tex")
+              (base32
+               "0grnn09l4i5yridx10yhm6dg9sbhgc2pmsp1p6hrcy7lzkqwdvs3")))
+    (synopsis "Sanskrit hyphenation patterns")
+    (description "This package provides hyphenation patterns for Sanskrit and
+Prakrit in longdesc transliteration, and in Devanagari, Bengali, Kannada,
+Malayalam longdesc and Telugu scripts for Unicode engines.")
+    ;; "You may freely use, copy, modify and/or distribute this file."
+    (license (license:non-copyleft
+              "file:///tex/generic/hyph-utf8/patterns/tex/hyph-sa.tex"))))
+
+(define-public texlive-hyphen-serbian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-serbian" '("sh-cyrl" "sh-latn" "sr-cyrl")
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-sh-cyrl.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-sh-latn.tex"
+                    "/tex/generic/hyph-utf8/patterns/tex/hyph-sr-cyrl.tex")
+              (base32
+               "0fhdfydyaspb8dwirlf24vn7y9dzwmhsld0mmw0fz1lmcfaj252n")))
+    (synopsis "Serbian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Serbian in
+T1/EC, T2A and UTF-8 encodings.")
+    ;; Any version of the GPL.
+    (license license:gpl3+)))
+
+(define-public texlive-hyphen-slovak
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-slovak" "sk"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-sk.tex")
+              (base32
+               "1cgw6fmyci3za3vsa49b6m74wqv582w0rpca7s9xva3hqm1m5qdg")))
+    (synopsis "Slovak hyphenation patterns")
+    (description "This package provides hyphenation patterns for Slovak in
+T1/EC and UTF-8 encodings.")
+    (license license:gpl2+)))
+
+(define-public texlive-hyphen-slovenian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-slovenian" "sl"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-sl.tex")
+              (base32
+               "1ixf2pxir9xf1gggq9k28xxglsq9bwqlghd9cl4amk5vrn5bjbds")))
+    (synopsis "Slovenian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Slovenian in
+T1/EC and UTF-8 encodings.")
+    ;; Either license
+    (license (list license:lppl1.0+ license:expat))))
+
+(define-public texlive-hyphen-spanish
+  (package
+    ;; The source files "eshyph-make.lua" and "eshyph.src" are provided to
+    ;; generate obsolete hyphenation patterns, which aren't included in a
+    ;; default TeX Live distribution, so we don't include them either.
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-spanish" "es"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-es.tex")
+              (base32
+               "0jgs0zzyk2wwrjbx2hqdh5qggrnik9xmsxygbfhlb7gdrcrs0mbj")))
+    (synopsis "Hyphenation patterns for Spanish")
+    (description "The package provides hyphenation patterns for Spanish in
+T1/EC and UTF-8 encodings.")
+    (license license:expat)))
+
+(define-public texlive-hyphen-swedish
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-swedish" "sv"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-sv.tex")
+              (base32
+               "12sf9f43zwyzb4cn57yry8r4zmwdc7cfdljn3qwxwrny4m3sw4w8")))
+    (synopsis "Swedish hyphenation patterns")
+    (description "This package provides hyphenation patterns for Swedish in
+T1/EC and UTF-8 encodings.")
+    (license license:lppl1.2+)))
+
+(define-public texlive-hyphen-thai
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-thai" "th"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-th.tex")
+              (base32
+               "15k1n4xdw8zzd5nrh76s53z4j95gxa4i2h1av5gx5vrjgblzzl97")))
+    (synopsis "Thai hyphenation patterns")
+    (description "This package provides hyphenation patterns for Thai in LTH
+and UTF-8 encodings.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-hyphen-turkish
+  (let ((template (texlive-hyphen-package
+                   "texlive-hyphen-turkish" "tr"
+                   (list "/source/generic/hyph-utf8/languages/tr/generate_patterns_tr.rb")
+                   (base32
+                    "0rvlhs2z2sn312lqsf44bzknid5dry7d2sl2q1whfvr0y4qj1g8f"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-before 'build 'build-patterns
+               (lambda _
+                 (let ((target (string-append (getcwd)
+                                              "/tex/generic/hyph-utf8/patterns/tex")))
+                   (mkdir-p target)
+                   (with-directory-excursion "source/generic/hyph-utf8/languages/tr/"
+                     (substitute* "generate_patterns_tr.rb"
+                       (("\\$file = File.new.*")
+                        (string-append "$file = File.new(\"" target
+                                       "/hyph-tr.tex\",\"w\")\n")))
+                     (invoke "ruby" "generate_patterns_tr.rb"))
+                   #t)))
+             (add-after 'install 'install-hyph-tr.tex
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (target (string-append out "/share/texmf-dist/tex")))
+                   (copy-recursively "tex" target)
+                   #t)))))))
+      (synopsis "Hyphenation patterns for Turkish")
+      (description "The package provides hyphenation patterns for Turkish in
+T1/EC and UTF-8 encodings.  The patterns for Turkish were first produced for
+the Ottoman Texts Project in 1987 and were suitable for both Modern Turkish
+and Ottoman Turkish in Latin script, however the required character set didn't
+fit into EC encoding, so support for Ottoman Turkish had to be dropped to keep
+compatibility with 8-bit engines.")
+      (license license:lppl1.0+))))
+
+(define-public texlive-hyphen-turkmen
+  (let ((template (texlive-hyphen-package
+                   "texlive-hyphen-turkmen" "tk"
+                   (list "/source/generic/hyph-utf8/languages/tk/generate_patterns_tk.rb")
+                   (base32
+                    "1wlqx8wb0wsqhdv823brc3i8w1vf4m4bkb2vg917j5dq8p8p71aw"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-before 'build 'build-patterns
+               (lambda _
+                 (let ((target (string-append (getcwd)
+                                              "/tex/generic/hyph-utf8/patterns/tex")))
+                   (mkdir-p target)
+                   (with-directory-excursion "source/generic/hyph-utf8/languages/tk/"
+                     (substitute* "generate_patterns_tk.rb"
+                       (("\\$file = File.new.*")
+                        (string-append "$file = File.new(\"" target
+                                       "/hyph-tr.tex\",\"w\")\n")))
+                     (invoke "ruby" "generate_patterns_tk.rb"))
+                   #t)))
+             (add-after 'install 'install-hyph-tk.tex
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (target (string-append out "/share/texmf-dist/tex")))
+                   (copy-recursively "tex" target)
+                   #t)))))))
+      (synopsis "Hyphenation patterns for Turkmen")
+      (description "The package provides hyphenation patterns for Turkmen in
+T1/EC and UTF-8 encodings.")
+      (license license:public-domain))))
+
+(define-public texlive-hyphen-ukrainian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-ukrainian" "uk"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-uk.tex")
+              (base32
+               "17z0gmw5svsf5zlhjkckwk4y21g7prfwj473jlqnwcsr8a941gsf")))
+    (synopsis "Ukrainian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Ukrainian in
+T2A and UTF-8 encodings.")
+    ;; No version specified
+    (license license:lppl)))
+
+(define-public texlive-hyphen-uppersorbian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-uppersorbian" "hsb"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-hsb.tex")
+              (base32
+               "1q42s32cfbynlnzn9hpcldi77fszi5xkn1c85l8xqjmfydqbqdyi")))
+    (synopsis "Upper Sorbian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Upper Sorbian
+in T1/EC and UTF-8 encodings.")
+    (license license:lppl1.3a+)))
+
+(define-public texlive-hyphen-welsh
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-welsh" "cy"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-cy.tex")
+              (base32
+               "0h8yjj5zdg0hvpb2vx9gi376536nl59hp8w286z1a13diaayg1m2")))
+    (synopsis "Welsh hyphenation patterns")
+    (description "This package provides hyphenation patterns for Welsh in
+T1/EC and UTF-8 encodings.")
+    ;; Either license
+    (license (list license:lppl1.0+ license:expat))))
+
+(define-public texlive-hyph-utf8
+  (package
+    (inherit (simple-texlive-package
+              "texlive-hyph-utf8"
+              (list "/source/generic/hyph-utf8/"
+                    "/source/luatex/hyph-utf8/"
+                    "/doc/luatex/hyph-utf8/"
+                    "/tex/luatex/hyph-utf8/etex.src"
+                    ;; Used to extract luatex-hyphen.lua
+                    "/tex/latex/base/docstrip.tex"
+
+                    ;; Documentation; we can't use the whole directory because
+                    ;; it includes files from other packages.
+                    "/doc/generic/hyph-utf8/CHANGES"
+                    "/doc/generic/hyph-utf8/HISTORY"
+                    "/doc/generic/hyph-utf8/hyph-utf8.pdf"
+                    "/doc/generic/hyph-utf8/hyph-utf8.tex"
+                    "/doc/generic/hyph-utf8/hyphenation-distribution.pdf"
+                    "/doc/generic/hyph-utf8/hyphenation-distribution.tex"
+                    "/doc/generic/hyph-utf8/img/miktex-languages.png"
+                    "/doc/generic/hyph-utf8/img/texlive-collection.png")
+              (base32
+               "10y8svgk68sivmgzrv8gv137r7kv49cs256cq2wja9ms437pxvbj")))
+    (outputs '("out" "doc"))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; there are none
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 match))
+       #:make-flags
+       (list "-C" "source/luatex/hyph-utf8/"
+             (string-append "DO_TEX = tex --interaction=nonstopmode '&tex' $<")
+             (string-append "RUNDIR =" (assoc-ref %outputs "out") "/share/texmf-dist/tex/luatex/hyph-utf8/")
+             (string-append "DOCDIR =" (assoc-ref %outputs "doc") "/share/texmf-dist/doc/luatex/hyph-utf8/")
+             ;; hyphen.cfg is neither included nor generated, so let's only build the lua file.
+             (string-append "UNPACKED = $(NAME).lua"))
+       #:phases
+       (modify-phases %standard-phases
+         ;; TeX isn't usable at this point, so we first need to generate the
+         ;; tex.fmt.
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Target directories must exist.
+             (mkdir-p (string-append (assoc-ref %outputs "out")
+                                     "/share/texmf-dist/tex/luatex/hyph-utf8/"))
+             (mkdir-p (string-append (assoc-ref %outputs "doc")
+                                     "/share/texmf-dist/doc/luatex/hyph-utf8/"))
+
+             ;; We cannot build the documentation because that requires a
+             ;; fully functional pdflatex, which depends on this package.
+             (substitute* "source/luatex/hyph-utf8/Makefile"
+               (("all: .*") "all: $(RUNFILES)\n"))
+
+             ;; Find required fonts for building tex.fmt
+             (setenv "TFMFONTS"
+                     (string-append (assoc-ref inputs "texlive-cm")
+                                    "/share/texmf-dist/fonts/tfm/public/cm:"
+                                    (assoc-ref inputs "texlive-fonts-knuth-lib")
+                                    "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
+             ;; ...and find all tex files in this environment.
+             (setenv "TEXINPUTS"
+                     (string-append
+                      (getcwd) ":"
+                      (string-join
+                       (map (match-lambda ((_ . dir) dir)) inputs)
+                       "//:")))
+
+             ;; Generate tex.fmt.
+             (let ((where "source/luatex/hyph-utf8"))
+               (mkdir-p where)
+               (with-directory-excursion where
+                 (invoke "tex" "-ini"
+                         (string-append (assoc-ref inputs "texlive-tex-plain")
+                                        "/share/texmf-dist/tex/plain/config/tex.ini"))))))
+         (add-before 'build 'build-loaders-and-converters
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((root (string-append (assoc-ref outputs "out")
+                                         "/share/texmf-dist"))
+                    (conv
+                     (string-append root
+                                    "/tex/generic/hyph-utf8/conversions")))
+
+               ;; Build converters
+               (mkdir-p conv)
+               (with-directory-excursion "source/generic/hyph-utf8"
+                 (substitute* "generate-converters.rb"
+                   (("\\$path_root=File.*")
+                    (string-append "$path_root=\"" root "\"\n"))
+                   ;; Avoid error with newer Ruby.
+                   (("#1\\{%") "#1{%%"))
+                 (invoke "ruby" "generate-converters.rb"))
+               #t)))
+         (replace 'install
+           (lambda* (#:key source outputs #:allow-other-keys)
+             (let ((doc (assoc-ref outputs "doc"))
+                   (out (assoc-ref outputs "out")))
+               (mkdir-p doc)
+               (copy-recursively
+                (string-append source "/doc")
+                (string-append doc "/doc"))
+               (install-file
+                (string-append source "/tex/luatex/hyph-utf8/etex.src")
+                (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)))
+    (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
+hyphenation patterns in UTF-8 format, whereas older systems require
+hyphenation patterns in the 8-bit encoding of the font in use (such encodings
+are codified in the LaTeX scheme with names like OT1, T2A, TS1, OML, LY1,
+etc).  The present package offers a collection of conversions of existing
+patterns to UTF-8 format, together with converters for use with 8-bit fonts in
+older systems.  Since hyphenation patterns for Knuthian-style TeX systems are
+only read at iniTeX time, it is hoped that the UTF-8 patterns, with their
+converters, will completely supplant the older patterns.")
+    ;; Individual files each have their own license.  Most of these files are
+    ;; independent hyphenation patterns.
+    (license (list license:lppl1.0+
+                   license:lppl1.2+
+                   license:lppl1.3
+                   license:lppl1.3+
+                   license:lppl1.3a+
+                   license:lgpl2.1
+                   license:lgpl2.1+
+                   license:lgpl3+
+                   license:gpl2+
+                   license:gpl3+
+                   license:mpl1.1
+                   license:asl2.0
+                   license:expat
+                   license:bsd-3
+                   license:cc0
+                   license:public-domain
+                   license:wtfpl2))))
+
+(define-public texlive-generic-hyph-utf8
+  (deprecated-package "texlive-generic-hyph-utf8" texlive-hyph-utf8))
+
+(define-public texlive-dehyph-exptl
+  (package
+    (inherit (simple-texlive-package
+              "texlive-dehyph-exptl"
+              (list "/tex/generic/dehyph-exptl/"
+                    "/doc/generic/dehyph-exptl/")
+              (base32
+               "1w2danvvy2f52hcb4acvjks53kcanwxr9s990fap6mj279hpgmh2")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-hyphen-base" ,texlive-hyphen-base)
+       ("texlive-hyph-utf8" ,texlive-hyph-utf8)))
+    (home-page "http://projekte.dante.de/Trennmuster/WebHome")
+    (synopsis "Hyphenation patterns for German")
+    (description "The package provides experimental hyphenation patterns for
+the German language, covering both traditional and reformed orthography.  The
+patterns can be used with packages Babel and hyphsubst from the Oberdiek
+bundle.")
+    ;; Hyphenation patterns are under the Expat license; documentation is
+    ;; under LPPL.
+    (license (list license:expat license:lppl))))
+
+(define-public texlive-generic-dehyph-exptl
+  (deprecated-package "texlive-generic-dehyph-exptl" texlive-dehyph-exptl))
+
+(define-public texlive-ukrhyph
+  (package
+    (inherit (simple-texlive-package
+              "texlive-ukrhyph"
+              (list "/doc/generic/ukrhyph/"
+                    "/tex/generic/ukrhyph/")
+              (base32
+               "01ma274sixcrbpb7fpqkxwfvrnzfj2srv9b4a42rfnph1pdql74z")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/ukrhyph")
+    (synopsis "Hyphenation patterns for Ukrainian")
+    (description "The package provides a range of hyphenation patterns for
+Ukrainian, depending on the encoding of the output font including the standard
+T2A.")
+    (license license:lppl)))
+
+(define-public texlive-ruhyphen
+  (let ((template (simple-texlive-package
+                   "texlive-ruhyphen"
+                   (list "/source/generic/ruhyphen/"
+                         "/tex/generic/ruhyphen/")
+                   (base32
+                    "18n1bqhh8jv765vz3a3fjwffy7m71vhwx9yq8zl0p5j7p72q9qcn")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda _
+                 (let ((cwd (getcwd)))
+                   ;; Remove generated files.
+                   (for-each delete-file
+                             (find-files "tex/generic/ruhyphen/"
+                                         "^cyry.*.tex$"))
+                   (substitute* "source/generic/ruhyphen/Makefile"
+                     (("./mkcyryo") (string-append cwd "/source/generic/ruhyphen/mkcyryo")))
+                   (with-directory-excursion "tex/generic/ruhyphen"
+                     (invoke "make" "-f"
+                             (string-append cwd "/source/generic/ruhyphen/Makefile"))))))))))
+      (native-inputs
+       `(("coreutils" ,coreutils)
+         ("gawk" ,gawk)
+         ("sed" ,sed)
+         ("grep" ,grep)
+         ("perl" ,perl)))
+      (home-page "https://www.ctan.org/pkg/ruhyphen")
+      (synopsis "Hyphenation patterns for Russian")
+      (description "The package provides a collection of Russian hyphenation
+patterns supporting a number of Cyrillic font encodings, including T2,
+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
+               "0ajfp9kr330lcm2ymr3kl9zn6y2xjkrzpa0c0azc4qdm5jllawb9")
+              #: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
+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+)))
+
+(define-public texlive-latexconfig
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latexconfig"
+              (list "/tex/latex/latexconfig/")
+              (base32
+               "1wa7yhdpnz1nyidwgli68fyr33jn951bnniqrih5lj98k09rqc3h")
+              #:trivial? #t))
+    (home-page "https://www.tug.org/")
+    (synopsis "Configuration files for LaTeX-related formats")
+    (description "The package provides configuration files for LaTeX-related
+formats.")
+    (license license:lppl)))
+
+(define-public texlive-latex-base
+  (package
+    (name "texlive-latex-base")
+    (version (number->string %texlive-revision))
+    (source (texlive-origin
+             name version
+             (list "/doc/latex/base/"
+                   "/source/latex/base/"
+                   ;; Almost all files in /tex/latex/base are generated, but
+                   ;; these are not:
+                   "/tex/latex/base/idx.tex"
+                   "/tex/latex/base/lablst.tex"
+                   "/tex/latex/base/lppl.tex"
+                   "/tex/latex/base/ltnews.cls"
+                   "/tex/latex/base/ltxcheck.tex"
+                   "/tex/latex/base/ltxguide.cls"
+                   "/tex/latex/base/minimal.cls"
+                   "/tex/latex/base/sample2e.tex"
+                   "/tex/latex/base/small2e.tex"
+                   "/tex/latex/base/source2e.tex"
+                   "/tex/latex/base/testpage.tex"
+                   "/tex/latex/base/texsys.cfg")
+             (base32
+              "0f8d41wk1gb7i6xq1a10drwhhayc50pg9nwzjkrqnxrv0pcc08w5")))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 match)
+                  (srfi srfi-26))
+       #:tests? #f                      ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Find required fonts
+             (setenv "TFMFONTS"
+                     (string-join
+                      (map (match-lambda
+                             ((pkg-name . dir)
+                              (string-append
+                               (assoc-ref inputs pkg-name)
+                               "/share/texmf-dist/fonts/tfm/public"
+                               dir)))
+                           '(("texlive-etex" . "/etex")
+                             ("texlive-cm" . "/cm")
+                             ("texlive-fonts-latex" . "/latex-fonts")
+                             ("texlive-fonts-knuth-lib" . "/knuth-lib")))
+                      ":"))
+             (let ((cwd (getcwd)))
+               (setenv "TEXINPUTS"
+                       (string-append
+                        cwd "//:"
+                        cwd "/source/latex/base//:"
+                        cwd "/build:"
+                        (string-join
+                         (map (match-lambda ((_ . dir) dir)) inputs)
+                         "//:"))))
+
+             ;; This is the actual build step.
+             (mkdir "build")
+             (invoke "tex" "-ini" "-interaction=scrollmode"
+                     "-output-directory=build" "unpack.ins")
+
+             ;; XXX: We can't build all formats at this point, nor are they
+             ;; part of the LaTeX base, so we disable them.  Actually, we
+             ;; should be running this all in a profile hook, so that only
+             ;; selected formats and hyphenation patterns are included, but it
+             ;; takes long and TeX Live isn't designed to be modular like
+             ;; that.  Everything operates on a shared directory, which we
+             ;; would only have at profile generation time.
+             (let ((disabled-formats
+                    '("aleph aleph" "lamed aleph" "uptex uptex" "euptex euptex"
+                      "eptex eptex" "ptex ptex" "pdfxmltex pdftex" "platex eptex"
+                      "csplain pdftex" "mf mf-nowin" "mex pdftex" "pdfmex pdftex"
+                      "cont-en xetex" "cont-en pdftex" "pdfcsplain xetex"
+                      "pdfcsplain pdftex" "pdfcsplain luatex" "cslatex pdftex"
+                      "mptopdf pdftex" "uplatex euptex" "jadetex pdftex"
+                      "amstex pdftex" "pdfcslatex pdftex" "lollipop tex"
+                      "xmltex pdftex" "pdfjadetex pdftex" "eplain pdftex"
+                      "texsis pdftex" "mltex pdftex" "utf8mex pdftex")))
+               (mkdir "web2c")
+               (install-file (string-append
+                              (assoc-ref inputs "texlive-kpathsea")
+                              "/share/texmf-dist/web2c/fmtutil.cnf")
+                             "web2c")
+               (make-file-writable "web2c/fmtutil.cnf")
+               (substitute* "web2c/fmtutil.cnf"
+                 (((string-append "^(" (string-join disabled-formats "|") ")") m)
+                  (string-append "#! " m))))
+             (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))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (root (string-append out "/share/texmf-dist"))
+                    (target (string-append root "/tex/latex/base"))
+                    (web2c (string-append root "/web2c"))
+                    (makeindex (string-append root "/makeindex/latex")))
+               (for-each delete-file (find-files "." "\\.(log|aux)$"))
+
+               ;; The usedir directive in docstrip.ins is ignored, so these
+               ;; two files end up in the wrong place.  Move them.
+               (mkdir-p makeindex)
+               (for-each (lambda (file)
+                           (install-file file makeindex)
+                           (delete-file file))
+                         '("build/gglo.ist"
+                           "build/gind.ist"))
+               (for-each (cut install-file <> target)
+                         (find-files "build" ".*"))
+               (for-each (cut install-file <> web2c)
+                         (find-files "web2c" ".*"))
+               #t))))))
+    (native-inputs
+     `(("texlive-bin" ,texlive-bin)
+       ("texlive-tex-ini-files" ,texlive-tex-ini-files)
+       ("texlive-tex-plain" ,texlive-tex-plain)
+       ("texlive-kpathsea" ,texlive-kpathsea)
+       ("texlive-cm" ,texlive-cm)
+       ("texlive-fonts-latex" ,texlive-fonts-latex)
+       ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
+       ("texlive-luatexconfig"
+        ,(texlive-origin
+          "texlive-luatexconfig" (number->string %texlive-revision)
+          (list "/tex/generic/config/luatex-unicode-letters.tex"
+                "/tex/generic/config/luatexiniconfig.tex"
+                "/web2c/texmfcnf.lua")
+          (base32
+           "0cs67a8wwh4s5p5gn8l49jyccgy7glw8mfq5klgn3dfsl2fdlhk7")))))
+    (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-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)))
+    (home-page "https://www.ctan.org/pkg/latex-base")
+    (synopsis "Base sources of LaTeX")
+    (description
+     "This bundle comprises the source of LaTeX itself, together with several
 packages which are considered \"part of the kernel\".  This bundle, together
 with the required packages, constitutes what every LaTeX distribution should
 contain.")
-      (license license:lppl1.3c+))))
+    (license license:lppl1.3c+)))
 
 (define-public texlive-latex-filecontents
   (package
@@ -1600,32 +2777,15 @@ 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-generic-epsf
+(define-public texlive-epsf
   (package
-    (name "texlive-generic-epsf")
-    (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/"
-                                        "/tex/generic/epsf"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "14w3j81ympyvg8hkk9i1xgr8a0gfnfsb2ki8qqsk5pa051za1xcy"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/generic/epfs")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-epsf"
+              (list "/doc/generic/epsf/"
+                    "/tex/generic/epsf/")
+              (base32
+               "03jcf0kqh47is965d2590miwj7d5kif3c4mgsnvkyl664jzjkh92")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/epsf")
     (synopsis "Simple macros for EPS inclusion")
     (description
@@ -1637,6 +2797,9 @@ 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-public texlive-latex-fancyvrb
   (package
     (name "texlive-latex-fancyvrb")
@@ -1663,6 +2826,40 @@ verbatim mode; build \"example\" environments (showing both result and
 verbatim source).")
     (license license:lppl1.0+)))
 
+(define-public texlive-graphics-def
+  (package
+    (inherit (simple-texlive-package
+              "texlive-graphics-def"
+              (list "/doc/latex/graphics-def/README.md"
+                    "/tex/latex/graphics-def/")
+              (base32
+               "0zrbn9cwfnnrrl3b2zsd74ldksp9jwpvjh7z93ild1m75crpb39a")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/latex-graphics")
+    (synopsis "Color and graphics option files")
+    (description
+     "This bundle is a combined distribution consisting of @file{dvips.def},
+@file{pdftex.def}, @file{luatex.def}, @file{xetex.def}, @file{dvipdfmx.def},
+and @file{dvisvgm.def} driver option files for the LaTeX graphics and color
+packages.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-graphics-cfg
+  (package
+    (inherit (simple-texlive-package
+              "texlive-graphics-cfg"
+              (list "/doc/latex/graphics-cfg/README.md"
+                    "/tex/latex/graphics-cfg/")
+              (base32
+               "00n63adb2laf43lzix39xl68aq0k5k80mmrw602w99w5n7f96gsf")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/latex-graphics")
+    (synopsis "Sample configuration files for LaTeX color and graphics")
+    (description
+     "This bundle includes @file{color.cfg} and @file{graphics.cfg} files that
+set default \"driver\" options for the color and graphics packages.")
+    (license license:public-domain)))
+
 (define-public texlive-latex-graphics
   (package
     (name "texlive-latex-graphics")
@@ -1675,54 +2872,10 @@ verbatim source).")
                (base32
                 "0nlfhn55ax89rcvpkrl9570671b62kcr4c9l5ch3w5zw9vmi00dz"))))
     (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/graphics"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-config
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((cfg (assoc-ref inputs "graphics-cfg"))
-                   (target (string-append (assoc-ref outputs "out")
-                                          "/share/texmf-dist/tex/latex/graphics-cfg")))
-               (mkdir-p target)
-               (install-file (string-append cfg "/graphics.cfg") target)
-               (install-file (string-append cfg "/color.cfg")    target)
-               #t)))
-         (add-after 'install 'install-defs
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((def (assoc-ref inputs "graphics-def"))
-                   (target (string-append (assoc-ref outputs "out")
-                                          "/share/texmf-dist/tex/latex/graphics-def")))
-               (mkdir-p target)
-               (copy-recursively def target)
-               #t))))))
-    (native-inputs
-     `(("graphics-cfg"
-        ,(origin
-           (method git-fetch)
-           (uri (git-reference
-                 (url "https://github.com/latex3/graphics-cfg.git")
-                 (commit "19d1238af17df376cd46333b229579b0f7f3a41f")))
-           (file-name (string-append "graphics-cfg-"
-                                     (number->string %texlive-revision)
-                                     "-checkout"))
-           (sha256
-            (base32
-             "12kbgbm52gmmgn8zajb74s8n5rvnxcfdvs3iyj8vcw5vrsw5i6mh"))))
-       ("graphics-def"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/tex/latex/graphics-def"))
-                 (revision %texlive-revision)))
-           (file-name (string-append "graphics-def-"
-                                     (number->string %texlive-revision)
-                                     "-checkout"))
-           (sha256
-            (base32
-             "17zpcgrfsr29g1dkz9np1qi63kjv7gb12rg979c6dai6qksbr3vq"))))))
+    (arguments '(#:tex-directory "latex/graphics"))
+    (propagated-inputs
+     `(("texlive-graphics-cfg" ,texlive-graphics-cfg)
+       ("texlive-graphics-def" ,texlive-graphics-def)))
     (home-page "https://www.ctan.org/pkg/latex-graphics")
     (synopsis "LaTeX standard graphics bundle")
     (description
@@ -1730,9 +2883,7 @@ verbatim source).")
 graphics (e.g. PostScript) files, and rotation and scaling of text in LaTeX
 documents.  It comprises the packages color, graphics, graphicx, trig, epsfig,
 keyval, and lscape.")
-    ;; The configuration files are released under CC0.
-    (license (list license:lppl1.3c+
-                   license:cc0))))
+    (license license:lppl1.3c+)))
 
 (define-public texlive-latex-xcolor
   (package
@@ -1850,32 +3001,15 @@ rawfonts, showkeys, somedefs, tabularx, theorem, trace, varioref, verbatim,
 xr, and xspace.")
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-url
+(define-public texlive-url
   (package
-    (name "texlive-latex-url")
-    (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/"
-                                        "/tex/latex/url"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "184s2543cwia5l7iibhlkl1ffbncfhjpv5p56zq0c15by5sghlac"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/latex/url")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-url"
+              (list "/doc/latex/url/"
+                    "/tex/latex/url/")
+              (base32
+               "184m40wgnx939ky2hbxnj0v9aak023ldrhgffp0lgyk9wdqpxlqg")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/url")
     (synopsis "Verbatim with URL-sensitive line breaks")
     (description "The command @code{\\url} is a form of verbatim command that
@@ -1890,6 +3024,26 @@ 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-public texlive-tetex
+  (package
+    (inherit (simple-texlive-package
+              "texlive-tetex"
+              (list "/dvips/tetex/"
+                    "/fonts/enc/dvips/tetex/"
+                    "/fonts/map/dvips/tetex/")
+              (base32
+               "1si3as8mwi8837965djlw6jhwwzsp3r1hkflvdxv2avx9vb45hjb")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/tetex")
+    (synopsis "Font maps originally from teTeX")
+    (description "This package provides font maps that were originally part of
+the now obsolete teTeX distributions but are still used at the core of the TeX
+Live distribution.")
+    (license license:public-domain)))
+
 (define-public texlive-latex-l3kernel
   (package
     (name "texlive-latex-l3kernel")
@@ -2339,7 +3493,7 @@ packages.")
           (list texlive-bin
                 texlive-dvips
                 texlive-fontname
-                texlive-fonts-cm
+                texlive-cm
                 texlive-fonts-latex
                 texlive-metafont-base
                 texlive-latex-base
@@ -2351,7 +3505,8 @@ packages.")
                 texlive-latex-cyrillic
                 texlive-latex-graphics
                 texlive-latex-psnfss
-                texlive-latex-tools)))
+                texlive-latex-tools
+                texlive-tetex)))
     (package
       (name "texlive-base")
       (version (number->string %texlive-revision))
@@ -2397,16 +3552,18 @@ standard LaTeX packages."
            #: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)
+               ;; Build a modifiable union of all inputs (but exclude bash and
+               ;; the updmap.cfg file)
                (match (filter (match-lambda
                                 ((name . _)
-                                 (not (string=? "bash" name))))
+                                 (not (member name '("bash" "updmap.cfg")))))
                               %build-inputs)
                  (((names . directories) ...)
                   (union-build (assoc-ref %outputs "out")
@@ -2423,19 +3580,47 @@ standard LaTeX packages."
                   (string-append "TEXMFROOT = " out "/share\n"))
                  (("^TEXMF = .*")
                   "TEXMF = $TEXMFROOT/share/texmf-dist\n"))
-               (setenv "PATH" (string-append (assoc-ref %build-inputs "bash")
-                                             "/bin"))
+               (setenv "PATH" (string-append
+                               (assoc-ref %build-inputs "bash") "/bin:"
+                               (assoc-ref %build-inputs "coreutils") "/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 ((port (open-pipe* OPEN_WRITE "updmap-sys"
+                                       "--syncwithtrees"
+                                       "--nohash"
+                                       (assoc-ref %build-inputs "updmap.cfg"))))
+                 (display "Y\n" port)
+                 (when (not (zero? (status:exit-val (close-pipe port))))
+                   (error "failed to filter updmap.cfg")))
+               ;; Generate maps.
+               (invoke "updmap-sys" "--force"
+                       (string-append out "/share/texmf-config/web2c/updmap.cfg"))
                #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
+                 "06mwpy5i218g5k3sf4gba0fmxgas82hkzx9fhwn67z5ik37d8apq"))))))
         (home-page (package-home-page texlive-bin))
         (synopsis "Union of TeX Live packages")
         (description "This package provides a subset of the TeX Live
@@ -2684,32 +3869,16 @@ without affecting the structure of the list (this works for @code{itemize} and
 @code{enumerate} lists, and numbered lists remain in sequence).")
     (license license:lppl)))
 
-(define-public texlive-latex-filemod
+(define-public texlive-filemod
   (package
-    (name "texlive-latex-filemod")
-    (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/"
-                                        "/tex/latex/filemod"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0vpxilfw69xv78f03g0j0zw0bw4qcn36whqp8phcq48qk1ax2kr2"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/latex/filemod")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-filemod"
+              (list "/doc/latex/filemod/"
+                    "/tex/latex/filemod/"
+                    "/tex/generic/filemod/")
+              (base32
+               "1snsj7kblkj1ig3x3845lsypz7ab04lf0dcpdh946xakgjnz4fb5")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/filemod")
     (synopsis "Provide file modification times, and compare them")
     (description
@@ -2723,6 +3892,9 @@ 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-public texlive-latex-ifplatform
   (package
     (name "texlive-latex-ifplatform")
@@ -2822,32 +3994,15 @@ package options.  A specialized system for setting @code{PSTricks} keys is
 provided by the @code{pst-xkey} package.")
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-pstool
+(define-public texlive-pstool
   (package
-    (name "texlive-latex-pstool")
-    (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/"
-                                        "/tex/latex/pstool"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1h816jain8c9nky75kk8pmmwj5b4yf9dpqvdvi2l6jhfj5iqkzr8"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/latex/pstool")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-pstool"
+              (list "/doc/latex/pstool/"
+                    "/tex/latex/pstool/")
+              (base32
+               "12clzcw2cl7g2chr2phgmmiwxw4859cln1gbx1wgp8bl9iw590nc")
+              #:trivial? #t))
     (propagated-inputs
      `(("texlive-latex-bigfoot" ,texlive-latex-bigfoot) ; for suffix
        ("texlive-latex-filemod" ,texlive-latex-filemod)
@@ -2868,32 +4023,18 @@ drastically speeding up compilation time when only a single figure needs
 re-processing.")
     (license license:lppl)))
 
-(define-public texlive-latex-seminar
+(define-public texlive-latex-pstool
+  (deprecated-package "texlive-latex-pstool" texlive-pstool))
+
+(define-public texlive-seminar
   (package
-    (name "texlive-latex-seminar")
-    (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/"
-                                        "/tex/latex/seminar"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0y4i651b75y6006n03x8n86bsqvjsailvvz9bhzy51dzsznqidq0"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/latex/seminar")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-seminar"
+              (list "/doc/latex/seminar/"
+                    "/tex/latex/seminar/")
+              (base32
+               "1clgw5xy867khzfn8d210rc5hsw5s7r0pznhk84niybvw4zc7r3f")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/seminar")
     (synopsis "Make overhead slides")
     ;; TODO: This package may need fancybox and xcomment at runtime.
@@ -2905,6 +4046,9 @@ 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-public texlive-latex-trimspaces
   (package
     (name "texlive-latex-trimspaces")
@@ -2972,32 +4116,15 @@ space-stripped macros.")
 to something that's not a float.")
     (license license:lppl)))
 
-(define-public texlive-latex-doi
+(define-public texlive-doi
   (package
-    (name "texlive-latex-doi")
-    (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/"
-                                        "/tex/latex/doi"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0378rdmrgr2lzbfi4qqy4dfpj5im20diyd8z8b9m4mlg05r7wgnb"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/latex/doi")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-doi"
+              (list "/doc/latex/doi/README"
+                    "/tex/latex/doi/")
+              (base32
+               "17lnnhfmb8g4nh4fnyc9616h8xg3vjrzmlvfmlfqwwlfpma9xnnw")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/doi")
     (synopsis "Create correct hyperlinks for DOI numbers")
     (description
@@ -3010,32 +4137,18 @@ hyperlink to the target of the DOI.")
     ;; Any version of the LPPL.
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-etoolbox
+(define-public texlive-latex-doi
+  (deprecated-package "texlive-latex-doi" texlive-doi))
+
+(define-public texlive-etoolbox
   (package
-    (name "texlive-latex-etoolbox")
-    (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/"
-                                        "/tex/latex/etoolbox"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1agmq6bf8wzcd77n20ng8bl4kh69cg5f6sjniii7bcw4llhd3nc8"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/latex/etoolbox")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-etoolbox"
+              (list "/doc/latex/etoolbox/"
+                    "/tex/latex/etoolbox/")
+              (base32
+               "1qg4x5r4ibinl6zy5lq70lv4zcrjsn54n6hwv31k5kl7mwv0mvr3")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/etoolbox")
     (synopsis "e-TeX tools for LaTeX")
     (description
@@ -3048,6 +4161,9 @@ 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-public texlive-latex-fncychap
   (package
     (name "texlive-latex-fncychap")
@@ -3701,7 +4817,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
                (setenv "MFINPUTS"
                        (string-append (getcwd) ":"
                                       mf "/share/texmf-dist/metafont/base:"
-                                      (assoc-ref inputs "texlive-fonts-cm")
+                                      (assoc-ref inputs "texlive-cm")
                                       "/share/texmf-dist/fonts/source/public/cm")))
              (mkdir "build")
              (for-each (lambda (font)
@@ -3730,7 +4846,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
     (native-inputs
      `(("texlive-bin" ,texlive-bin)
        ("texlive-metafont-base" ,texlive-metafont-base)
-       ("texlive-fonts-cm" ,texlive-fonts-cm)))
+       ("texlive-cm" ,texlive-cm)))
     (home-page "https://www.ctan.org/pkg/ec")
     (synopsis "Computer modern fonts in T1 and TS1 encodings")
     (description
@@ -3748,163 +4864,50 @@ fonts are available in (traced) Adobe Type 1 format, as part of the
 set, Latin Modern, is not actually a direct development of the EC set, and
 differs from the EC in a number of particulars.")
     (license (license:fsf-free "https://www.tug.org/svn/texlive/tags/\
-texlive-2017.1/Master/texmf-dist/doc/fonts/ec/copyrite.txt"))))
-
-(define-public texlive-fonts-adobe-times
-  (package
-    (name "texlive-fonts-adobe-times")
-    (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/type1/urw/times/"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "15vzyr7favkv1mj00qxr03s89kw78nd066fh69by93272g8p5sgd"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (ice-9 match))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match))
-         (let ((root (string-append (assoc-ref %outputs "out")
-                                    "/share/texmf-dist/"))
-               (pkgs '(("source"        . "fonts/type1/urw/times")
-
-                       ("times-afm"     . "fonts/afm/adobe/times")
-                       ("times-tfm"     . "fonts/tfm/adobe/times")
-                       ("times-vf"      . "fonts/vf/adobe/times")
-
-                       ("urw-afm"       . "fonts/afm/urw/times")
-                       ("urw35vf-tfm"   . "fonts/tfm/urw35vf/times")
-                       ("urw35vf-vf"    . "fonts/vf/urw35vf/times")
+texlive-2018.2/Master/texmf-dist/doc/fonts/ec/copyrite.txt"))))
+
+;; FIXME: the fonts should be built from source, but running "tex aefonts.tex"
+;; fails with obscure TeX-typical error messages.
+(define-public texlive-ae
+  (package
+    (inherit (simple-texlive-package
+              "texlive-ae"
+              (list "/doc/fonts/ae/"
+                    "/source/fonts/ae/"
+                    "/fonts/tfm/public/ae/"
+                    "/fonts/vf/public/ae/"
+                    "/tex/latex/ae/")
+              (base32
+               "1xkzg381y0avdq381r2m990wp27czkdff0qkvsp2n5q62yc0bdsw")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/ae")
+    (synopsis "Virtual fonts for T1 encoded CMR-fonts")
+    (description
+     "This package provides a set of virtual fonts which emulates T1 coded
+fonts using the standard CM fonts.  The package name, AE fonts, supposedly
+stands for \"Almost European\".  The main use of the package was to produce
+PDF files using Adobe Type 1 versions of the CM fonts instead of bitmapped EC
+fonts.  Note that direct substitutes for the bitmapped EC fonts are available,
+via the CM-super, Latin Modern and (in a restricted way) CM-LGC font sets.")
+    (license license:lppl1.3+)))
 
-                       ("times-tex"     . "tex/latex/times")
-                       ("dvips"         . "dvips/times")
-                       ("fonts-map"     . "fonts/map/dvips/times"))))
-           (for-each (match-lambda
-                       ((pkg . dir)
-                        (let ((target (string-append root dir)))
-                          (mkdir-p target)
-                          (copy-recursively (assoc-ref %build-inputs pkg)
-                                            target))))
-                     pkgs)
-           #t))))
-    (native-inputs
-     `(("times-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/adobe/times"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "1k7h6vihfc6ri2lq9ggnq2g4zq3qcgq1vd0hr486g9cqrdpys6cy"))))
-       ("times-tfm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/tfm/adobe/times"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-tfm-" version "-checkout"))
-           (sha256
-            (base32
-             "1hbgkjnf5xyganbznwpwszvr3iyk4bzb0ys4hd8ybawp60paadrr"))))
-       ("times-vf"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/vf/adobe/times"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-vf-" version "-checkout"))
-           (sha256
-            (base32
-             "18rfspnwdw9r81dy18lb4w96d09b6c4g7y80azwylalkhwdf2lfp"))))
-       ("urw-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/urw/times"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-urw-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "0g0xpsyn6634g0b4rpd420v7i4gkz3zr12vcy2b8csbcscjvwri5"))))
-       ("urw35vf-tfm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/tfm/urw35vf/times"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-urw35vf-tfm-" version "-checkout"))
-           (sha256
-            (base32
-             "0a4idlvpaqd0ypqgy1xw0rpx8q23bvssg8xq757zzn3zikj0w7pr"))))
-       ("urw35vf-vf"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/vf/urw35vf/times"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-urw35vf-vf-" version "-checkout"))
-           (sha256
-            (base32
-             "05mppwxd4c5x0yw50gca726f0ylc1rk8jf0jjkrriixq6rnw03di"))))
-       ("times-tex"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/tex/latex/times"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-tex-" version "-checkout"))
-           (sha256
-            (base32
-             "1gmd0x7c3vkvfzgmrsp4866rcdbyimfk3bjr91zaadc41r1i8xrp"))))
-       ("dvips"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/dvips/times/"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-dvips-" version "-checkout"))
-           (sha256
-            (base32
-             "1fvqpgqi7bp2q76nf5kmlhsdijxw65arqfy3ax3djwih3yg12mp0"))))
-       ("fonts-map"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/dvips/times/"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-fonts-map-" version "-checkout"))
-           (sha256
-            (base32
-             "12f00gzs2zgllkm59qdhw2xxj7lvg3p256232f1l275z3pldfqqi"))))))
+(define-public texlive-times
+  (package
+    (inherit (simple-texlive-package
+              "texlive-times"
+              (list "/dvips/times/"
+                    "/fonts/afm/adobe/times/"
+                    "/fonts/afm/urw/times/"
+                    "/fonts/tfm/adobe/times/"
+                    "/fonts/tfm/urw35vf/times/"
+                    "/fonts/type1/urw/times/"
+                    "/fonts/vf/adobe/times/"
+                    "/fonts/vf/urw35vf/times/"
+                    "/fonts/map/dvips/times/"
+                    "/tex/latex/times/")
+              (base32
+               "13g41a7vbkvsf7ki9dgl7qm100w382mnlqkcngwgl3axp6s5s8l0")
+              #:trivial? #t))
     (home-page "https://ctan.org/pkg/urw-base35")
     (synopsis "URW Base 35 font pack for LaTeX")
     (description
@@ -3913,161 +4916,27 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-palatino
-  (package
-    (name "texlive-fonts-adobe-palatino")
-    (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/type1/urw/palatino/"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "18dw5260c6fy7acxaqwrg3hw04kg63ijq4lkn56q5pa2g6nyylrp"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (ice-9 match))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match))
-         (let ((root (string-append (assoc-ref %outputs "out")
-                                    "/share/texmf-dist/"))
-               (pkgs '(("source"        . "fonts/type1/urw/palatino")
-
-                       ("palatino-afm"  . "fonts/afm/adobe/palatino")
-                       ("palatino-tfm"  . "fonts/tfm/adobe/palatino")
-                       ("palatino-vf"   . "fonts/vf/adobe/palatino")
-
-                       ("urw-afm"       . "fonts/afm/urw/palatino")
-                       ("urw35vf-tfm"   . "fonts/tfm/urw35vf/palatino")
-                       ("urw35vf-vf"    . "fonts/vf/urw35vf/palatino")
-
-                       ("palatino-tex"  . "tex/latex/palatino")
-                       ("dvips"         . "dvips/palatino")
-                       ("fonts-map"     . "fonts/map/dvips/palatino"))))
-           (for-each (match-lambda
-                       ((pkg . dir)
-                        (let ((target (string-append root dir)))
-                          (mkdir-p target)
-                          (copy-recursively (assoc-ref %build-inputs pkg)
-                                            target))))
-                     pkgs)
-           #t))))
-    (native-inputs
-     `(("palatino-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/adobe/palatino"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "0pxizay730cx7rb9y5bqq9dn1zxx3arc33rmdsn7l29pc51flmmi"))))
-       ("palatino-tfm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/tfm/adobe/palatino"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-tfm-" version "-checkout"))
-           (sha256
-            (base32
-             "1w1vm0sk9kpsy14yhyf1v1q3c6b97cgbba74g578bcwjlh810mg0"))))
-       ("palatino-vf"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/vf/adobe/palatino"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-vf-" version "-checkout"))
-           (sha256
-            (base32
-             "1maqfis8hpybcn9lmm8r2b1g56620lfpsncg0742c3kkjd6dh97h"))))
-       ("urw-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/urw/palatino"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-urw-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "0gk0xwy1fs2si5kb1j3dzgm52c8sagv32gd9dmw88m7sgh5qkd87"))))
-       ("urw35vf-tfm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/tfm/urw35vf/palatino"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-urw35vf-tfm-" version "-checkout"))
-           (sha256
-            (base32
-             "19aq3xwfg7vkf1qzjdxgcvcdqwpvpavq3l25y64xni72qx0kmppz"))))
-       ("urw35vf-vf"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/vf/urw35vf/palatino"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-urw35vf-vf-" version "-checkout"))
-           (sha256
-            (base32
-             "1lkn4p6zimrs0ah6mxsang4bicp8j7xzl016529a3f168an7mdmj"))))
-       ("palatino-tex"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/tex/latex/palatino"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-tex-" version "-checkout"))
-           (sha256
-            (base32
-             "0ng9w7i0p1nb51amla32jj86vx6p84m6qc7asam3g4x8w5jf7s27"))))
-       ("dvips"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/dvips/palatino/"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-dvips-" version "-checkout"))
-           (sha256
-            (base32
-             "1pdbkfmhx4kk3brh5lg6fyl9ad2kbjmkrhgcx84klnlhq01mfdhb"))))
-       ("fonts-map"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/dvips/palatino/"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-fonts-map-" version "-checkout"))
-           (sha256
-            (base32
-             "0rg13hyp652hp3gnrj5pbyb84zkqmyi1qnm8c6spcyaq8pm06l0d"))))))
+(define-public texlive-fonts-adobe-times
+  (deprecated-package "texlive-fonts-adobe-times" texlive-times))
+
+(define-public texlive-palatino
+  (package
+    (inherit (simple-texlive-package
+              "texlive-palatino"
+              (list "/dvips/palatino/"
+                    "/fonts/afm/adobe/palatino/"
+                    "/fonts/afm/urw/palatino/"
+                    "/fonts/tfm/adobe/palatino/"
+                    "/fonts/tfm/urw35vf/palatino/"
+                    "/fonts/type1/urw/palatino/"
+                    "/fonts/vf/adobe/palatino/"
+                    "/fonts/vf/urw35vf/palatino/"
+
+                    "/fonts/map/dvips/palatino/"
+                    "/tex/latex/palatino/")
+              (base32
+               "12jc0av7v99857jigmva47qaxyllhpzsnqis10n0qya2kz44xf22")
+              #:trivial? #t))
     (home-page "https://ctan.org/pkg/urw-base35")
     (synopsis "URW Base 35 font pack for LaTeX")
     (description
@@ -4076,133 +4945,24 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-zapfding
-  (package
-    (name "texlive-fonts-adobe-zapfding")
-    (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/type1/urw/zapfding/"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1sp3jblg3khp0yj121blvhph6ib09919kyrsk5x2lg258yypqyis"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (ice-9 match))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match))
-         (let ((root (string-append (assoc-ref %outputs "out")
-                                    "/share/texmf-dist/"))
-               (pkgs '(("source"      . "fonts/type1/urw/zapfding")
-                       ("zapf-afm"    . "fonts/afm/adobe/zapfding")
-                       ("zapf-tfm"    . "fonts/tfm/adobe/zapfding")
-                       ("urw-afm"     . "fonts/afm/urw/zapfding")
-                       ("urw35vf-tfm" . "fonts/tfm/urw35vf/zapfding")
-
-                       ("zapf-tex"    . "tex/latex/zapfding")
-                       ("dvips"       . "dvips/zapfding")
-                       ("fonts-map"   . "fonts/map/dvips/zapfding"))))
-           (for-each (match-lambda
-                       ((pkg . dir)
-                        (let ((target (string-append root dir)))
-                          (mkdir-p target)
-                          (copy-recursively (assoc-ref %build-inputs pkg)
-                                            target))))
-                     pkgs)
-           #t))))
-    (native-inputs
-     `(("zapf-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/adobe/zapfding"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "0qvl4w1bfcpiakkd8rvkism46qnvzj9w7x4r8z9m0y7mspbkblyr"))))
-       ("zapf-tfm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/tfm/adobe/zapfding"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-tfm-" version "-checkout"))
-           (sha256
-            (base32
-             "1i8mh9xsl8l4cgsg3nl4ha9q6m55j122riclaxsvkc5ka83432qm"))))
-       ("urw-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/urw/zapfding"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-urw-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "0m4qndqh7ji723ff82c5c1q8ziqvblbaip7vx05vnl15fqbsnfx1"))))
-       ("urw35vf-tfm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/tfm/urw35vf/zapfding"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-urw35vf-tfm-" version "-checkout"))
-           (sha256
-            (base32
-             "167g2x6mpjfqh0w1fhjbw14qcx6ridrj2zm1bd8bi0l2d7phj28m"))))
-       ("zapf-tex"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/tex/latex/zapfding"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-tex-" version "-checkout"))
-           (sha256
-            (base32
-             "0hp7i8f6nbrg7irrwc8fd7n1hrzjysa84d6iyivwlc65v9p7lmd0"))))
-       ("dvips"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/dvips/zapfding/"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-dvips-" version "-checkout"))
-           (sha256
-            (base32
-             "1f18sc4qwxykd786zhn6szcrycqvpvfhlcim71aamxmwghakd7fa"))))
-       ("fonts-map"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/dvips/zapfding/"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-fonts-map-" version "-checkout"))
-           (sha256
-            (base32
-             "17kwxmdrgz2fb072hx57a3pidcrhbgayphx11zyld2hv9149pkyl"))))))
+(define-public texlive-fonts-adobe-palatino
+  (deprecated-package "texlive-fonts-adobe-palatino" texlive-palatino))
+
+(define-public texlive-zapfding
+  (package
+    (inherit (simple-texlive-package
+              "texlive-zapfding"
+              (list "/dvips/zapfding/"
+                    "/fonts/afm/adobe/zapfding/"
+                    "/fonts/afm/urw/zapfding/"
+                    "/fonts/tfm/adobe/zapfding/"
+                    "/fonts/tfm/urw35vf/zapfding/"
+                    "/fonts/type1/urw/zapfding/"
+                    "/fonts/map/dvips/zapfding/"
+                    "/tex/latex/zapfding/")
+              (base32
+               "17mls8wilz9api9ivsbcczpiqp1f39qy8wa6ajssi8zhnc5lq7zn")
+              #:trivial? #t))
     (home-page "https://ctan.org/pkg/urw-base35")
     (synopsis "URW Base 35 font pack for LaTeX")
     (description
@@ -4211,6 +4971,9 @@ 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-public texlive-fonts-rsfs
   (package
     (name "texlive-fonts-rsfs")
@@ -4245,7 +5008,7 @@ Adobe's basic set.")
                (setenv "MFINPUTS"
                        (string-append (getcwd) ":"
                                       mf "/share/texmf-dist/metafont/base:"
-                                      (assoc-ref inputs "texlive-fonts-cm")
+                                      (assoc-ref inputs "texlive-cm")
                                       "/share/texmf-dist/fonts/source/public/cm")))
              (mkdir "build")
              (for-each (lambda (font)
@@ -4274,7 +5037,7 @@ Adobe's basic set.")
     (native-inputs
      `(("texlive-bin" ,texlive-bin)
        ("texlive-metafont-base" ,texlive-metafont-base)
-       ("texlive-fonts-cm" ,texlive-fonts-cm)))
+       ("texlive-cm" ,texlive-cm)))
     (home-page "https://www.ctan.org/pkg/rsfs")
     (synopsis "Ralph Smith's Formal Script font")
     (description
@@ -4616,120 +5379,24 @@ float, but you can put it in a @code{table} or a @code{table*} or some other
 environment.")
     (license (license:fsf-free "file://threeparttable.sty"))))
 
-(define-public texlive-fonts-txfonts
+(define-public texlive-txfonts
   (package
-    (name "texlive-fonts-txfonts")
-    (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/"
-                                        "/tex/latex/txfonts"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0jl921qdphg8i7bkfprackn3xd4gmvxckc526nmzqsmahqkavgg2"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (ice-9 match))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match))
-         (let ((root (string-append (assoc-ref %outputs "out")
-                                    "/share/texmf-dist/"))
-               (pkgs '(("source"        . "tex/latex/txfonts")
-                       ("txfonts-vf"    . "fonts/tfm/public/txfonts")
-                       ("txfonts-afm"   . "fonts/afm/public/txfonts")
-                       ("txfonts-tfm"   . "fonts/tfm/public/txfonts")
-                       ("txfonts-type1" . "fonts/type1/public/txfonts")
-                       ("txfonts-enc"   . "fonts/enc/dvips/txfonts")
-                       ("txfonts-map"   . "fonts/map/dvips/txfonts"))))
-           (for-each (match-lambda
-                       ((pkg . dir)
-                        (let ((target (string-append root dir)))
-                          (mkdir-p target)
-                          (copy-recursively (assoc-ref %build-inputs pkg)
-                                            target))))
-                     pkgs)
-           #t))))
-    (native-inputs
-     `(("txfonts-tfm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/tfm/public/txfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-tfm-" version "-checkout"))
-           (sha256
-            (base32
-             "12ffmbrp48ap35qa3b4mi6ckif9q2vf7972jxh5dc1yzykhla2xv"))))
-       ("txfonts-vf"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/vf/public/txfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-vf-" version "-checkout"))
-           (sha256
-            (base32
-             "04acyfdwvxpfx4l2xh2bpzdmpvwdf2pzbs7a236b0xckz2jvc1ci"))))
-       ("txfonts-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/public/txfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "1705klz51pnqzcs89s3521b84b6c89wlczflsh0vci66nl155yis"))))
-       ("txfonts-type1"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/type1/public/txfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-type1-" version "-checkout"))
-           (sha256
-            (base32
-             "0ajwr7zb6ch3gxd0g8p2i4llhy2wr9a9saz6jq6hm6fxf4pgl5h3"))))
-       ("txfonts-map"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/dvips/txfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-map-" version "-checkout"))
-           (sha256
-            (base32
-             "0kamr8a9x24jakas3v09dgv7kkpybj3i7qv4vz1iyypqr6kk1raj"))))
-       ("txfonts-enc"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/enc/dvips/txfonts"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-enc-" version "-checkout"))
-           (sha256
-            (base32
-             "1bal5fhw0xlhl37ayv8vlnqnsn1y82kadzfjhbgr223blspp4zsj"))))))
-    (home-page "https://www.ctan.org/pkg/threeparttable")
+    (inherit (simple-texlive-package
+              "texlive-txfonts"
+              (list "/doc/fonts/txfonts/"
+
+                    "/fonts/afm/public/txfonts/"
+                    "/fonts/tfm/public/txfonts/"
+                    "/fonts/type1/public/txfonts/"
+                    "/fonts/vf/public/txfonts/"
+
+                    "/fonts/map/dvips/txfonts/"
+                    "/fonts/enc/dvips/txfonts/"
+                    "/tex/latex/txfonts/")
+              (base32
+               "017zjas5y1zlyq0iy4x6mv1qbz23xcy3y5xs0crj6zdnfvnccqgp")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/txfonts")
     (synopsis "Times-like fonts in support of mathematics")
     (description
      "Txfonts supplies virtual text roman fonts using Adobe Times (or URW
@@ -4747,6 +5414,9 @@ 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-public texlive-fonts-iwona
   (package
     (name "texlive-fonts-iwona")
@@ -5533,8 +6203,7 @@ develop documents with LaTeX, in a single application.")
              (delete-file "book.pdf")
              #t)))))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-latex-amsfonts
-                                        texlive-fonts-amsfonts
+     `(("texlive" ,(texlive-union (list texlive-amsfonts
                                         texlive-fonts-adobe-palatino
                                         texlive-fonts-adobe-zapfding
                                         texlive-fonts-knuth-lib
@@ -6156,119 +6825,45 @@ titles.")
     ;; No version of the GPL is specified.
     (license license:gpl3+)))
 
-(define-public texlive-generic-xypic
-  (package
-    (name "texlive-generic-xypic")
-    (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/"
-                                 "/tex/generic/xypic"))
-             (revision %texlive-revision)))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "1g5cyxwdfznq4lk9zl6fkjkapmhmwd2cm4m5aibxj20qgwnaggfz"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/generic/xypic")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
-    (home-page "https://www.ctan.org/pkg/xypic")
-    (synopsis "Flexible diagramming macros for TeX")
-    (description
-     "A package for typesetting a variety of graphs and diagrams with TeX.
-Xy-pic works with most formats (including LaTeX, AMS-LaTeX, AMS-TeX, and plain
-TeX).")
-    (license license:gpl3+)))
+(define-public texlive-xypic
+  (let ((template (simple-texlive-package
+                   "texlive-xypic"
+                   (list "/doc/generic/xypic/"
+                         "/dvips/xypic/xy389dict.pro"
+                         "/fonts/enc/dvips/xypic/"
+                         "/fonts/map/dvips/xypic/xypic.map"
+
+                         "/fonts/source/public/xypic/"
+                         "/fonts/afm/public/xypic/"
+                         "/fonts/tfm/public/xypic/"
+                         "/fonts/type1/public/xypic/"
+
+                         ;;"/tex/generic/xypic/" ; I guess these are generated
+                         )
+                   (base32
+                    "0sqkkvjzzsiazvh8803qqyrcv4is3m1qs9x9v2m35jjikbqc08y8"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "tex/generic/xypic")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (delete 'reset-gzip-timestamps)))))
+      (home-page "https://www.ctan.org/pkg/xypic")
+      (synopsis "Flexible diagramming macros")
+      (description "This is a package for typesetting a variety of graphs and
+diagrams with TeX.  Xy-pic works with most formats (including LaTeX,
+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
-  (package
-    (name "texlive-fonts-xypic")
-    (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/xypic"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0p20v1257kwsqnrk98cdhhiz2viv8l3ly4xay4by0an3j37m9xs3"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (ice-9 match))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match))
-         (let ((root (string-append (assoc-ref %outputs "out")
-                                    "/share/texmf-dist/"))
-               (pkgs '(("source" . "fonts/source/public/xypic")
-                       ("xypic-afm" . "fonts/afm/public/xypic")
-                       ("xypic-type1" . "fonts/type1/public/xypic")
-                       ("xypic-enc" . "fonts/enc/dvips/xypic"))))
-           (for-each (match-lambda
-                       ((pkg . dir)
-                        (let ((target (string-append root dir)))
-                          (mkdir-p target)
-                          (copy-recursively (assoc-ref %build-inputs pkg)
-                                            target))))
-                     pkgs)
-           #t))))
-    (native-inputs
-     `(("xypic-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/public/xypic"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "149xdijxp8lw3s0qv2aqxxxyyn748z57dpr596rjvkqdffpnsddh"))))
-       ("xypic-type1"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/type1/public/xypic"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-type1-" version "-checkout"))
-           (sha256
-            (base32
-             "1bln89wib7g3hcv2jny3qi6jb73k9d2vbgx3wnnjwp3ryg0846if"))))
-       ("xypic-enc"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/enc/dvips/xypic"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-enc-" version "-checkout"))
-           (sha256
-            (base32
-             "0yi8vms3203l3p5slnhrrlzzp0f0jw77fkcvcaicrz2vmw9z99x7"))))))
-    (home-page "https://www.ctan.org/pkg/xypic")
-    (synopsis "Fonts for XY-pic")
-    (description "This package provides the XY-pic fonts.")
-    (license license:gpl3+)))
+  (deprecated-package "texlive-fonts-xypic" texlive-xypic))
+
+(define-public texlive-generic-xypic
+  (deprecated-package "texblive-generic-xypic" texlive-xypic))
 
 (define-public texlive-bibtex
   (package
@@ -6306,74 +6901,29 @@ be specified in the document itself (one often needs a LaTeX citation-style
 package, such as @command{natbib} as well).")
     (license license:knuth)))
 
-(define-public texlive-fonts-charter
+(define-public texlive-charter
   (package
-    (name "texlive-fonts-charter")
-    (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/type1/bitstrea/charter"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0yvib45xxff3jm5270zij4q888pivbc18cqs7lz4pqfhn1am4wnv"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (ice-9 match))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match))
-         (let ((root (string-append (assoc-ref %outputs "out")
-                                    "/share/texmf-dist/"))
-               (pkgs '(("source" . "fonts/type1/bitstrea/charter")
-                       ("charter-afm" . "fonts/afm/bitstrea/charter")
-                       ("charter-tfm" . "fonts/tfm/bitstrea/charter"))))
-           (for-each (match-lambda
-                       ((pkg . dir)
-                        (let ((target (string-append root dir)))
-                          (mkdir-p target)
-                          (copy-recursively (assoc-ref %build-inputs pkg)
-                                            target))))
-                     pkgs)
-           #t))))
-    (native-inputs
-     `(("charter-afm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/afm/bitstrea/charter"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-afm-" version "-checkout"))
-           (sha256
-            (base32
-             "02nbkqrlr3vypnzslmr7dxg1353mmc0rl4ynx0s6qbvf313fq76a"))))
-       ("charter-tfm"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/tfm/bitstrea/charter"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-tfm-" version "-checkout"))
-           (sha256
-            (base32
-             "0j7ci9vprivbhac70aq0z7m23hqcpx1g0i3wp1k0h8ilhimj80xk"))))))
+    (inherit (simple-texlive-package
+              "texlive-charter"
+              (list "/doc/fonts/charter/readme.charter"
+                    "/fonts/afm/bitstrea/charter/"
+                    "/fonts/tfm/bitstrea/charter/"
+                    "/fonts/type1/bitstrea/charter/"
+                    "/fonts/vf/bitstrea/charter/")
+              (base32
+               "09l5ymgz48s3hyn776l01g3isk3dnhrj1vdavdw4qq4kfxxpqdn9")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/charter")
     (synopsis "Charter fonts for TeX")
-    (description "A commercial text font donated for the common good.  Support
-for use with LaTeX is available in @code{freenfss}, part of
+    (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}. ")
-    (license (license:non-copyleft (string-append "http://mirrors.ctan.org/"
-                                                  "fonts/charter/readme.charter")))))
+    (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-public texlive-context-base
   (package
@@ -6408,56 +6958,20 @@ supports advanced interactive documents.  See the ConTeXt garden for a wealth
 of support information.")
     (license license:gpl2+)))
 
-(define-public texlive-latex-beamer
+(define-public texlive-beamer
   (package
-    (name "texlive-latex-beamer")
-    (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/"
-                                        "/tex/latex/beamer"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "09y3qwbj0nckshvg9afgwcv9v3zdif1d7bnpzrggsa1fbr80mgk2"))))
-    (build-system trivial-build-system)
-    (outputs '("out" "doc"))
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/latex/beamer"))
-               (docs   (string-append (assoc-ref %outputs "doc")
-                                      "/share/texmf-dist/doc/latex/beamer/")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-
-           (mkdir-p docs)
-           (copy-recursively (assoc-ref %build-inputs "docs") docs)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-beamer"
+              (list "/doc/latex/beamer/"
+                    "/tex/latex/beamer/")
+              (base32
+               "00z1a32wkz1ffif7dc8h3ar2fn2hlvfnljgim2szjam2k14l82x3")
+              #: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)))
-    (native-inputs
-     `(("docs"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/doc/latex/beamer"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-" version "-checkout"))
-           (sha256
-            (base32
-             "102b18b9nw9dicqqgjwx0srh1mav8vh9wdvwayn741niza9hac23"))))))
     (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.
@@ -6473,6 +6987,9 @@ 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-public texlive-latex-xmpincl
   (package
     (name "texlive-latex-xmpincl")
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 7d5f6797dc..4412d54579 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -400,15 +400,14 @@ editors.")
 (define-public texmacs
   (package
     (name "texmacs")
-    (version "1.99.9")
+    (version "1.99.11")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.texmacs.org/Download/ftp/tmftp/"
                            "source/TeXmacs-" version "-src.tar.gz"))
        (sha256
-        (base32
-         "0i95sf9y8qpgxd8f39cprbp3s200nm9lml0xdpyn46n838acvw19"))
+        (base32 "12bp0f34izzqimz49lfpgf4lyz3h45s9xbmk8v6zsawdjki76alg"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -424,7 +423,7 @@ editors.")
        ("python" ,python-wrapper)
        ("qt" ,qt-4)))
     (arguments
-     `(#:tests? #f ;no check target
+     `(#:tests? #f                      ; no check target
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'gzip-flags
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index f2716bed4e..e83b1d95e3 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -146,14 +146,14 @@ as well as the classic centralized workflow.")
    (name "git")
    ;; XXX When updating Git, check if the special 'git-source' input to cgit
    ;; needs to be updated as well.
-   (version "2.22.0")
+   (version "2.22.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "17zj6jwx3s6bybd290f1mj5iym1r64560rmnf0p63x4akxclp7hm"))))
+              "093qjgagha937w96izkpsjkhxf5drsa7rvk5snlyjivqnwxgkqac"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -166,7 +166,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "0fpfqw0h4g4v478fscic8z714i0ls5w7946vzhmq31lf7nizsb2f"))))
+            "17vpqv9g8li58njx7z5124b3c2zb2n63z4dalh5gw9iys7qb8446"))))
       ;; For subtree documentation.
       ("asciidoc" ,asciidoc)
       ("docbook-xsl" ,docbook-xsl)
@@ -1301,7 +1301,7 @@ following features:
 (define-public subversion
   (package
     (name "subversion")
-    (version "1.10.4")
+    (version "1.10.6")
     (source (origin
              (method url-fetch)
              (uri
@@ -1312,7 +1312,7 @@ following features:
                                 "subversion-" version ".tar.bz2")))
              (sha256
               (base32
-               "18c1vdq32nil76w678lxmp73jsbqha3dmzgmfrj76nc0xjmywql2"))))
+               "19zc215mhpnm92mlyl5jbv57r5zqp6cavr3s2g9yglp6j4kfgj0q"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 7f7e8ea855..7225e9e5da 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -473,16 +473,18 @@ and creating Matroska files from other media files (@code{mkvmerge}).")
 (define-public x265
   (package
     (name "x265")
-    (version "3.1.1")
+    (version "3.1.2")
     (outputs '("out" "static"))
     (source
       (origin
         (method url-fetch)
-        (uri (string-append "https://download.videolan.org/videolan/x265/"
-                            "x265_" version ".tar.gz"))
+        (uri (list (string-append "https://bitbucket.org/multicoreware/x265"
+                                  "/downloads/x265_" version ".tar.gz")
+                   (string-append "https://download.videolan.org/videolan/x265/"
+                                  "x265_" version ".tar.gz")))
         (sha256
          (base32
-          "1l68lgdbsi4wjz5vad98ggx7mf92rnvzlq34m6w0a08ark3h0yc2"))
+          "1ajr59gjj47gnczfb2qhmzclj746pdiq9a1d81b0mq22k8f5yy3g"))
         (patches (search-patches "x265-arm-flags.patch"))
         (modules '((guix build utils)))
         (snippet '(begin
@@ -700,7 +702,7 @@ libebml is a C++ library to read and write EBML files.")
 (define-public libva
   (package
     (name "libva")
-    (version "2.4.1")
+    (version "2.5.0")
     (source
      (origin
        (method url-fetch)
@@ -712,7 +714,7 @@ libebml is a C++ library to read and write EBML files.")
              (string-append "https://www.freedesktop.org/software/vaapi/releases/"
                             "libva/libva-" version "/libva-" version ".tar.bz2")))
        (sha256
-        (base32 "0w7fkkrnfizzglviybxiyhxcvd3mfsiqlpda7rwj3ccihn857q79"))))
+        (base32 "0y38mw1ggxm15zq06r4qpwhd5wx4bppw1rsxpr6sq1m5d79rra1s"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -790,17 +792,18 @@ operate properly.")
 (define-public ffmpeg
   (package
     (name "ffmpeg")
-    (version "4.1.4")
+    (version "4.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1qd7a10gs12ifcp31gramcgqjl77swskjfp7cijibgyg5yl4kw7i"))))
+               "1mgcxm7sqkajx35px05szsmn9mawwm03cfpmk3br7bcp3a1i0gq2"))))
     (build-system gnu-build-system)
     (inputs
-     `(("fontconfig" ,fontconfig)
+     `(("dav1d" ,dav1d)
+       ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
        ("frei0r-plugins" ,frei0r-plugins)
        ("gnutls" ,gnutls)
@@ -899,6 +902,7 @@ operate properly.")
          "--enable-libbluray"
          "--enable-libcaca"
          "--enable-libcdio"
+         "--enable-libdav1d"
          "--enable-libfreetype"
          "--enable-libmp3lame"
          "--enable-libopus"
@@ -981,9 +985,10 @@ audio/video codec library.")
     (arguments
      (substitute-keyword-arguments (package-arguments ffmpeg)
        ((#:configure-flags flags)
-        `(delete "--enable-libaom" ,flags))))
-    (inputs (alist-delete "libaom"
-                          (package-inputs ffmpeg)))))
+        `(delete "--enable-libdav1d" (delete "--enable-libaom"
+                 ,flags)))))
+    (inputs (alist-delete "dav1d" (alist-delete "libaom"
+                          (package-inputs ffmpeg))))))
 
 (define-public ffmpeg-for-stepmania
   (hidden-package
@@ -1480,7 +1485,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2019.07.30")
+    (version "2019.08.02")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/rg3/youtube-dl/releases/"
@@ -1488,7 +1493,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0nb5xvq4aq0az8y5wb54zp5q4qzfhs7rcb39yp6j5q8jyjp9kzwy"))))
+                "101b6jrf6ckbxrn76ppvgdyrb25p7d247kn8qgq7n476sfnkfg2p"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
@@ -1619,7 +1624,7 @@ other site that youtube-dl supports.")
 (define-public you-get
   (package
     (name "you-get")
-    (version "0.4.1302")
+    (version "0.4.1328")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1628,7 +1633,7 @@ other site that youtube-dl supports.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fwwzslv1vpjr8q0fq10dbngr8zai1n3d6na700cgpky4j9y0y99"))))
+                "1r9qffwvxmp74byva12h2jsn3n33vyim052sx9lykv5dygibbp65"))))
     (build-system python-build-system)
     (inputs
      `(("ffmpeg" ,ffmpeg)))             ; for multi-part and >=1080p videos
@@ -2061,12 +2066,6 @@ capabilities.")
        ("libass" ,libass)
        ("tesseract-ocr" ,tesseract-ocr)
        ("zimg" ,zimg)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
-           (lambda _
-             (invoke "sh" "autogen.sh"))))))
     (home-page "http://www.vapoursynth.com/")
     (synopsis "Video processing framework")
     (description "VapourSynth is a C++ library and Python module for video
@@ -2509,12 +2508,6 @@ Other features include a live preview and live streaming.")
                (base32
                 "18yfkr70lr1x1hc8snn2ldnbzdcc7b64xmkqrfk8w59gpg7sl1xn"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'autogen.sh
-           (lambda _
-             (invoke "sh" "autogen.sh"))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)))
@@ -2766,6 +2759,7 @@ of modern, widely supported codecs.")
      (list (search-path-specification
             (variable "LIBVA_DRIVERS_PATH")
             (files '("lib/dri")))))
+    (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page "https://01.org/linuxmedia/vaapi")
     (synopsis "VA-API video acceleration driver for Intel GEN Graphics devices")
     (description
@@ -2898,10 +2892,7 @@ practically any type of media.")
          (add-after 'unpack 'change-to-build-dir
            (lambda _
              (chdir "Project/GNU/Library")
-             #t))
-         (add-after 'change-to-build-dir 'autogen
-           (lambda _
-             (invoke "sh" "autogen.sh"))))))
+             #t)))))
     (home-page "https://mediaarea.net/en/MediaInfo")
     (synopsis "Library for retrieving media metadata")
     (description "MediaInfo is a library used for retrieving technical
@@ -3538,7 +3529,7 @@ transitions, and effects and then export your film to many common formats.")
 (define-public dav1d
   (package
     (name "dav1d")
-    (version "0.2.2")
+    (version "0.4.0")
     (source
       (origin
         (method url-fetch)
@@ -3550,7 +3541,8 @@ transitions, and effects and then export your film to many common formats.")
                    (string-append "https://code.videolan.org/videolan/dav1d/-/"
                                   "archive/" version "/dav1d-" version ".tar.bz2")))
         (sha256
-         (base32 "1llf4v486avj83d31670vdd5nshbq10qrx9vwrm1j078dh4ax4q0"))))
+         (base32
+          "08yqml01lbcpflrshdpvn88jv3xd8gm559qikiwyrh41a3kb4lr5"))))
     (build-system meson-build-system)
     (native-inputs `(("nasm" ,nasm)))
     (home-page "https://code.videolan.org/videolan/dav1d")
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index e06edd5be9..1eede0b22a 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -814,7 +814,7 @@ refactor Vim in order to:
 (define-public vifm
   (package
     (name "vifm")
-    (version "0.10")
+    (version "0.10.1")
     (source
       (origin
         (method url-fetch)
@@ -825,35 +825,35 @@ refactor Vim in order to:
                               "vifm-" version ".tar.bz2")))
         (sha256
          (base32
-          "1f380xcyjnm4xmcdazs6dj064bwddhywvn3mgm36k7r7b2gnjnp0"))))
+          "0fyhxh7ndjn8fyjhj14ymkr3pjcs3k1xbs43g7xvvq85vdb6y04r"))))
     (build-system gnu-build-system)
     (arguments
-    '(#:configure-flags '("--disable-build-timestamp")
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'patch-source-shebangs 'patch-test-shebangs
-          (lambda _
-            (substitute* (cons* "src/background.c"
-                                "src/cfg/config.c"
-                                (find-files "tests" "\\.c$"))
-              (("/bin/sh") (which "sh"))
-              (("/bin/bash") (which "bash")))
-            ;; This test segfaults
-            (substitute* "tests/Makefile"
-              (("misc") ""))
-            #t))
-         (add-after 'install 'install-vim-plugin-files
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (vifm (string-append out "/share/vifm"))
-                    (vimfiles (string-append out "/share/vim/vimfiles")))
-               (copy-recursively (string-append vifm "/colors")
-                                 (string-append vimfiles "/colors"))
-               (copy-recursively (string-append vifm "/vim")
-                                 vimfiles)
-               (delete-file-recursively (string-append vifm "/colors"))
-               (delete-file-recursively (string-append vifm "/vim")))
-             #t)))))
+     '(#:configure-flags '("--disable-build-timestamp")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-source-shebangs 'patch-test-shebangs
+           (lambda _
+             (substitute* (cons* "src/background.c"
+                                 "src/cfg/config.c"
+                                 (find-files "tests" "\\.c$"))
+               (("/bin/sh") (which "sh"))
+               (("/bin/bash") (which "bash")))
+             ;; This test segfaults
+             (substitute* "tests/Makefile"
+               (("misc") ""))
+             #t))
+          (add-after 'install 'install-vim-plugin-files
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (vifm (string-append out "/share/vifm"))
+                     (vimfiles (string-append out "/share/vim/vimfiles")))
+                (copy-recursively (string-append vifm "/colors")
+                                  (string-append vimfiles "/colors"))
+                (copy-recursively (string-append vifm "/vim")
+                                  vimfiles)
+                (delete-file-recursively (string-append vifm "/colors"))
+                (delete-file-recursively (string-append vifm "/vim")))
+              #t)))))
     (native-inputs
      `(("groff" ,groff))) ; for the documentation
     (inputs
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index b4b9dfc411..5535d7a421 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -391,16 +391,14 @@ manage system or application containers.")
 (define-public libvirt
   (package
     (name "libvirt")
-    (version "5.5.0")
+    (version "5.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://libvirt.org/sources/libvirt-"
                            version ".tar.xz"))
        (sha256
-        (base32 "1s1mzw4cmkcfivs1kphpgy4lpddx0w1qnjysr4ggk5558w4yy1i3"))
-       (patches
-        (search-patches "libvirt-remove-ATTRIBUTE_UNUSED.patch"))))
+        (base32 "1d5rmcx5fgb024hw8chbiv886n3jal5wp2yajjk5l4qh9s9gkx35"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -534,15 +532,15 @@ three libraries:
 (define-public python-libvirt
   (package
     (name "python-libvirt")
-    (version "5.5.0")
+    (version "5.6.0")
     (source
      (origin
        (method url-fetch)
-       ;; The latest version hosted on PyPI at 5.5.0 release time was 5.3.0.
+       ;; The latest version hosted on PyPI at 5.6.0 release time was 5.5.0.
        (uri (string-append "https://libvirt.org/sources/python/libvirt-python-"
                            version ".tar.gz"))
        (sha256
-        (base32 "00x6idyw9xrrr21vrnsyw37q2sd8yh4n6pwh0l28hh9yp3nsy72n"))))
+        (base32 "11i440aibykxw22fzyavmrvn67s8rmnijw5bag0yx9r8jpnkzwad"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index c7046b7f50..3c6db64ad7 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2013, 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com>
@@ -227,11 +227,6 @@ the entire VPN in a network namespace accessible only through SSH.")
        ("automake" ,automake)))
     (inputs
      `(("libevent" ,libevent)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
-           (lambda _ (invoke "sh" "autogen.sh"))))))
     (home-page "https://github.com/cernekee/ocproxy")
     (synopsis "OpenConnect proxy")
     (description
@@ -244,19 +239,20 @@ the user specifically asks to proxy, so the @dfn{VPN} interface no longer
 (define-public openconnect
   (package
    (name "openconnect")
-   (version "8.03")
+   (version "8.04")
    (source (origin
             (method url-fetch)
             (uri (string-append "ftp://ftp.infradead.org/pub/openconnect/"
                                 "openconnect-" version ".tar.gz"))
-            (sha256 (base32
-                     "1wlypi68kqqg2mdck8wvf6aanhrmf9i7z6lngyxvcrp23jdzz34h"))))
+            (sha256
+             (base32 "07zqcl2ykdc4mgix9sbv4jgpg7cybifxfgrycvf99ckq7xp9r5wq"))))
    (build-system gnu-build-system)
-   (inputs
+   (propagated-inputs
     `(("libxml2" ,libxml2)
       ("gnutls" ,gnutls)
-      ("vpnc-scripts" ,vpnc-scripts)
       ("zlib" ,zlib)))
+   (inputs
+    `(("vpnc-scripts" ,vpnc-scripts)))
    (native-inputs
     `(("gettext" ,gettext-minimal)
       ("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index 160d2615ff..9111a93be5 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -150,7 +150,7 @@ interpretation of the specifications for these languages.")
 (define-public vulkan-headers
   (package
     (name "vulkan-headers")
-    (version "1.1.112")
+    (version "1.1.114")
     (source
      (origin
        (method git-fetch)
@@ -160,7 +160,7 @@ interpretation of the specifications for these languages.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0iia2wlq38hvxwip6r3k5946ylrlk42fw50mhf0pdjxjh02p8zn5"))))
+         "0fdvh26nxibylh32lj8b62d9nf9j25xa0il9zg362wmr2zgm8gka"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; No tests.
@@ -184,7 +184,7 @@ interpretation of the specifications for these languages.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1819bgmpjlikcc25bkmwwb7mp1rlyrq2v74wybg1g40ix70v0m0d"))))
+         "1rkm6dzdzxva62shscipz3kpp66x4kgmwvp1ski2fvf4jzzcbv7h"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ;FIXME: 23/39 tests fail.  Try "tests/run_all_tests.sh".
@@ -257,7 +257,7 @@ and the ICD.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0an9hqvvpfmfld2pkszzwi7ccb9g2ijjqqzlj24dqg9kqnmcr3x4"))))
+         "1lz06mpni8ghf1xcxi4g6ck306lfaqwfi6f1w64kp9hczmvapfhf"))))
     (build-system cmake-build-system)
     (inputs
      `(("glslang" ,glslang)
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 1cf9794a94..9f80c404d4 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -2231,7 +2231,7 @@ development server with Starman.")
 (define-public perl-cgi
   (package
     (name "perl-cgi")
-    (version "4.38")
+    (version "4.44")
     (source
      (origin
        (method url-fetch)
@@ -2239,7 +2239,7 @@ development server with Starman.")
                            "CGI-" version ".tar.gz"))
        (sha256
         (base32
-         "1m779315rzj4mpgscw209a2wk18iwg2n8zibn8aak4mv56jz8n4c"))))
+         "020jrygslqixrxd2nzc2l8ac39ynqzsy83nnnr3mqn6kxfvmyhqj"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-test-deep" ,perl-test-deep)
@@ -2874,7 +2874,7 @@ used by the HTTP protocol (and then some more).")
 (define-public perl-http-message
   (package
     (name "perl-http-message")
-    (version "6.15")
+    (version "6.18")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -2882,7 +2882,7 @@ used by the HTTP protocol (and then some more).")
                    version ".tar.gz"))
              (sha256
               (base32
-               "11fbvisyvi6bw8z9iq9fm9mraf69qyds09fblhl9gyvg7ccll93v"))))
+               "04lih0fn89jpyk74c4aq1rzq18h8v4zd3x0lik2r9dl8sdqd2q6h"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-try-tiny" ,perl-try-tiny)))
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index 62cf225ceb..43dae3cf7c 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -164,10 +164,14 @@
                       (copy-file (string-append (assoc-ref inputs "mesa")
                                  "/share/vulkan/icd.d/radeon_icd.i686.json")
                                  (string-append icd "/radeon_icd.i686.json"))
+                      (copy-file (string-append (assoc-ref inputs "mesa")
+                                 "/share/vulkan/icd.d/intel_icd.i686.json")
+                                 (string-append icd "/intel_icd.i686.json"))
                       (wrap-program (string-append out "/bin/wine-preloader")
                                     `("VK_ICD_FILENAMES" ":" =
                                       (,(string-append icd
-                                        "/radeon_icd.i686.json"))))
+                                        "/radeon_icd.i686.json" ":"
+                                        icd "/intel_icd.i686.json"))))
                       #t)))))
              (_
               `())
@@ -224,7 +228,9 @@ integrate Windows applications into your desktop.")
                                      (assoc-ref inputs "mesa")
                                      "/share/vulkan/icd.d/intel_icd.x86_64.json" ":"
                                      (assoc-ref inputs "wine")
-                                     "/share/vulkan/icd.d/radeon_icd.i686.json"))))
+                                     "/share/vulkan/icd.d/radeon_icd.i686.json" ":"
+                                     (assoc-ref inputs "wine")
+                                     "/share/vulkan/icd.d/intel_icd.i686.json"))))
                    (wrap-program (string-append out "/bin/wine64-preloader")
                                  `("VK_ICD_FILENAMES" ":" =
                                    (,(string-append (assoc-ref inputs "mesa")
@@ -232,7 +238,9 @@ integrate Windows applications into your desktop.")
                                      ":" (assoc-ref inputs "mesa")
                                      "/share/vulkan/icd.d/intel_icd.x86_64.json"
                                      ":" (assoc-ref inputs "wine")
-                                     "/share/vulkan/icd.d/radeon_icd.i686.json"))))
+                                     "/share/vulkan/icd.d/radeon_icd.i686.json"
+                                     ":" (assoc-ref inputs "wine")
+                                     "/share/vulkan/icd.d/intel_icd.i686.json"))))
                    #t)))))
            (_
             `())
@@ -310,7 +318,7 @@ integrate Windows applications into your desktop.")
 (define-public wine-staging-patchset-data
   (package
     (name "wine-staging-patchset-data")
-    (version "4.12.1")
+    (version "4.13")
     (source
      (origin
        (method git-fetch)
@@ -320,7 +328,7 @@ integrate Windows applications into your desktop.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1bvpvj6vcw2p6vcjm6mw5maarbs4lfw1ix3pj020w4n3kg4nmmc4"))))
+         "0bbwsd2qpjilxpjscqbp78p0gl0awj1yj62g0wvybh4x89fzy8zj"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("bash" ,bash)
@@ -366,7 +374,7 @@ integrate Windows applications into your desktop.")
               (file-name (string-append name "-" version ".tar.xz"))
               (sha256
                (base32
-                "09yjfb2k14y11k19lm8dqmb8qwxyhh67d5q1gqv480y64mljvkx0"))))
+                "0rqx8g394aj5q913cd18zsi60sldvxarrp178w6ja0y4rd8l25vr"))))
     (inputs `(("autoconf" ,autoconf) ; for autoreconf
               ("faudio" ,faudio)
               ("ffmpeg" ,ffmpeg)
@@ -393,10 +401,14 @@ integrate Windows applications into your desktop.")
                       (copy-file (string-append (assoc-ref inputs "mesa")
                                  "/share/vulkan/icd.d/radeon_icd.i686.json")
                                  (string-append icd "/radeon_icd.i686.json"))
+                      (copy-file (string-append (assoc-ref inputs "mesa")
+                                 "/share/vulkan/icd.d/intel_icd.i686.json")
+                                 (string-append icd "/intel_icd.i686.json"))
                       (wrap-program (string-append out "/bin/wine-preloader")
                                     `("VK_ICD_FILENAMES" ":" =
                                       (,(string-append icd
-                                        "/radeon_icd.i686.json"))))
+                                        "/radeon_icd.i686.json" ":"
+                                        icd "/intel_icd.i686.json"))))
                       #t)))))
              (_
               `())
@@ -407,10 +419,7 @@ integrate Windows applications into your desktop.")
                     (script (string-append (assoc-ref %build-inputs
                             "wine-staging-patchset-data")
                             "/share/wine-staging/patches/patchinstall.sh")))
-               ;; Exclude specific patches that conflict with FAudio.
-               (invoke script (string-append "DESTDIR=" ".") "--all" "-W"
-                       "xaudio2-revert" "-W" "xaudio2_CommitChanges" "-W"
-                       "xaudio2_7-WMA_support" "-W" "xaudio2_7-CreateFX-FXEcho")
+               (invoke script (string-append "DESTDIR=" ".") "--all")
                #t)))
          (add-after 'configure 'patch-dlopen-paths
            ;; Hardcode dlopened sonames to absolute paths.
@@ -467,7 +476,9 @@ integrated into the main branch.")
                                      (assoc-ref inputs "mesa")
                                      "/share/vulkan/icd.d/intel_icd.x86_64.json" ":"
                                      (assoc-ref inputs "wine-staging")
-                                     "/share/vulkan/icd.d/radeon_icd.i686.json"))))
+                                     "/share/vulkan/icd.d/radeon_icd.i686.json" ":"
+                                     (assoc-ref inputs "wine-staging")
+                                     "/share/vulkan/icd.d/intel_icd.i686.json"))))
                    (wrap-program (string-append out "/bin/wine64-preloader")
                                  `("VK_ICD_FILENAMES" ":" =
                                    (,(string-append (assoc-ref inputs "mesa")
@@ -475,7 +486,9 @@ integrated into the main branch.")
                                      ":" (assoc-ref inputs "mesa")
                                      "/share/vulkan/icd.d/intel_icd.x86_64.json"
                                      ":" (assoc-ref inputs "wine-staging")
-                                     "/share/vulkan/icd.d/radeon_icd.i686.json"))))
+                                     "/share/vulkan/icd.d/radeon_icd.i686.json"
+                                     ":" (assoc-ref inputs "wine-staging")
+                                     "/share/vulkan/icd.d/intel_icd.i686.json"))))
                    #t)))))
            (_
             `())
@@ -487,9 +500,7 @@ integrated into the main branch.")
                             "wine-staging-patchset-data")
                             "/share/wine-staging/patches/patchinstall.sh")))
                ;; Exclude specific patches that conflict with FAudio.
-               (invoke script (string-append "DESTDIR=" ".") "--all" "-W"
-                       "xaudio2-revert" "-W" "xaudio2_CommitChanges" "-W"
-                       "xaudio2_7-WMA_support" "-W" "xaudio2_7-CreateFX-FXEcho")
+               (invoke script (string-append "DESTDIR=" ".") "--all")
                #t)))
          (add-after 'install 'copy-wine32-binaries
            (lambda* (#:key outputs #:allow-other-keys)
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 02dfa0143f..709037da37 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -130,20 +130,19 @@ the leaves of a full binary tree.")
 (define-public i3status
   (package
     (name "i3status")
-    (version "2.12")
+    (version "2.13")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://i3wm.org/i3status/i3status-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "06krpbijv4yi33nypg6qcn4hilcrdyarsdpd9fmr2cq46qaqiikg"))))
+                "0rhlzb96mw64z2jnhwz9nibc7pxg549626lz5642xxk5hpzwk2ff"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure))
+     `(;; XXX: Do an "out of source" build to work around
+       ;; <https://github.com/i3/i3status/issues/339>.
+       #:out-of-source? #t
        #:tests? #f)) ; no test suite
     (inputs
      `(("openlibm" ,openlibm)
@@ -155,7 +154,10 @@ the leaves of a full binary tree.")
        ("libcap" ,libcap)
        ("asciidoc" ,asciidoc)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ("docbook-xsl" ,docbook-xsl)
+       ("libxml2" ,libxml2)             ;for XML_CATALOG_FILES
+       ("xmlto" ,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
@@ -170,14 +172,14 @@ commands would.")
 (define-public i3-wm
   (package
     (name "i3-wm")
-    (version "4.16.1")
+    (version "4.17")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://i3wm.org/downloads/i3-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0xl56y196vxv001gvx35xwfr25zah8m3xwizp9ycdgdc0rfc4rdb"))))
+                "1z8qmkkq9dhqmqy8sjw3rnpnmnb8v7lr456bs0qzp23bgpj17gjf"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -287,8 +289,6 @@ Despite the name it should work with any X11 window manager.")
       (arguments
        `(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
          #:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'autogen
-                      (lambda _ (invoke "sh" "autogen.sh")))
                     (add-after 'install 'install-doc
                       (lambda* (#:key outputs #:allow-other-keys)
                         (let* ((out (assoc-ref outputs "out"))
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index 804cfd39a7..bac6ac0d4d 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -235,15 +235,14 @@ It currently supports:
 (define flac
   (package
    (name "flac")
-   (version "1.3.2")
+   (version "1.3.3")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://downloads.xiph.org/releases/flac/flac-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0gymm2j3276kr9nz6vmgfwsdfrq6c449n40a0mzz8h6wc7nw7kwi"))
-            (patches (search-patches "flac-CVE-2017-6888.patch"))))
+              "0j0p9sf56a2fm2hkjnf7x3py5ir49jyavg4q5zdyd7bcf6yq4gi1"))))
    (build-system gnu-build-system)
    (arguments
     `(#:parallel-tests? #f))
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 62ff420171..e4848b7bee 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -1136,7 +1136,7 @@ themselves.")
 (define-public libpciaccess
   (package
     (name "libpciaccess")
-    (version "0.14")
+    (version "0.16")
     (source
       (origin
         (method url-fetch)
@@ -1146,7 +1146,7 @@ themselves.")
                ".tar.bz2"))
         (sha256
           (base32
-            "197jbcpvp4z4x6j705mq2y4fsnnypy6f85y8xalgwhgx5bhl7x9x"))))
+            "12glp4w1kgvmqn89lk19cgr6jccd3awxra4dxisp7pagi06rsk11"))))
     (build-system gnu-build-system)
     (arguments
      '(;; Make sure libpciaccess can read compressed 'pci.ids' files as
@@ -2921,8 +2921,8 @@ X server.")
 
 
 (define-public xf86-video-intel
-  (let ((commit "6afed33b2d673d88674f0c76efe500ae414e8e1b")
-        (revision "13"))
+  (let ((commit "6f4972d5c368c30e971a23c1dc370d3e43761282")
+        (revision "14"))
     (package
       (name "xf86-video-intel")
       (version (git-version "2.99.917" revision commit))
@@ -2935,7 +2935,7 @@ X server.")
                (commit commit)))
          (sha256
           (base32
-           "1s3fqlqzmql7s15m7qy21vai93n6q9f0ccpv0p353rwfx16mmf35"))
+           "0bc46qqglzfm4g9q4c2vgynvps2ng0xvlxnjpm9d6z4q6scdhz59"))
          (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (inputs `(("mesa" ,mesa)
diff --git a/gnu/tests/reconfigure.scm b/gnu/tests/reconfigure.scm
index 3a2f0a2e53..fb11e6164e 100644
--- a/gnu/tests/reconfigure.scm
+++ b/gnu/tests/reconfigure.scm
@@ -19,8 +19,10 @@
 (define-module (gnu tests reconfigure)
   #:use-module (gnu bootloader)
   #:use-module (gnu services shepherd)
-  #:use-module (gnu system vm)
   #:use-module (gnu system)
+  #:use-module (gnu system accounts)
+  #:use-module (gnu system shadow)
+  #:use-module (gnu system vm)
   #:use-module (gnu tests)
   #:use-module (guix derivations)
   #:use-module (guix gexp)
@@ -43,7 +45,13 @@
 generation of the system profile."
   (define os
     (marionette-operating-system
-     (simple-operating-system)
+     (operating-system
+       (inherit (simple-operating-system))
+       (users (cons (user-account
+                     (name "jakob")
+                     (group "users")
+                     (home-directory "/home/jakob"))
+                    %base-user-accounts)))
      #:imported-modules '((gnu services herd)
                           (guix combinators))))
 
@@ -84,7 +92,25 @@ generation of the system profile."
 
             (test-equal "script created new generation"
               (length (system-generations marionette))
-              (1+ (length generations-prior))))
+              (1+ (length generations-prior)))
+
+            (test-assert "script activated the new generation"
+              (and (eqv? 'symlink
+                         (marionette-eval
+                          '(stat:type (lstat "/run/current-system"))
+                          marionette))
+                   (string= #$os
+                            (marionette-eval
+                             '(readlink "/run/current-system")
+                             marionette))))
+
+            (test-assert "script activated user accounts"
+              (marionette-eval
+               '(string-contains (call-with-input-file "/etc/passwd"
+                                   (lambda (port)
+                                     (get-string-all port)))
+                                 "jakob")
+               marionette)))
 
           (test-end)
           (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
diff --git a/guix/build-system/texlive.scm b/guix/build-system/texlive.scm
index b6a86a1c62..ad99d1e2d0 100644
--- a/guix/build-system/texlive.scm
+++ b/guix/build-system/texlive.scm
@@ -30,6 +30,7 @@
             texlive-build
             texlive-build-system
             texlive-ref
+            texlive-origin
             %texlive-tag
             %texlive-revision))
 
@@ -44,6 +45,20 @@
 (define %texlive-tag "texlive-2018.2")
 (define %texlive-revision 49435)
 
+(define (texlive-origin name version locations hash)
+  "Return an <origin> object for a TeX Live package consisting of multiple
+LOCATIONS with a provided HASH.  Use NAME and VERSION to compute a prettier
+name for the checkout directory."
+  (origin
+    (method svn-multi-fetch)
+    (uri (svn-multi-reference
+          (url (string-append "svn://www.tug.org/texlive/tags/"
+                              %texlive-tag "/Master/texmf-dist/"))
+          (locations locations)
+          (revision %texlive-revision)))
+    (file-name (string-append name "-" version "-checkout"))
+    (sha256 hash)))
+
 (define (texlive-ref component id)
   "Return a <svn-reference> object for the package ID, which is part of the
 given Texlive COMPONENT."
diff --git a/guix/build/ant-build-system.scm b/guix/build/ant-build-system.scm
index d79a2d55ed..49549c1b4b 100644
--- a/guix/build/ant-build-system.scm
+++ b/guix/build/ant-build-system.scm
@@ -43,7 +43,8 @@
   (call-with-output-file "build.xml"
     (lambda (port)
       (sxml->xml
-       `(project (@ (basedir "."))
+       `(project (@ (basedir ".")
+                    (name ,jar-name))
                  (property (@ (name "classes.dir")
                               (value "${basedir}/build/classes")))
                  (property (@ (name "manifest.dir")
@@ -118,10 +119,9 @@
                  (target (@ (name "jar")
                             (depends "compile, manifest"))
                          (mkdir (@ (dir "${jar.dir}")))
-                         (exec (@ (executable "jar"))
-                               (arg (@ (line ,(string-append "-cmf ${manifest.file} "
-                                                             "${jar.dir}/" jar-name
-                                                             " -C ${classes.dir} ."))))))
+                         (jar (@ (destfile ,(string-append "${jar.dir}/" jar-name))
+                                 (manifest "${manifest.file}")
+                                 (basedir "${classes.dir}"))))
 
                  (target (@ (name "install"))
                          (copy (@ (todir "${dist.dir}"))
diff --git a/guix/build/cargo-build-system.scm b/guix/build/cargo-build-system.scm
index f38de16cf7..7d363a18a5 100644
--- a/guix/build/cargo-build-system.scm
+++ b/guix/build/cargo-build-system.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
+;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,6 +40,21 @@
 ;;
 ;; Code:
 
+;; TODO: Move this to (guix build cargo-utils). Will cause a full rebuild
+;; of all rust compilers.
+
+(define (generate-all-checksums dir-name)
+  (for-each
+    (lambda (filename)
+      (let* ((dir (dirname filename))
+             (checksum-file (string-append dir "/.cargo-checksum.json")))
+        (when (file-exists? checksum-file) (delete-file checksum-file))
+        (display (string-append
+                   "patch-cargo-checksums: generate-checksums for "
+                   dir "\n"))
+        (generate-checksums dir)))
+    (find-files dir-name "Cargo.toml$")))
+
 (define (manifest-targets)
   "Extract all targets from the Cargo.toml manifest"
   (let* ((port (open-input-pipe "cargo read-manifest"))
@@ -94,8 +110,7 @@ Cargo.toml file present at its root."
               ;; so that we can generate any cargo checksums.
               ;; The --strip-components argument is needed to prevent creating
               ;; an extra directory within `crate-dir`.
-              (invoke "tar" "xvf" path "-C" crate-dir "--strip-components" "1")
-              (generate-checksums crate-dir)))))
+              (invoke "tar" "xvf" path "-C" crate-dir "--strip-components" "1")))))
     inputs)
 
   ;; Configure cargo to actually use this new directory.
@@ -121,6 +136,31 @@ directory = '" port)
   (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
   #t)
 
+;; The Cargo.lock file tells the build system which crates are required for
+;; building and hardcodes their version and checksum.  In order to build with
+;; the inputs we provide, we need to recreate the file with our inputs.
+(define* (update-cargo-lock #:key
+                            (vendor-dir "guix-vendor")
+                            #:allow-other-keys)
+  "Regenerate the Cargo.lock file with the current build inputs."
+  (when (file-exists? "Cargo.lock")
+    (begin
+      ;; Unfortunately we can't generate a Cargo.lock file until the checksums
+      ;; are generated, so we have an extra round of generate-all-checksums here.
+      (generate-all-checksums vendor-dir)
+      (delete-file "Cargo.lock")
+      (invoke "cargo" "generate-lockfile")))
+  #t)
+
+;; After the 'patch-generated-file-shebangs phase any vendored crates who have
+;; their shebangs patched will have a mismatch on their checksum.
+(define* (patch-cargo-checksums #:key
+                                (vendor-dir "guix-vendor")
+                                #:allow-other-keys)
+  "Patch the checksums of the vendored crates after patching their shebangs."
+  (generate-all-checksums vendor-dir)
+  #t)
+
 (define* (build #:key
                 skip-build?
                 (cargo-build-flags '("--release"))
@@ -162,7 +202,9 @@ directory = '" port)
     (replace 'configure configure)
     (replace 'build build)
     (replace 'check check)
-    (replace 'install install)))
+    (replace 'install install)
+    (add-after 'configure 'update-cargo-lock update-cargo-lock)
+    (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums patch-cargo-checksums)))
 
 (define* (cargo-build #:key inputs (phases %standard-phases)
                       #:allow-other-keys #:rest args)
diff --git a/guix/build/svn.scm b/guix/build/svn.scm
index 913f89471b..e3188add3e 100644
--- a/guix/build/svn.scm
+++ b/guix/build/svn.scm
@@ -36,7 +36,7 @@
   "Fetch REVISION from URL into DIRECTORY.  REVISION must be an integer, and a
 valid Subversion revision.  Return #t on success, #f otherwise."
   (apply invoke svn-command
-         "checkout" "--non-interactive"
+         "export" "--non-interactive"
          ;; Trust the server certificate.  This is OK as we
          ;; verify the checksum later.  This can be removed when
          ;; ca-certificates package is added.
@@ -46,13 +46,6 @@ valid Subversion revision.  Return #t on success, #f otherwise."
                        (string-append "--password=" password))
                  '())
            ,url ,directory))
-
-  ;; The contents of '.svn' vary as a function of the current status
-  ;; of the repo.  Since we want a fixed output, this directory needs
-  ;; to be taken out.
-  (with-directory-excursion directory
-    (for-each delete-file-recursively (find-files "." "^\\.svn$" #:directories? #t)))
-
   #t)
 
 ;;; svn.scm ends here
diff --git a/guix/scripts/deploy.scm b/guix/scripts/deploy.scm
index 52bba3f3bf..ebc99e52cc 100644
--- a/guix/scripts/deploy.scm
+++ b/guix/scripts/deploy.scm
@@ -19,6 +19,7 @@
 
 (define-module (guix scripts deploy)
   #:use-module (gnu machine)
+  #:use-module (guix discovery)
   #:use-module (guix scripts)
   #:use-module (guix scripts build)
   #:use-module (guix store)
@@ -74,7 +75,10 @@ Perform the deployment specified by FILE.\n"))
 
 (define (load-source-file file)
   "Load FILE as a user module."
-  (let ((module (make-user-module '((gnu) (gnu machine) (gnu machine ssh)))))
+  (let* ((guix-path (dirname (search-path %load-path "guix.scm")))
+         (environment-modules (scheme-modules* guix-path "gnu/machine"))
+         (module (make-user-module (append '((gnu) (gnu machine))
+                                           environment-modules))))
     (load* file module)))
 
 (define (guix-deploy . args)
diff --git a/guix/scripts/system/reconfigure.scm b/guix/scripts/system/reconfigure.scm
index 8c7d461585..579b7fffbe 100644
--- a/guix/scripts/system/reconfigure.scm
+++ b/guix/scripts/system/reconfigure.scm
@@ -161,12 +161,7 @@ services as defined by OS."
                                              target-services)
                                         (map live-service-canonical-name
                                              live-services)))
-             (service-files
-              (map shepherd-service-file
-                   (filter (lambda (service)
-                             (memq (shepherd-service-canonical-name service)
-                                   to-start))
-                           target-services))))
+             (service-files (map shepherd-service-file target-services)))
         (eval #~(primitive-load #$(upgrade-services-program service-files
                                                             to-start
                                                             to-unload
@@ -200,21 +195,31 @@ BOOTLOADER-PACKAGE."
                         (srfi srfi-34)
                         (srfi srfi-35))
            (let* ((gc-root (string-append #$target %gc-roots-directory "/bootcfg"))
-                  (temp-gc-root (string-append gc-root ".new")))
-             (switch-symlinks temp-gc-root gc-root)
-             (install-boot-config #$bootcfg #$bootcfg-file #$target)
+                  (new-gc-root (string-append gc-root ".new")))
+             ;; #$bootcfg has dependencies.
+             ;; The bootloader magically loads the configuration from
+             ;; (string-append #$target #$bootcfg-file) (for example
+             ;; "/boot/grub/grub.cfg").
+             ;; If we didn't do something special, the garbage collector
+             ;; would remove the dependencies of #$bootcfg.
+             ;; Register #$bootcfg as a GC root.
              ;; Preserve the previous activation's garbage collector root
              ;; until the bootloader installer has run, so that a failure in
              ;; the bootloader's installer script doesn't leave the user with
              ;; a broken installation.
+             (switch-symlinks new-gc-root #$bootcfg)
+             (install-boot-config #$bootcfg #$bootcfg-file #$target)
              (when #$installer
                (catch #t
                  (lambda ()
                    (#$installer #$bootloader-package #$device #$target))
                  (lambda args
-                   (delete-file temp-gc-root)
+                   (delete-file new-gc-root)
                    (apply throw args))))
-             (rename-file temp-gc-root gc-root)))))))
+             ;; We are sure that the installation of the bootloader
+             ;; succeeded, so we can replace the old GC root by the new
+             ;; GC root now.
+             (rename-file new-gc-root gc-root)))))))
 
 (define* (install-bootloader eval configuration bootcfg
                              #:key
diff --git a/guix/svn-download.scm b/guix/svn-download.scm
index c118869af1..5c25437059 100644
--- a/guix/svn-download.scm
+++ b/guix/svn-download.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in>
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +32,14 @@
             svn-reference-url
             svn-reference-revision
             svn-fetch
-            download-svn-to-store))
+            download-svn-to-store
+
+            svn-multi-reference
+            svn-multi-reference?
+            svn-multi-reference-url
+            svn-multi-reference-revision
+            svn-multi-reference-locations
+            svn-multi-fetch))
 
 ;;; Commentary:
 ;;;
@@ -83,6 +90,54 @@ HASH-ALGO (a symbol).  Use NAME as the file name, or a generic name if #f."
                       #:guile-for-build guile
                       #:local-build? #t)))
 
+(define-record-type* <svn-multi-reference>
+  svn-multi-reference make-svn-multi-reference
+  svn-multi-reference?
+  (url        svn-multi-reference-url)                 ; string
+  (revision   svn-multi-reference-revision)            ; number
+  (locations  svn-multi-reference-locations)           ; list of strings
+  (user-name  svn-multi-reference-user-name (default #f))
+  (password   svn-multi-reference-password (default #f)))
+
+(define* (svn-multi-fetch ref hash-algo hash
+                          #:optional name
+                          #:key (system (%current-system)) (guile (default-guile))
+                          (svn (subversion-package)))
+  "Return a fixed-output derivation that fetches REF, a <svn-multi-reference>
+object.  The output is expected to have recursive hash HASH of type
+HASH-ALGO (a symbol).  Use NAME as the file name, or a generic name if #f."
+  (define build
+    (with-imported-modules '((guix build svn)
+                             (guix build utils))
+      #~(begin
+          (use-modules (guix build svn)
+                       (guix build utils)
+                       (srfi srfi-1))
+          (every (lambda (location)
+                   ;; The directory must exist if we are to fetch only a
+                   ;; single file.
+                   (unless (string-suffix? "/" location)
+                     (mkdir-p (string-append #$output "/" (dirname location))))
+                   (svn-fetch (string-append '#$(svn-multi-reference-url ref)
+                                             "/" location)
+                              '#$(svn-multi-reference-revision ref)
+                              (if (string-suffix? "/" location)
+                                  (string-append #$output "/" location)
+                                  (string-append #$output "/" (dirname location)))
+                              #:svn-command (string-append #+svn "/bin/svn")
+                              #:user-name #$(svn-multi-reference-user-name ref)
+                              #:password #$(svn-multi-reference-password ref)))
+                 '#$(svn-multi-reference-locations ref)))))
+
+  (mlet %store-monad ((guile (package->derivation guile system)))
+    (gexp->derivation (or name "svn-checkout") build
+                      #:system system
+                      #:hash-algo hash-algo
+                      #:hash hash
+                      #:recursive? #t
+                      #:guile-for-build guile
+                      #:local-build? #t)))
+
 (define* (download-svn-to-store store ref
                                 #:optional (name (basename (svn-reference-url ref)))
                                 #:key (log (current-error-port)))