summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--build-aux/git-authenticate.scm5
-rw-r--r--gnu/local.mk3
-rw-r--r--gnu/packages/audio.scm4
-rw-r--r--gnu/packages/benchmark.scm27
-rw-r--r--gnu/packages/bioconductor.scm24
-rw-r--r--gnu/packages/bioinformatics.scm135
-rw-r--r--gnu/packages/chromium.scm89
-rw-r--r--gnu/packages/compression.scm5
-rw-r--r--gnu/packages/cran.scm323
-rw-r--r--gnu/packages/crates-io.scm1477
-rw-r--r--gnu/packages/datamash.scm6
-rw-r--r--gnu/packages/emacs-xyz.scm32
-rw-r--r--gnu/packages/fonts.scm15
-rw-r--r--gnu/packages/game-development.scm74
-rw-r--r--gnu/packages/image.scm56
-rw-r--r--gnu/packages/ld-wrapper-next.in305
-rw-r--r--gnu/packages/libevent.scm16
-rw-r--r--gnu/packages/lisp-xyz.scm232
-rw-r--r--gnu/packages/llvm.scm160
-rw-r--r--gnu/packages/music.scm31
-rw-r--r--gnu/packages/musl.scm4
-rw-r--r--gnu/packages/node.scm27
-rw-r--r--gnu/packages/opencl.scm2
-rw-r--r--gnu/packages/photo.scm4
-rw-r--r--gnu/packages/python-web.scm73
-rw-r--r--gnu/packages/search.scm6
-rw-r--r--gnu/packages/tls.scm4
-rw-r--r--gnu/packages/uml.scm6
-rw-r--r--gnu/packages/vim.scm26
-rw-r--r--gnu/packages/web.scm16
-rw-r--r--gnu/packages/xml.scm4
-rw-r--r--guix/build/linux-module-build-system.scm9
-rw-r--r--guix/build/node-build-system.scm5
-rw-r--r--guix/scripts.scm65
-rw-r--r--nix/libstore/gc.cc20
35 files changed, 2985 insertions, 305 deletions
diff --git a/build-aux/git-authenticate.scm b/build-aux/git-authenticate.scm
index 8d05f0ee40..640dedbff5 100644
--- a/build-aux/git-authenticate.scm
+++ b/build-aux/git-authenticate.scm
@@ -184,8 +184,6 @@
      "77DD AD2D 97F5 31BB C0F3  C7FD DFB5 EB09 AA62 5423")
     ("snape"
      "F494 72F4 7A59 00D5 C235  F212 89F9 6D48 08F3 59C7")
-    ("snape"
-     "F494 72F4 7A59 00D5 C235  F212 89F9 6D48 08F3 59C7")
     ("steap"
      "4E26 CCE9 578E 0828 9855  BDD4 1C79 95D2 D5A3 8336")
     ("taylanub"
@@ -193,7 +191,8 @@
 
     ;; https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00826.html
     ("thomasd"
-     "1DD1 681F E285 E07F 11DC  0C59 2E15 A6BC D77D 54FD")
+     ;; primary: "1DD1 681F E285 E07F 11DC  0C59 2E15 A6BC D77D 54FD"
+     "3D2C DA58 819C 08C2 A649  D43D 5C3B 064C 724A 5726")
     ("thomasd (old)"
      "A5C5 92EA 606E 7106 A6A3  BC08 98B2 1575 91E1 2B08")
 
diff --git a/gnu/local.mk b/gnu/local.mk
index de061e04c4..c3960b9727 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1514,4 +1514,5 @@ dist_patch_DATA =						\
   %D%/packages/patches/xsane-tighten-default-umask.patch
 
 MISC_DISTRO_FILES =				\
-  %D%/packages/ld-wrapper.in
+  %D%/packages/ld-wrapper.in			\
+  %D%/packages/ld-wrapper-next.in
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 5b8c610882..ac486aabfb 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -1193,7 +1193,7 @@ follower.")
 (define-public fluidsynth
   (package
     (name "fluidsynth")
-    (version "2.1.0")
+    (version "2.1.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1202,7 +1202,7 @@ follower.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0jhla1641rx77va4b6n4shn8srj87rpwvp170byj1bg8z8g89ji1"))))
+                "09jq04hrasidf6b5gkk4aba13fq55z3bmn7bq35rdaikz26xiij4"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f                      ; no check target
diff --git a/gnu/packages/benchmark.scm b/gnu/packages/benchmark.scm
index 602681ac86..9ae30eefc8 100644
--- a/gnu/packages/benchmark.scm
+++ b/gnu/packages/benchmark.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2019 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mpi)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
@@ -231,3 +233,28 @@ This can give a much better understanding of the command's performance.")
      "Benchmark is a library to benchmark code snippets,
 similar to unit tests.")
     (license license:asl2.0)))
+
+(define-public bonnie++
+  (package
+    (name "bonnie++")
+    (version "1.98")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.coker.com.au/bonnie++/bonnie++-"
+                                  version ".tgz"))
+              (sha256
+               (base32
+                "010bmlmi0nrlp3aq7p624sfaj5a65lswnyyxk3cnz1bqig0cn2vf"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("perl" ,perl)))
+    (arguments '(#:tests? #f)) ; there are no tests
+    (home-page "https://doc.coker.com.au/projects/bonnie/")
+    (synopsis "Hard drive and file system benchmark suite")
+    (description
+     "Bonnie++ is a benchmark suite that is aimed at performing a number of
+simple tests of hard drive and file system performance.  Bonnie++ allows you to
+benchmark how your file systems perform with respect to data read and write
+speed, the number of seeks that can be performed per second, and the number of
+file metadata operations that can be performed per second.")
+    (license license:gpl2)))   ;GPL 2 only, see copyright.txt
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index e004560d58..e14f7bc93e 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -224,6 +224,30 @@ Finder (TRF mask).  Only the AGAPS and AMB masks are \"active\" by default.")
 1000genomes phase2 reference genome sequence (hs37d5), based on NCBI GRCh37.")
     (license license:artistic2.0)))
 
+(define-public r-bsgenome-hsapiens-ncbi-grch38
+  (package
+    (name "r-bsgenome-hsapiens-ncbi-grch38")
+    (version "1.3.1000")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "BSgenome.Hsapiens.NCBI.GRCh38"
+                              version 'annotation))
+       (sha256
+        (base32
+         "0y75qdq578fh6420vbvsbwmdw8jvr3g06qli2h3vj3pxmjykh9c1"))))
+    (properties `((upstream-name . "BSgenome.Hsapiens.NCBI.GRCh38")))
+    (build-system r-build-system)
+    (propagated-inputs `(("r-bsgenome" ,r-bsgenome)))
+    (home-page
+     "https://bioconductor.org/packages/release/data/annotation/html/\
+BSgenome.Hsapiens.NCBI.GRCh38.html")
+    (synopsis "Full genome sequences for Homo sapiens (GRCh38)")
+    (description
+     "This package provides full genome sequences for Homo sapiens (Human) as
+provided by NCBI (GRCh38, 2013-12-17) and stored in Biostrings objects.")
+    (license license:artistic2.0)))
+
 (define-public r-bsgenome-hsapiens-ucsc-hg19-masked
   (package
     (name "r-bsgenome-hsapiens-ucsc-hg19-masked")
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 4adb3137e5..8ed13b22e5 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -2272,23 +2272,23 @@ time.")
 (define-public crossmap
   (package
     (name "crossmap")
-    (version "0.2.9")
+    (version "0.3.8")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "CrossMap" version))
               (sha256
                (base32
-                "1byhclrqnqpvc1rqkfh4jwj6yhn0x9y7jk47i0qcjlhk0pjkw92p"))))
+                "1sb2f2qbxya4fzw3yjl09vbrs8vfmw22zrygrvz004sf9gb1vkan"))))
     (build-system python-build-system)
-    (arguments `(#:python ,python-2))
     (inputs
-     `(("python-bx-python" ,python2-bx-python)
-       ("python-numpy" ,python2-numpy)
-       ("python-pysam" ,python2-pysam)
+     `(("python-bx-python" ,python-bx-python)
+       ("python-numpy" ,python-numpy)
+       ("python-pybigwig" ,python-pybigwig)
+       ("python-pysam" ,python-pysam)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("python-cython" ,python2-cython)
-       ("python-nose" ,python2-nose)))
+     `(("python-cython" ,python-cython)
+       ("python-nose" ,python-nose)))
     (home-page "http://crossmap.sourceforge.net/")
     (synopsis "Convert genome coordinates between assemblies")
     (description
@@ -2578,7 +2578,7 @@ accurately delineate genomic rearrangements throughout the genome.")
 (define-public diamond
   (package
     (name "diamond")
-    (version "0.9.22")
+    (version "0.9.30")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2587,7 +2587,7 @@ accurately delineate genomic rearrangements throughout the genome.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0bky78v79g3wmdpsd706cscckgw1v09fg8vdd0z8z0d5b97aj9zl"))))
+                "0k6f3kb6cniw11xw6763kkbs1sl0yack7xsy7q5fl5v170ssphq4"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no "check" target
@@ -4274,19 +4274,30 @@ experiments.")
 (define-public macs
   (package
     (name "macs")
-    (version "2.1.1.20160309")
+    (version "2.2.6")
     (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "MACS2" version))
+              ;; The PyPi tarball does not contain tests.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/taoliu/MACS.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "09ixspd1vcqmz1c81ih70xs4m7qml2iy5vyx1y74zww3iy1vl210"))))
+                "1c5gxr0mk6hkd4vclf0k00wvyvzw2vrmk52c85338p7aqjwg6n15"))))
     (build-system python-build-system)
     (arguments
-     `(#:python ,python-2 ; only compatible with Python 2.7
-       #:tests? #f)) ; no test target
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (invoke "pytest" "-v"))))))
     (inputs
-     `(("python-numpy" ,python2-numpy)))
+     `(("python-numpy" ,python-numpy)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (home-page "https://github.com/taoliu/MACS/")
     (synopsis "Model based analysis for ChIP-Seq data")
     (description
@@ -4910,20 +4921,26 @@ predicts the locations of structural units in the sequences.")
 (define-public proteinortho
   (package
     (name "proteinortho")
-    (version "5.16b")
-    (source
-     (origin
-      (method url-fetch)
-      (uri
-       (string-append
-        "http://www.bioinf.uni-leipzig.de/Software/proteinortho/proteinortho_v"
-        version "_src.tar.gz"))
-      (sha256
-       (base32
-        "1wl0dawpssqwfjvr651r4wlww8hhjin8nba6xh71ks7sbypx886j"))))
+    (version "6.0.14")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/paulklemm_PHD/proteinortho.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0pmy617zy2z2w6hjqxjhf3rzikf5n3mpia80ysq8233vfr7wrzff"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; remove pre-built scripts
+                  (delete-file-recursively "src/BUILD/")
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
+       #:make-flags '("CC=gcc")
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -4941,15 +4958,23 @@ predicts the locations of structural units in the sequences.")
              #t))
          (add-after 'install 'wrap-programs
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((path (getenv "PATH"))
-                    (out (assoc-ref outputs "out"))
-                    (binary (string-append out "/bin/proteinortho5.pl")))
-               (wrap-program binary `("PATH" ":" prefix (,path))))
+             (let ((path (getenv "PATH"))
+                   (out (assoc-ref outputs "out")))
+               (for-each (lambda (script)
+                           (wrap-script script `("PATH" ":" prefix (,path))))
+                         (cons (string-append out "/bin/proteinortho")
+                               (find-files out "\\.(pl|py)$"))))
              #t)))))
     (inputs
-     `(("perl" ,perl)
-       ("python" ,python-2)
-       ("blast+" ,blast+)))
+     `(("guile" ,guile-3.0) ; for wrap-script
+       ("diamond" ,diamond)
+       ("perl" ,perl)
+       ("python" ,python-wrapper)
+       ("blast+" ,blast+)
+       ("lapack" ,lapack)
+       ("openblas" ,openblas)))
+    (native-inputs
+     `(("which" ,which)))
     (home-page "http://www.bioinf.uni-leipzig.de/Software/proteinortho")
     (synopsis "Detect orthologous genes across species")
     (description
@@ -4957,7 +4982,7 @@ predicts the locations of structural units in the sequences.")
 species.  For doing so, it compares similarities of given gene sequences and
 clusters them to find significant groups.  The algorithm was designed to handle
 large-scale data and can be applied to hundreds of species at once.")
-    (license license:gpl2+)))
+    (license license:gpl3+)))
 
 (define-public pyicoteo
   (package
@@ -12010,23 +12035,6 @@ graphs.  This library makes it easy to work with @file{.loom} files for
 single-cell RNA-seq data.")
     (license license:bsd-3)))
 
-;; pigx-scrnaseq does not work with the latest version of loompy.
-(define-public python-loompy-for-pigx-scrnaseq
-  (package (inherit python-loompy)
-    (name "python-loompy")
-    (version "2.0.3")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/linnarsson-lab/loompy.git")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0pjyl532pl8sbv71yci6h0agchn0naw2qjcwj50n6afrsahbsag3"))))
-    ;; There are none.
-    (arguments '(#:tests? #f))))
-
 ;; We cannot use the latest commit because it requires Java 9.
 (define-public java-forester
   (let ((commit "86b07efe302d5094b42deed9260f719a4c4ac2e6")
@@ -12770,7 +12778,7 @@ methylation and segmentation.")
 (define-public pigx-scrnaseq
   (package
     (name "pigx-scrnaseq")
-    (version "0.0.8")
+    (version "1.1.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/BIMSBbioinfo/pigx_scrnaseq/"
@@ -12778,27 +12786,21 @@ methylation and segmentation.")
                                   "/pigx_scrnaseq-" version ".tar.gz"))
               (sha256
                (base32
-                "0zv0sc5amivxhb95vx2gfx6l9bh7n80fh7h47dalnwxxnfvnzai4"))))
+                "0ga2jr4968qzwml6aycky4603q64lny3y7lzw6dmafch5pydl1qi"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:configure-flags
-       (list (string-append "PICARDJAR=" (assoc-ref %build-inputs "java-picard")
-			    "/share/java/picard.jar")
-	     (string-append "DROPSEQJAR=" (assoc-ref %build-inputs "dropseq-tools")
-			    "/share/java/dropseq.jar"))))
     (inputs
      `(("coreutils" ,coreutils)
        ("perl" ,perl)
-       ("dropseq-tools" ,dropseq-tools)
        ("fastqc" ,fastqc)
-       ("java-picard" ,java-picard-2.10.3) ; same as for dropseq
+       ("flexbar" ,flexbar)
        ("java" ,icedtea-8)
+       ("jellyfish" ,jellyfish)
        ("python-wrapper" ,python-wrapper)
        ("python-pyyaml" ,python-pyyaml)
        ("python-pandas" ,python-pandas)
        ("python-magic" ,python-magic)
        ("python-numpy" ,python-numpy)
-       ("python-loompy" ,python-loompy-for-pigx-scrnaseq)
+       ("python-loompy" ,python-loompy)
        ("ghc-pandoc" ,ghc-pandoc)
        ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc)
        ("samtools" ,samtools)
@@ -12825,6 +12827,7 @@ methylation and segmentation.")
        ("r-rtsne" ,r-rtsne)
        ("r-scater" ,r-scater)
        ("r-scran" ,r-scran)
+       ("r-seurat" ,r-seurat)
        ("r-singlecellexperiment" ,r-singlecellexperiment)
        ("r-stringr" ,r-stringr)
        ("r-yaml" ,r-yaml)))
@@ -13882,7 +13885,7 @@ absolute GSEA.")
 (define-public jamm
   (package
     (name "jamm")
-    (version "1.0.7.5")
+    (version "1.0.7.6")
     (source
      (origin
        (method git-fetch)
@@ -13892,7 +13895,7 @@ absolute GSEA.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0ls889jcma1ch9h21jjhnkadgszgqj41842hhcjh6cg88f85qf3i"))))
+         "0bsa5mf9n9q5jz7mmacrra41l7r8rac5vgsn6wv1fb52ya58b970"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; there are none
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index 49ad8de84c..be33e5b363 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -37,7 +37,6 @@
   #:use-module (gnu packages curl)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
@@ -49,6 +48,7 @@
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages ninja)
   #:use-module (gnu packages node)
@@ -70,7 +70,8 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
-  #:use-module (ice-9 match))
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1))
 
 (define %preserved-third-party-files
   '("base/third_party/cityhash" ;Expat
@@ -106,10 +107,6 @@
     "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
@@ -117,11 +114,14 @@
     "third_party/catapult/common/py_vulcanize/third_party/rcssmin" ;ASL2.0
     "third_party/catapult/common/py_vulcanize/third_party/rjsmin" ;ASL2.0
     "third_party/catapult/third_party/polymer" ;BSD-3
+    ;; XXX: This is a minified version of <https://d3js.org/>.
     "third_party/catapult/tracing/third_party/d3" ;BSD-3
     "third_party/catapult/tracing/third_party/gl-matrix" ;Expat
+    ;; XXX: Minified version of <https://github.com/Stuk/jszip>.
     "third_party/catapult/tracing/third_party/jszip" ;Expat or GPL3
     "third_party/catapult/tracing/third_party/mannwhitneyu" ;Expat
     "third_party/catapult/tracing/third_party/oboe" ;BSD-2
+    ;; XXX: Minified version of <https://github.com/nodeca/pako>.
     "third_party/catapult/tracing/third_party/pako" ;Expat
     "third_party/ced" ;BSD-3
     "third_party/cld_3" ;ASL2.0
@@ -134,6 +134,9 @@
     "third_party/dav1d" ;BSD-2
     "third_party/dawn" ;ASL2.0
     "third_party/depot_tools/owners.py" ;BSD-3
+    "third_party/devtools-frontend" ;BSD-3
+    "third_party/devtools-frontend/src/third_party/axe-core" ;MPL2.0
+    "third_party/devtools-frontend/src/third_party/pyjson5" ;ASL2.0
     "third_party/dom_distiller_js" ;BSD-3
     "third_party/emoji-segmenter" ;ASL2.0
     "third_party/flatbuffers" ;ASL2.0
@@ -154,6 +157,7 @@
     "third_party/libaom" ;BSD-2 or "Alliance for Open Media Patent License 1.0"
     "third_party/libaom/source/libaom/third_party/vector" ;Expat
     "third_party/libaom/source/libaom/third_party/x86inc" ;ISC
+    "third_party/libgifcodec" ;MPL1.1/GPL2+/LGPL2.1+, BSD-3, BSD-2
     "third_party/libjingle_xmpp" ;BSD-3
     "third_party/libphonenumber" ;ASL2.0
     "third_party/libsecret" ;LGPL2.1+
@@ -181,6 +185,7 @@
     "third_party/pdfium/third_party/bigint" ;Public domain, BSD-3
     "third_party/pdfium/third_party/skia_shared" ;BSD-3
     "third_party/pdfium/third_party/freetype/include/pstables.h" ;FreeType
+    "third_party/perfetto" ;ASL2.0
     "third_party/pffft" ;the "FFTPACK" license, similar to BSD-3
     "third_party/ply" ;BSD-3
     "third_party/polymer" ;BSD-3
@@ -194,7 +199,6 @@
     "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/vulkanmemoryallocator" ;BSD-3, Expat
     "third_party/smhasher" ;Expat, public domain
@@ -243,9 +247,9 @@ from forcing GEXP-PROMISE."
                       #:system system
                       #:guile-for-build guile)))
 
-(define %chromium-version "79.0.3945.130")
-(define %ungoogled-revision "e2fae994d786b6716fb473a47b0c880bcfdc2497")
-(define %debian-revision "debian/79.0.3945.130-2")
+(define %chromium-version "80.0.3987.122")
+(define %ungoogled-revision "6056988937ebc32f14293809487dbaaa65939834")
+(define %debian-revision "debian/80.0.3987.116-1")
 (define package-revision "0")
 (define %package-version (string-append %chromium-version "-"
                                         package-revision "."
@@ -259,18 +263,21 @@ from forcing GEXP-PROMISE."
                         %chromium-version ".tar.xz"))
     (sha256
      (base32
-      "183vz3lf1588cr9s5vlnj65qvbmz36s8cg8k7dvr64cxmcqk86an"))))
+      "0wr487drgd030d7p84rdz1cys0c87wbgh2qg3d7qd98gqbfcpss8"))))
 
 (define %ungoogled-origin
   (origin
     (method git-fetch)
-    (uri (git-reference (url "https://github.com/Eloston/ungoogled-chromium")
+    ;; XXX: Temporarily download from a third party because the main
+    ;; ungoogled-chromium repo is stale.  Code taken from this pull
+    ;; request: https://github.com/Eloston/ungoogled-chromium/pull/942
+    (uri (git-reference (url "https://github.com/Zoraver/ungoogled-chromium")
                         (commit %ungoogled-revision)))
     (file-name (git-file-name "ungoogled-chromium"
                               (string-take %ungoogled-revision 7)))
     (sha256
      (base32
-      "15vmc07iba1zmzn4j7c5n2hyvyxzwwf9hc3kyym0m4jajlsyxr5f"))))
+      "0s4bfj5lr49hknb6d7vp3zah70w9sq5cdhhlyihnl7f9jlrrnwsi"))))
 
 (define %debian-origin
   (origin
@@ -284,7 +291,7 @@ from forcing GEXP-PROMISE."
                                 (_ (string-take %debian-revision 7)))))
     (sha256
      (base32
-      "1rbzxcwfp7v0c6rkvn9jl9by7p363cnbdyqazwiak1z03kmw3nkz"))))
+      "1cc5sp566dd8f2grgr770xwbxgxf58dk1w7q3s8pmv4js5h3pwq8"))))
 
 ;; This is a "computed" origin that does the following:
 ;; *) Runs the Ungoogled scripts on a pristine Chromium tarball.
@@ -344,7 +351,7 @@ from forcing GEXP-PROMISE."
 
                    (with-directory-excursion chromium-dir
 
-                     (format #t "applying Debian patches...~%")
+                     (format #t "Applying Debian patches...~%")
                      (force-output)
                      (let* ((debian  #+debian-source)
                             (patches (string-append debian "/debian/patches"))
@@ -423,6 +430,18 @@ from forcing GEXP-PROMISE."
         `(cons "--enable-custom-modes"
                ,flags))))))
 
+;; Add a custom ld wrapper that supports quoted strings in response files.
+;; To be merged with 'ld-wrapper' in a future rebuild cycle.
+(define-public ld-wrapper-next
+  (let ((orig (car (assoc-ref (%final-inputs) "ld-wrapper"))))
+    (package
+      (inherit orig)
+      (name "ld-wrapper-next")
+      (inputs
+       `(("wrapper" ,(search-path %load-path
+                                  "gnu/packages/ld-wrapper-next.in"))
+         ,@(alist-delete "wrapper" (package-inputs orig)))))))
+
 (define-public ungoogled-chromium
   (package
     (name "ungoogled-chromium")
@@ -446,8 +465,10 @@ from forcing GEXP-PROMISE."
        ;; directory for an exhaustive list of supported flags.
        ;; (Note: The 'configure' phase will do that for you.)
        (list "is_debug=false"
+             "is_cfi=false"
              "use_gold=false"
              "use_lld=false"
+             "clang_use_chrome_plugins=false"
              "linux_use_bundled_binutils=false"
              "use_custom_libcxx=false"
              "use_sysroot=false"
@@ -477,18 +498,6 @@ from forcing GEXP-PROMISE."
              ;; friends from the environment.
              "custom_toolchain=\"//build/toolchain/linux/unbundle:default\""
              "host_toolchain=\"//build/toolchain/linux/unbundle:default\""
-             ;; Don't assume it's clang.
-             "is_clang=false"
-             ;; Disable debugging features to save space.  These are normally
-             ;; pulled in by "is_official_build", but that requires "is_clang".
-             "enable_iterator_debugging=false"
-             "exclude_unwind_tables=true"
-             ;; Optimize for building everything at once, as opposed to
-             ;; incrementally for development.  See "docs/jumbo.md".
-             "use_jumbo_build=true"
-             ;; The default file merge limit of 50 requires huge amounts of RAM.
-             ;; Cap it to make sure the build succeeds on commodity hardware.
-             "jumbo_file_merge_limit=8"
 
              ;; Prefer system libraries.
              "use_system_freetype=true"
@@ -584,6 +593,10 @@ from forcing GEXP-PROMISE."
              (substitute* "third_party/webrtc/rtc_base/strings/json.h"
                (("#include \"third_party/jsoncpp/") "#include \"json/"))
 
+             (substitute* "gpu/config/gpu_util.cc"
+               (("third_party/vulkan/include/")
+                ""))
+
              (substitute* '("components/viz/common/gpu/vulkan_context_provider.h"
                             "components/viz/common/resources/resource_format_utils.h")
                (("third_party/vulkan/include/") ""))
@@ -636,14 +649,19 @@ from forcing GEXP-PROMISE."
 
              ;; Make sure the right build tools are used.
              (setenv "AR" "ar") (setenv "NM" "nm")
-             (setenv "CC" "gcc") (setenv "CXX" "g++")
+             (setenv "CC" "clang") (setenv "CXX" "clang++")
 
-             ;; Prevent GCC from optimizing away null pointer safety checks.
+             ;; Do not optimize away null pointer safety checks.
              (setenv "CXXFLAGS" "-fno-delete-null-pointer-checks")
 
              ;; TODO: pre-compile instead. Avoids a race condition.
              (setenv "PYTHONDONTWRITEBYTECODE" "1")
 
+             (substitute*
+                 ;; From Debians 'system/node.patch'.
+                 "third_party/devtools-frontend/src/scripts/devtools_paths.py"
+               (("/usr/bin/nodejs") (which "node")))
+
              ;; XXX: How portable is this.
              (mkdir-p "third_party/node/linux/node-linux-x64")
              (symlink (string-append (assoc-ref inputs "node") "/bin")
@@ -748,9 +766,10 @@ from forcing GEXP-PROMISE."
                #t))))))
     (native-inputs
      `(("bison" ,bison)
-       ("gcc" ,gcc-8)
+       ("clang" ,clang-9)
        ("gn" ,gn)
        ("gperf" ,gperf)
+       ("ld-wrapper" ,ld-wrapper-next)
        ("ninja" ,ninja)
        ("node" ,node)
        ("pkg-config" ,pkg-config)
@@ -852,6 +871,16 @@ disabled in order to protect the users privacy.")
        ,@(package-inputs ungoogled-chromium)))
     (arguments
      (substitute-keyword-arguments (package-arguments ungoogled-chromium)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'add-ozone-patch
+             (lambda _
+               ;; Add missing include statement required when using libstdc++,
+               ;; Clang and Ozone.  Fixed in M81.
+               (substitute* "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.cc"
+                 (("#include \"base/logging\\.h" all)
+                  (string-append "#include <algorithm>\n" all)))
+               #t))))
        ((#:configure-flags flags)
         `(append (list "use_ozone=true"
                        "ozone_platform_wayland=true"
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 024a017c97..2f938f8de2 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1629,18 +1629,19 @@ recreates the stored directory structure by default.")
 (define-public libzip
   (package
     (name "libzip")
-    (version "1.5.2")
+    (version "1.6.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://libzip.org/download/libzip-" version ".tar.xz"))
               (sha256
                (base32
-                "1d53shcy7nvls5db573bbdlm25lfz1iw2zshng5f00cssi5lvpmk"))))
+                "0h9nsgkw0dk4srsvmz6xy6f9l4h815xn07j8h40l8gqvcxxaqpbh"))))
     (native-inputs
      `(("perl" ,perl)))
     (inputs
      `(("gnutls" ,gnutls)
+       ("liblzma" ,xz)
        ("openssl" ,openssl)
        ("zlib" ,zlib)))
     (build-system cmake-build-system)
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 67f14a3b88..7ff282bde1 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -20238,3 +20238,326 @@ data for the same conditions.  Interactivity can improve complex heatmaps by
 providing tooltips with information about each cell and enabling zooming into
 interesting features. iheatmapr uses the plotly library for interactivity.")
     (license license:expat)))
+
+(define-public r-packrat
+  (package
+    (name "r-packrat")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "packrat" version))
+       (sha256
+        (base32
+         "1xy5dd2hrpqa07jfl4s7dsrya05mf36ms74j833scdz0zf89586n"))))
+    (properties `((upstream-name . "packrat")))
+    (build-system r-build-system)
+    (home-page "https://github.com/rstudio/packrat/")
+    (synopsis "Dependency management R projects")
+    (description
+     "This package provides a dependency manager for R projects that allows
+you to manage the R packages your project depends on in an isolated, portable,
+and reproducible way.")
+    (license license:gpl2)))
+
+(define-public r-rsconnect
+  (package
+    (name "r-rsconnect")
+    (version "0.8.16")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rsconnect" version))
+       (sha256
+        (base32
+         "05ii0p0p7xpf8z0c1594s5q7wpwcs7lmlddrd67s5p2ka5m8qwiz"))))
+    (properties `((upstream-name . "rsconnect")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-curl" ,r-curl)
+       ("r-digest" ,r-digest)
+       ("r-jsonlite" ,r-jsonlite)
+       ("r-openssl" ,r-openssl)
+       ("r-packrat" ,r-packrat)
+       ("r-rstudioapi" ,r-rstudioapi)
+       ("r-yaml" ,r-yaml)))
+    (home-page "https://github.com/rstudio/rsconnect")
+    (synopsis "Deployment interface for R Markdown documents and Shiny applications")
+    (description
+     "This package provides a programmatic deployment interface for RPubs,
+shinyapps.io, and RStudio Connect.  Supported content types include R Markdown
+documents, Shiny applications, Plumber APIs, plots, and static web content.")
+    (license license:gpl2)))
+
+;; This package includes minified JavaScript files.  When upgrading please
+;; check that there are no new minified JavaScript files.
+(define-public r-dygraphs
+  (package
+    (name "r-dygraphs")
+    (version "1.1.1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "dygraphs" version))
+       (sha256
+        (base32
+         "022j007mzfa9k2n31yg4aizcsf571vv3jip092h23rqj03rk3ly3"))))
+    (properties `((upstream-name . "dygraphs")))
+    (build-system r-build-system)
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build r-build-system)
+                  (srfi srfi-1)
+                  (ice-9 popen))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'process-javascript
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "inst/htmlwidgets/lib/"
+               (call-with-values
+                   (lambda ()
+                     (unzip2
+                      `(("dygraphs/dygraph-combined-dev.js"
+                         "dygraph-combined.js")
+                        (,(assoc-ref inputs "js-jquery")
+                         "jquery/jquery.min.js")
+                        (,(assoc-ref inputs "js-fquarter")
+                         "fquarter/moment-fquarter.min.js"))))
+                 (lambda (sources targets)
+                   (for-each (lambda (source target)
+                               (format #t "Processing ~a --> ~a~%"
+                                       source target)
+                               (let ((minified (open-pipe* OPEN_READ "uglify-js" source)))
+                                 (call-with-output-file target
+                                   (lambda (port)
+                                     (dump-port minified port)))))
+                             sources targets))))
+             #t)))))
+    (native-inputs
+     `(("uglify-js" ,uglify-js)
+       ;; They actually use version 1.11.1, but this more recent version
+       ;; should be just fine.
+       ("js-jquery"
+        ,(origin
+           (method url-fetch)
+           (uri "https://code.jquery.com/jquery-1.12.4.js")
+           (sha256
+            (base32
+             "0x9mrc1668icvhpwzvgafm8xm11x9lfai9nwr66aw6pjnpwkc3s3"))))
+       ("js-fquarter"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append "https://raw.githubusercontent.com/robgallen/"
+                               "moment-fquarter/1.0.1/moment-fquarter.js"))
+           (sha256
+            (base32
+             "01mdnsaibm9jy2f1qpbn692hpv309lhj5si9nagib4dawmrkffij"))))))
+    (propagated-inputs
+     `(("r-htmltools" ,r-htmltools)
+       ("r-htmlwidgets" ,r-htmlwidgets)
+       ("r-magrittr" ,r-magrittr)
+       ("r-xts" ,r-xts)
+       ("r-zoo" ,r-zoo)))
+    (home-page "https://github.com/rstudio/dygraphs")
+    (synopsis "Interface to Dygraphs interactive time series charting library")
+    (description
+     "This package provides an R interface to the dygraphs JavaScript charting
+library (a copy of which is included in the package).  It provides rich
+facilities for charting time-series data in R, including highly configurable
+series- and axis-display and interactive features like zoom/pan and
+series/point highlighting.")
+    (license license:expat)))
+
+(define-public r-shinystan
+  (package
+    (name "r-shinystan")
+    (version "2.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "shinystan" version))
+       (sha256
+        (base32
+         "18alf5kiqw7y2l6m5nxxizwc2znsf9frxfsqhvgcad8hld9cbya5"))))
+    (properties `((upstream-name . "shinystan")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-bayesplot" ,r-bayesplot)
+       ("r-colourpicker" ,r-colourpicker)
+       ("r-dt" ,r-dt)
+       ("r-dygraphs" ,r-dygraphs)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-gridextra" ,r-gridextra)
+       ("r-gtools" ,r-gtools)
+       ("r-markdown" ,r-markdown)
+       ("r-reshape2" ,r-reshape2)
+       ("r-rsconnect" ,r-rsconnect)
+       ("r-rstan" ,r-rstan)
+       ("r-shiny" ,r-shiny)
+       ("r-shinyjs" ,r-shinyjs)
+       ("r-shinythemes" ,r-shinythemes)
+       ("r-threejs" ,r-threejs)
+       ("r-xtable" ,r-xtable)
+       ("r-xts" ,r-xts)))
+    (home-page "https://mc-stan.org/")
+    (synopsis "Interactive visual and numerical analysis for Bayesian models")
+    (description
+     "This package provides a graphical user interface for interactive
+@dfn{Markov chain Monte Carlo} (MCMC) diagnostics and plots and tables helpful
+for analyzing a posterior sample.  The interface is powered by the Shiny web
+application framework and works with the output of MCMC programs written in
+any programming language (and has extended functionality for Stan models fit
+using the @code{rstan} and @code{rstanarm} packages).")
+    (license license:gpl3+)))
+
+(define-public r-rstantools
+  (package
+    (name "r-rstantools")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rstantools" version))
+       (sha256
+        (base32
+         "1il0pn4ksbdkska5fmhvgaicvwnnc6cs08g6ags9fj1xkjiqmrsa"))))
+    (properties `((upstream-name . "rstantools")))
+    (build-system r-build-system)
+    (inputs `(("pandoc" ,ghc-pandoc)))
+    (propagated-inputs
+     `(("r-desc" ,r-desc)
+       ("r-rcpp" ,r-rcpp)))
+    (home-page "https://mc-stan.org/rstantools/")
+    (synopsis "Tools for developing R packages interfacing with Stan")
+    (description
+     "This package provides various tools for developers of R packages
+interfacing with @url{https://mc-stan.org, Stan}, including functions to set
+up the required package structure, S3 generics and default methods to unify
+function naming across Stan-based R packages, and vignettes with
+recommendations for developers.")
+    (license license:gpl3+)))
+
+(define-public r-loo
+  (package
+    (name "r-loo")
+    (version "2.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "loo" version))
+       (sha256
+        (base32
+         "1hq1zcj76x55z9kic6cwf7mfq9pzqfbr341jbc9wp7x8ac4zcva6"))))
+    (properties `((upstream-name . "loo")))
+    (build-system r-build-system)
+    (inputs
+     `(("pandoc" ,ghc-pandoc)
+       ("pandoc-citeproc" ,ghc-pandoc-citeproc)))
+    (propagated-inputs
+     `(("r-checkmate" ,r-checkmate)
+       ("r-matrixstats" ,r-matrixstats)))
+    (home-page "https://mc-stan.org/loo/")
+    (synopsis "Leave-One-Out cross-validation and WAIC for Bayesian models")
+    (description
+     "This package provides an implementation of efficient approximate
+@dfn{leave-one-out} (LOO) cross-validation for Bayesian models fit using
+Markov chain Monte Carlo, as described in @url{doi:10.1007/s11222-016-9696-4}.
+The approximation uses @dfn{Pareto smoothed importance sampling} (PSIS), a new
+procedure for regularizing importance weights.  As a byproduct of the
+calculations, we also obtain approximate standard errors for estimated
+predictive errors and for the comparison of predictive errors between models.
+The package also provides methods for using stacking and other model weighting
+techniques to average Bayesian predictive distributions.")
+    (license license:gpl3+)))
+
+(define-public r-rstan
+  (package
+    (name "r-rstan")
+    (version "2.19.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rstan" version))
+       (sha256
+        (base32
+         "128ndwjrhf8b1qvvqz4bl13qlm8718z9qs5ryc6gsdr3vk65s0np"))))
+    (properties `((upstream-name . "rstan")))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'set-timezone
+           ;; This package is picky about timezones.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "TZ" "UTC+1")
+             (setenv "TZDIR"
+                     (string-append (assoc-ref inputs "tzdata")
+                                    "/share/zoneinfo"))
+             #t)))))
+    (native-inputs
+     `(("tzdata" ,tzdata)
+       ("pandoc" ,ghc-pandoc)))
+    (propagated-inputs
+     `(("r-bh" ,r-bh)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-gridextra" ,r-gridextra)
+       ("r-inline" ,r-inline)
+       ("r-loo" ,r-loo)
+       ("r-pkgbuild" ,r-pkgbuild)
+       ("r-rcpp" ,r-rcpp)
+       ("r-rcppeigen" ,r-rcppeigen)
+       ("r-stanheaders" ,r-stanheaders)))
+    (home-page "https://discourse.mc-stan.org/")
+    (synopsis "R interface to Stan")
+    (description
+     "User-facing R functions are provided to parse, compile, test, estimate,
+and analyze Stan models by accessing the header-only Stan library provided by
+the StanHeaders package.  The Stan project develops a probabilistic
+programming language that implements full Bayesian statistical inference via
+Markov Chain Monte Carlo, rough Bayesian inference via 'variational'
+approximation, and (optionally penalized) maximum likelihood estimation via
+optimization.  In all three cases, automatic differentiation is used to
+quickly and accurately evaluate gradients without burdening the user with the
+need to derive the partial derivatives.")
+    (license license:gpl3+)))
+
+(define-public r-rstanarm
+  (package
+    (name "r-rstanarm")
+    (version "2.19.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rstanarm" version))
+       (sha256
+        (base32
+         "0gxjq8bdlvdd8kn3dhp12xlymdab036r7n12lzmd3xlkl4cnxq3s"))))
+    (properties `((upstream-name . "rstanarm")))
+    (build-system r-build-system)
+    (inputs
+     `(("pandoc" ,ghc-pandoc)
+       ("pandoc-citeproc" ,ghc-pandoc-citeproc)))
+    (propagated-inputs
+     `(("r-bayesplot" ,r-bayesplot)
+       ("r-bh" ,r-bh)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-lme4" ,r-lme4)
+       ("r-loo" ,r-loo)
+       ("r-matrix" ,r-matrix)
+       ("r-nlme" ,r-nlme)
+       ("r-rcpp" ,r-rcpp)
+       ("r-rcppeigen" ,r-rcppeigen)
+       ("r-rcppparallel" ,r-rcppparallel)
+       ("r-rstan" ,r-rstan)
+       ("r-rstantools" ,r-rstantools)
+       ("r-shinystan" ,r-shinystan)
+       ("r-stanheaders" ,r-stanheaders)
+       ("r-survival" ,r-survival)))
+    (home-page "https://mc-stan.org/rstanarm/")
+    (synopsis "Bayesian applied regression modeling via Stan")
+    (description
+     "This package estimates previously compiled regression models using the
+@code{rstan} package, which provides the R interface to the Stan C++ library
+for Bayesian estimation.  Users specify models via the customary R syntax with
+a formula and @code{data.frame} plus some additional arguments for priors.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index 699fb52d11..5b5c36525c 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -38,6 +38,7 @@
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
 
 ;;;
@@ -190,6 +191,31 @@ Rust, using gimli.")
         ("rust-serde" ,rust-serde-1.0)
         ("rust-serde-derive" ,rust-serde-derive-1.0))))))
 
+(define-public rust-aho-corasick-0.5
+  (package
+    (inherit rust-aho-corasick-0.6)
+    (name "rust-aho-corasick")
+    (version "0.5.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "aho-corasick" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0rnvdmlajikq0i4zdy1p3pv699q6apvsxfc7av7byhppllp2r5ya"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-memchr" ,rust-memchr-0.1))
+       #:cargo-development-inputs
+       (("rust-csv" ,rust-csv-0.14)
+        ("rust-docopt" ,rust-docopt-0.6)
+        ("rust-memmap" ,rust-memmap-0.2)
+        ("rust-quickcheck" ,rust-quickcheck-0.2)
+        ("rust-rand" ,rust-rand-0.3)
+        ("rust-rustc-serialize" ,rust-rustc-serialize-0.3))))))
+
 (define-public rust-android-glue-0.2
   (package
     (name "rust-android-glue")
@@ -959,6 +985,39 @@ Bresenham's line algorithm.")
 libraries.")
     (license license:bsd-3)))
 
+(define-public rust-bindgen-0.33
+  (package
+    (inherit rust-bindgen-0.50)
+    (name "rust-bindgen")
+    (version "0.33.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bindgen" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0vnw5fb74gl9pgnimgbrkac1xgwrjz86pqilx20rbkia77cdhgk0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cexpr" ,rust-cexpr-0.2)
+        ("rust-cfg-if" ,rust-cfg-if-0.1)
+        ("rust-clang-sys" ,rust-clang-sys-0.22)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-env-logger" ,rust-env-logger-0.5)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-peeking-take-while" ,rust-peeking-take-while-0.1)
+        ("rust-quote" ,rust-quote-0.3)
+        ("rust-regex" ,rust-regex-0.2)
+        ("rust-which" ,rust-which-1.0))
+       #:cargo-development-inputs
+       (("rust-clap" ,rust-clap-2)
+        ("rust-diff" ,rust-diff-0.1)
+        ("rust-shlex" ,rust-shlex-0.1))))))
+
 (define-public rust-bit-set-0.5
   (package
     (name "rust-bit-set")
@@ -1442,6 +1501,26 @@ in a byte slice, fast.")
 little-endian.")
     (license (list license:expat license:unlicense))))
 
+(define-public rust-byteorder-0.5
+  (package
+    (inherit rust-byteorder-1.3)
+    (name "rust-byteorder")
+    (version "0.5.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "byteorder" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0ma8pkyz1jbglr29m1yzlc9ghmv6672nvsrn7zd0yn5jqs60xh8g"))))
+    (arguments
+     `(#:tests? #f
+       #:cargo-development-inputs
+       (("rust-quickcheck" ,rust-quickcheck-0.2)
+        ("rust-rand" ,rust-rand-0.3))))))
+
 (define-public rust-bytes-0.4
   (package
     (name "rust-bytes")
@@ -1491,6 +1570,39 @@ little-endian.")
        #:cargo-development-inputs
        (("rust-rand" ,rust-rand-0.3))))))
 
+(define-public rust-bzip2-0.3
+  (package
+    (name "rust-bzip2")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bzip2" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0fvfwanp42j1zpig880jhb5mc0na50bijmwd6211p77sy35w7ds2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bzip2-sys" ,rust-bzip2-sys-0.1)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-tokio-io" ,rust-tokio-io-0.1))
+       #:cargo-development-inputs
+       (("rust-partial-io" ,rust-partial-io-0.2)
+        ("rust-quickcheck" ,rust-quickcheck-0.4)
+        ("rust-rand" ,rust-rand-0.3)
+        ("rust-tokio-core" ,rust-tokio-core-0.1))))
+    (home-page "https://github.com/alexcrichton/bzip2-rs")
+    (synopsis
+     "Rust bindings to libbzip2 for bzip2 compression and decompression")
+    (description
+     "Bindings to @code{libbzip2} for @code{bzip2} compression and decompression
+exposed as Reader/Writer streams.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-bzip2-sys-0.1
   (package
     (name "rust-bzip2-sys")
@@ -1743,6 +1855,37 @@ archive to be linked into Rustcode.")
      "This package provides a C expression parser and evaluator.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-cexpr-0.2
+  (package
+    (inherit rust-cexpr-0.3)
+    (name "rust-cexpr")
+    (version "0.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cexpr" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0v1xa3758czmj8h97gh548mr8g0v13ixxvrlm1s79nb7jmgc9aj2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-nom" ,rust-nom-3))
+       #:cargo-development-inputs
+       (("rust-clang-sys" ,rust-clang-sys-0.11))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-environmental-variable
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((clang (assoc-ref inputs "libclang")))
+               (setenv "LIBCLANG_PATH"
+                       (string-append clang "/lib")))
+             #t)))))
+    (inputs
+     `(("libclang" ,clang)))))
+
 (define-public rust-chrono-0.4
   (package
     (name "rust-chrono")
@@ -1846,6 +1989,66 @@ depending on a large number of #[cfg] parameters.  Structured like an
        (("rust-gleam" ,rust-gleam-0.6)
         ("rust-libc" ,rust-libc-0.2))))))
 
+(define-public rust-cgmath-0.17
+  (package
+    (name "rust-cgmath")
+    (version "0.17.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cgmath" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1rvgila6ivr0dh1bxza450a4yfwdi2pwj3h1vnwg0jy4xk6l8f98"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t     ; Crate won't build without glium.
+       #:cargo-inputs
+       (("rust-approx" ,rust-approx-0.3)
+        ("rust-mint" ,rust-mint-0.5)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rand" ,rust-rand-0.6)
+        ("rust-serde" ,rust-serde-1.0)
+        ("rust-simd" ,rust-simd-0.2))
+       #:cargo-development-inputs
+       (;("rust-glium" ,rust-glium-0.23)
+        ("rust-serde-json" ,rust-serde-json-1.0))))
+    (home-page "https://github.com/brendanzab/cgmath")
+    (synopsis "Linear algebra and mathematics library")
+    (description
+     "This package provides a linear algebra and mathematics library
+for computer graphics.")
+    (license license:asl2.0)))
+
+(define-public rust-cgmath-0.16
+  (package
+    (inherit rust-cgmath-0.17)
+    (name "rust-cgmath")
+    (version "0.16.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cgmath" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "07754c03v3srzf64ghsl3fggrdi4kjy6l3vyq2d2wfjfixybb934"))))
+    (arguments
+     `(#:skip-build? #t     ; Crate won't build without glium.
+       #:cargo-inputs
+       (("rust-approx" ,rust-approx-0.1)
+        ("rust-mint" ,rust-mint-0.5)
+        ("rust-num-traits" ,rust-num-traits-0.1)
+        ("rust-rand" ,rust-rand-0.4)
+        ("rust-serde" ,rust-serde-1.0)
+        ("rust-simd" ,rust-simd-0.2))
+       #:cargo-development-inputs
+       (;("rust-glium" ,rust-glium-0.19)
+        ("rust-serde-json" ,rust-serde-json-1.0))))))
+
 (define-public rust-ci-info-0.3
   (package
     (name "rust-ci-info")
@@ -1962,6 +2165,38 @@ depending on a large number of #[cfg] parameters.  Structured like an
                        (string-append clang "/lib")))
              #t)))))))
 
+(define-public rust-clang-sys-0.11
+  (package
+    (inherit rust-clang-sys-0.22)
+    (name "rust-clang-sys")
+    (version "0.11.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "clang-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "17i47skqp1d9svil2m1wspnhz7ci1x0fipia70ns0qffciwiz48r"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-0.7)
+        ("rust-clippy" ,rust-clippy-0.0)
+        ("rust-glob" ,rust-glob-0.2)
+        ("rust-lazy-static" ,rust-lazy-static-0.2)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-libloading" ,rust-libloading-0.3))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-environmental-variable
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((clang (assoc-ref inputs "libclang")))
+               (setenv "LIBCLANG_PATH"
+                       (string-append clang "/lib")))
+             #t)))))))
+
 (define-public rust-clap-2
   (package
     (name "rust-clap")
@@ -2122,6 +2357,27 @@ CMAKE environmental variable is set.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-color-quant-1.0
+  (package
+    (name "rust-color-quant")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "color-quant" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1ga56jrafnjm80903nnqjkyii4bwd6a7visxh0g8hgi6cmrvbfqd"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/PistonDevelopers/color_quant.git")
+    (synopsis
+     "Color quantization library to reduce n colors to 256 colors")
+    (description
+     "Color quantization library to reduce n colors to 256 colors.")
+    (license license:expat)))
+
 ;; This package requires features which are unavailable
 ;; on the stable releases of Rust.
 (define-public rust-compiler-builtins-0.1
@@ -2324,11 +2580,15 @@ It is inspired by the Linux kernel's @code{crypto_memneq}.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "168j1npqrif1yqxbgbk0pdrx9shzhs5ylc5a4xw49b6hbxi11zvq"))))
+         "168j1npqrif1yqxbgbk0pdrx9shzhs5ylc5a4xw49b6hbxi11zvq"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin (substitute* "Cargo.toml"
+                   (("0.2.21.*") "0.2.21\"\n"))
+                 #t))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t     ; Package needs 'unicode' crate.
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-custom-derive" ,rust-custom-derive-0.1))
        #:cargo-development-inputs
        (("rust-quickcheck" ,rust-quickcheck-0.2)
@@ -2932,6 +3192,27 @@ Code} (MAC) algorithms.")
      "Fast CSV parsing with support for serde.")
     (license (list license:unlicense license:expat))))
 
+(define-public rust-csv-0.14
+  (package
+    (inherit rust-csv-1.1)
+    (name "rust-csv")
+    (version "0.14.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "csv" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1g0qvr9fj25fq1fy0p758glrb30yz7x46h18hsysaqyaswaihv16"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-0.5)
+        ("rust-rustc-serialize" ,rust-rustc-serialize-0.3))
+       #:cargo-development-inputs
+       (("rust-regex" ,rust-regex-0.1))))))
+
 (define-public rust-csv-core-0.1
   (package
     (name "rust-csv-core")
@@ -3526,6 +3807,27 @@ from macros.")
         ("rust-rustc-serialize" ,rust-rustc-serialize-0.3)
         ("rust-strsim" ,rust-strsim-0.6))))))
 
+(define-public rust-docopt-0.6
+  (package
+    (inherit rust-docopt-0.7)
+    (name "rust-docopt")
+    (version "0.6.86")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "docopt" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1nf4f4zf5yk0d0l4kl7hkii4na22fhn0l2hgfb46yzv08l2g6zja"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-lazy-static" ,rust-lazy-static-0.2)
+        ("rust-regex" ,rust-regex-0.1)
+        ("rust-rustc-serialize" ,rust-rustc-serialize-0.3)
+        ("rust-strsim" ,rust-strsim-0.5))))))
+
 (define-public rust-downcast-rs-1.1
   (package
     (name "rust-downcast-rs")
@@ -4067,7 +4369,7 @@ is configured via an environment variable.")
     (arguments
      `(#:skip-build? #t     ; Cannot find dependent crates.
        #:cargo-inputs
-       (;("rust-regex" ,rust-regex-0.1)
+       (("rust-regex" ,rust-regex-0.1)
         ("rust-log" ,rust-log-0.3))))))
 
 (define-public rust-envmnt-0.6
@@ -4224,6 +4526,36 @@ is configured via an environment variable.")
     (description "Geometry primitives written in Rust.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-expat-sys-2.1
+  (package
+    (name "rust-expat-sys")
+    (version "2.1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "expat-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1yj5pqynds776ay8wg9mhi3hvna4fv7vf244yr1864r0i5r1k3v5"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin (delete-file-recursively "expat") #t))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cmake" ,rust-cmake-0.1)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("expat" ,expat)))
+    (home-page "http://www.libexpat.org/")
+    (synopsis "XML parser library written in C")
+    (description "XML parser library written in C")
+    (license license:expat)))
+
 (define-public rust-fake-simd-0.1
   (package
     (name "rust-fake-simd")
@@ -5504,6 +5836,30 @@ API library @code{gdi32}.")
         (base32
          "1v5jg7djicq34nbiv1dwaki71gkny002wyy9qfn3y0hfmrs053y6"))))))
 
+(define-public rust-genmesh-0.6
+  (package
+    (name "rust-genmesh")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "genmesh" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "17qybydyblf3hjiw7mq181jpi4vrbb8dmsj0wi347r8k0m354g89"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cgmath" ,rust-cgmath-0.16)
+        ("rust-mint" ,rust-mint-0.5))))
+    (home-page "https://github.com/gfx-rs/genmesh")
+    (synopsis "Package for generating 3D meshes")
+    (description
+     "This package provides a package for generating 3D meshes/")
+    (license license:asl2.0)))
+
 (define-public rust-getopts-0.2
   (package
     (name "rust-getopts")
@@ -5560,6 +5916,33 @@ API library @code{gdi32}.")
 retrieving random data from system source.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-gif-0.10
+  (package
+    (name "rust-gif")
+    (version "0.10.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gif" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1bw174f7civdfgryvc8pvyhicpr96hzdajnda4s3y8iv3ch907a7"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f      ; tests not included in release
+       #:cargo-inputs
+       (("rust-color-quant" ,rust-color-quant-1.0)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-lzw" ,rust-lzw-0.10))
+       #:cargo-development-inputs
+       (("rust-glob" ,rust-glob-0.3))))
+    (home-page "https://github.com/image-rs/image-gif")
+    (synopsis "GIF decoder and encoder")
+    (description "This package provides a GIF decoder and encoder in Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-gimli-0.18
   (package
     (name "rust-gimli")
@@ -6696,6 +7079,106 @@ SystemTime}}.")
 ignore files such as .gitignore against file paths.")
     (license (list license:unlicense license:expat))))
 
+(define-public rust-image-0.22
+  (package
+    (name "rust-image")
+    (version "0.22.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "image" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0jpbd0p1q7xx6395ba9ikz2k4cfp26qczisa8m2v15w3hzd2mv88"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f      ; Some test images are missing from the release.
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1.3)
+        ("rust-gif" ,rust-gif-0.10)
+        ("rust-jpeg-decoder" ,rust-jpeg-decoder-0.1)
+        ("rust-num-iter" ,rust-num-iter-0.1)
+        ("rust-num-rational" ,rust-num-rational-0.2)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-png" ,rust-png-0.15)
+        ("rust-scoped-threadpool" ,rust-scoped-threadpool-0.1)
+        ("rust-tiff" ,rust-tiff-0.3))
+       #:cargo-development-inputs
+       (("rust-crc32fast" ,rust-crc32fast-1.2)
+        ("rust-glob" ,rust-glob-0.3)
+        ("rust-num-complex" ,rust-num-complex-0.2)
+        ("rust-quickcheck" ,rust-quickcheck-0.9))))
+    (home-page "https://github.com/image-rs/image")
+    (synopsis "Imaging library written in Rust")
+    (description
+     "Imaging library written in Rust.  Provides basic filters and decoders
+for the most common image formats.")
+    (license license:expat)))
+
+(define-public rust-image-0.21
+  (package
+    (inherit rust-image-0.22)
+    (name "rust-image")
+    (version "0.21.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "image" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1sv534xp8yyn7jj0q6yn2bgng1350f962g81sv8v7c6pgi31wdrm"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1.3)
+        ("rust-gif" ,rust-gif-0.10)
+        ("rust-jpeg-decoder" ,rust-jpeg-decoder-0.1)
+        ("rust-lzw" ,rust-lzw-0.10)
+        ("rust-num-iter" ,rust-num-iter-0.1)
+        ("rust-num-rational" ,rust-num-rational-0.2)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-png" ,rust-png-0.14)
+        ("rust-scoped-threadpool" ,rust-scoped-threadpool-0.1)
+        ("rust-tiff" ,rust-tiff-0.2))
+       #:cargo-development-inputs
+       (("rust-glob" ,rust-glob-0.3)
+        ("rust-num-complex" ,rust-num-complex-0.2)
+        ("rust-quickcheck" ,rust-quickcheck-0.6))))))
+
+(define-public rust-image-0.20
+  (package
+    (inherit rust-image-0.21)
+    (name "rust-image")
+    (version "0.20.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "image" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "01058n0jcw25pq5shn7lkvywv8c28xsxb3nwwyb4r16ijm1mnrj4"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1.3)
+        ("rust-gif" ,rust-gif-0.10)
+        ("rust-jpeg-decoder" ,rust-jpeg-decoder-0.1)
+        ("rust-lzw" ,rust-lzw-0.10)
+        ("rust-num-iter" ,rust-num-iter-0.1)
+        ("rust-num-rational" ,rust-num-rational-0.2)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-png" ,rust-png-0.12)
+        ("rust-scoped-threadpool" ,rust-scoped-threadpool-0.1)
+        ("rust-tiff" ,rust-tiff-0.2))
+       #:cargo-development-inputs
+       (("rust-glob" ,rust-glob-0.2)
+        ("rust-num-complex" ,rust-num-complex-0.2)
+        ("rust-quickcheck" ,rust-quickcheck-0.6))))))
+
 (define-public rust-indexmap-1.0
   (package
     (name "rust-indexmap")
@@ -7077,6 +7560,34 @@ primitives to an @code{io::Write}.")
      "An implementation of the GNU make jobserver for Rust.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-jpeg-decoder-0.1
+  (package
+    (name "rust-jpeg-decoder")
+    (version "0.1.18")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "jpeg-decoder" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0lc428qgffh2a1agkq0p26mvf9rjaiswpywy5883j99mqypg0mh2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f      ; Some test files missing.
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1.3)
+        ("rust-rayon" ,rust-rayon-1.1))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-png" ,rust-png-0.14)
+        ("rust-walkdir" ,rust-walkdir-2.2))))
+    (home-page "https://github.com/image-rs/jpeg-decoder")
+    (synopsis "JPEG decoder")
+    (description "JPEG decoder written in Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-js-sys-0.3
   (package
     (name "rust-js-sys")
@@ -7588,6 +8099,29 @@ allows loading dynamic libraries (also known as shared libraries) as well as use
 functions and static variables these libraries contain.")
     (license license:isc)))
 
+(define-public rust-libloading-0.3
+  (package
+    (inherit rust-libloading-0.5)
+    (name "rust-libloading")
+    (version "0.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libloading" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0risz19rllhdc0d7nkpwkf4pcbjjgg1iim0kkmzb6kkp874hl0ha"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f      ; Some test libraries not included in release.
+       #:cargo-inputs
+       (("rust-kernel32-sys" ,rust-kernel32-sys-0.2)
+        ("rust-lazy-static" ,rust-lazy-static-0.2)
+        ("rust-winapi" ,rust-winapi-0.2)
+        ("rust-target-build-utils" ,rust-target-build-utils-0.3))))))
+
 (define-public rust-libm-0.2
   (package
     (name "rust-libm")
@@ -7627,6 +8161,30 @@ functions and static variables these libraries contain.")
         (base32
          "16pc0gx4gkg0q2s1ssq8268brn14j8344623vwhadmivc4lsmivz"))))))
 
+(define-public rust-libressl-pnacl-sys-2
+  (package
+    (name "rust-libressl-pnacl-sys")
+    (version "2.1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libressl-pnacl-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0w9yvgrf591phpr1222j0dj7x1n489v2sihnr8syz8xn3aamih6b"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-pnacl-build-helper" ,rust-pnacl-build-helper-1.4))))
+    (home-page "https://github.com/DiamondLovesYou/libressl-pnacl-sys")
+    (synopsis "Openssl linking provider for PNaCl/NaCl targets")
+    (description
+     "This package provides an openssl linking provider for PNaCl/NaCl targets.")
+    (license license:expat)))
+
 (define-public rust-libssh2-sys-0.2
   (package
     (name "rust-libssh2-sys")
@@ -8137,6 +8695,27 @@ for searching bytes.")
         (base32
          "0yjyja34pzhipdl855q3m21w1lyih4lw79x2dp3czwdla4pap3ql"))))))
 
+(define-public rust-memchr-0.1
+  (package
+    (inherit rust-memchr-1.0)
+    (name "rust-memchr")
+    (version "0.1.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "memchr" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "084d85hjfa3xf5kwdms2mhbkh78m1gl2254cp5swcxj3a7xjkdnq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))
+       #:cargo-development-inputs
+       (("rust-quickcheck" ,rust-quickcheck-0.2))))))
+
 (define-public rust-memmap-0.7
   (package
     (name "rust-memmap")
@@ -8179,6 +8758,29 @@ file IO.")
          (base32
           "1zy6s0ni0lx9rjzq3gq2zz9r8zgjmbp02332g3gsj4fyhv4s5zz2"))))))
 
+(define-public rust-memmap-0.2
+  (package
+    (inherit rust-memmap-0.6)
+    (name "rust-memmap")
+    (version "0.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "memmap" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0li737lakqcbbgd87x7h8d4vp0r1fqcbn5lb5vi746i9jgnp43zj"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-fs2" ,rust-fs2-0.2)
+        ("rust-kernel32-sys" ,rust-kernel32-sys-0.2)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-winapi" ,rust-winapi-0.2))
+       #:cargo-development-inputs
+       (("rust-tempdir" ,rust-tempdir-0.3))))))
+
 (define-public rust-memoffset-0.5
   (package
     (name "rust-memoffset")
@@ -8750,6 +9352,36 @@ known as zlib).")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-line-drawing-0.7
+  (package
+    (name "rust-line-drawing")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "line_drawing" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1fcna7hq1g1kkkqy07hydscx5d2zgb6gskz3vnsvsif8h8ysvisw"))))
+    (build-system cargo-build-system)
+    (arguments
+     ;; This version does not specify any versions on dependants.
+     `(#:tests? #f      ; Cannot compile line_drawing for the test suite.
+       #:cargo-inputs
+       (("rust-num-traits" ,rust-num-traits-0.2))
+       #:cargo-development-inputs
+       (("rust-bresenham" ,rust-bresenham-0.1)
+        ("rust-image" ,rust-image-0.22) ; 0.17?
+        ("rust-rand" ,rust-rand-0.6))))
+    (home-page "https://github.com/expenses/line_drawing")
+    (synopsis "Collection of line-drawing algorithms")
+    (description
+     "This package provides a collection of line-drawing algorithms for use in
+graphics and video games.")
+    (license license:expat)))
+
 (define-public rust-linked-hash-map-0.5
   (package
     (name "rust-linked-hash-map")
@@ -8781,6 +9413,27 @@ pairs in insertion order.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-linked-hash-map-0.4
+  (package
+    (inherit rust-linked-hash-map-0.5)
+    (name "rust-linked-hash-map")
+    (version "0.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "linked-hash-map" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0fd958y02ggwpa2246kmjky9xmnww7vxg0ik3rxgy23hgwlyqq3q"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-clippy" ,rust-clippy-0.0)
+        ("rust-heapsize" ,rust-heapsize-0.3)
+        ("rust-serde" ,rust-serde-0.9)
+        ("rust-serde-test" ,rust-serde-test-0.9))))))
+
 (define-public rust-linked-hash-map-0.3
   (package
     (inherit rust-linked-hash-map-0.5)
@@ -8864,19 +9517,19 @@ release (fork of debug_unreachable)")
          "0aa2l7wg9pzx24ks4p97gdy09a4hhs1sr9drxnm75v906d7hnbiv"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:tests? #f      ; test suite hangs
        #:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cc" ,rust-cc-1.0)
         ("rust-cfg-if" ,rust-cfg-if-0.1)
         ("rust-libc" ,rust-libc-0.2)
         ("rust-void" ,rust-void-1.0))
        #:cargo-development-inputs
        (("rust-bytes" ,rust-bytes-0.4)
         ("rust-caps" ,rust-caps-0.3)
-        ("rust-cc" ,rust-cc-1.0)
         ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-rand" ,rust-rand-0.4)
-        ("rust-sysctl" ,rust-sysctl-0.4)
+        ("rust-rand" ,rust-rand-0.6)
+        ("rust-sysctl" ,rust-sysctl-0.1)
         ("rust-tempfile" ,rust-tempfile-3.0))))
     (home-page "https://github.com/nix-rust/nix")
     (synopsis "Rust friendly bindings to *nix APIs")
@@ -9415,6 +10068,28 @@ giga, kibi.")
      "This package can convert numbers into stack-allocated byte arrays.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-obj-0.9
+  (package
+    (name "rust-obj")
+    (version "0.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "obj" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "10z1r2r0xyhr4j1n07135kz4bc0zhqy98vabs99vz0x171bi8gy0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-genmesh" ,rust-genmesh-0.6))))
+    (home-page "https://github.com/kvark/obj")
+    (synopsis "Package for loading Wavefront .obj files")
+    (description
+     "This package provides a package for loading Wavefront @code{.obj} files.")
+    (license license:asl2.0)))
+
 (define-public rust-objc-0.2
   (package
     (name "rust-objc")
@@ -10145,6 +10820,36 @@ deserialization, and interpreter in Rust.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-partial-io-0.2
+  (package
+    (name "rust-partial-io")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "partial-io" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "03iynvayh11a4mckhwflm5y1qmnkw5m3b20gzi1crpasndy3h8xx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-futures" ,rust-futures-0.1)
+        ("rust-quickcheck" ,rust-quickcheck-0.4)
+        ("rust-tokio-io" ,rust-tokio-io-0.1))
+       #:cargo-development-inputs
+       (("rust-lazy-static" ,rust-lazy-static-0.2)
+        ("rust-quickcheck" ,rust-quickcheck-0.4)
+        ("rust-tokio-core" ,rust-tokio-core-0.1))))
+    (home-page "https://github.com/facebookincubator/rust-partial-io")
+    (synopsis
+     "Helpers to test partial, interrupted and would-block I/O operations")
+    (description
+     "Helpers to test partial, interrupted and would-block I/O operations.")
+    (license license:bsd-3)))
+
 (define-public rust-paste-0.1
   (package
     (name "rust-paste")
@@ -10709,6 +11414,122 @@ used in Cargo build scripts.")
      "Lazily evaluated, order-independent plugins for extensible types.")
     (license license:expat)))
 
+(define-public rust-pnacl-build-helper-1.4
+  (package
+    (name "rust-pnacl-build-helper")
+    (version "1.4.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pnacl-build-helper" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "145hxz3m3sg8mm9sfqqqaarnna43v65l6whwswrvcvy0fzp17gnz"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-tempdir" ,rust-tempdir-0.3)
+        ("rust-walkdir" ,rust-walkdir-1.0))))
+    (home-page "https://github.com/DiamondLovesYou/cargo-pnacl-helper")
+    (synopsis
+     "Build script helper for building PNaCl/NaCl C/CXX libraries from source")
+    (description
+     "Build script helper for building PNaCl/NaCl C/CXX libraries from source")
+    (license license:mpl2.0)))
+
+(define-public rust-png-0.15
+  (package
+    (name "rust-png")
+    (version "0.15.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "png" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "10x2qkhyfnm3si5vgx77r2ik811gaap7ahi825wfxgsb0lirm1gg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-crc32fast" ,rust-crc32fast-1.2)
+        ("rust-deflate" ,rust-deflate-0.7)
+        ("rust-inflate" ,rust-inflate-0.4))
+       #:cargo-development-inputs
+       (("rust-getopts" ,rust-getopts-0.2)
+        ;; TODO: glium has many cyclic dependencies with other packages
+        ;;("rust-glium" ,rust-glium-0.24)
+        ("rust-glob" ,rust-glob-0.3)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-term" ,rust-term-0.6))))
+    (home-page "https://github.com/image-rs/image-png.git")
+    (synopsis "PNG decoding and encoding library in pure Rust")
+    (description
+     "PNG decoding and encoding library in pure Rust.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-png-0.14
+  (package
+    (inherit rust-png-0.15)
+    (name "rust-png")
+    (version "0.14.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "png" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0nf3a8r9p9zrj4x30b48f7yv18dz9xkmrq9b3lnzmpnhzn0z9nk3"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-deflate" ,rust-deflate-0.7)
+        ("rust-inflate" ,rust-inflate-0.4)
+        ("rust-num-iter" ,rust-num-iter-0.1))
+       #:cargo-development-inputs
+       (("rust-getopts" ,rust-getopts-0.2)
+        ;; TODO: glium has many cyclic dependencies with other packages
+        ;; ("rust-glium" ,rust-glium-0.22)
+        ("rust-glob" ,rust-glob-0.2)
+        ("rust-rand" ,rust-rand-0.5)
+        ("rust-term" ,rust-term-0.4))))))
+
+(define-public rust-png-0.12
+  (package
+    (inherit rust-png-0.14)
+    (name "rust-png")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "png" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0nqlc8lqf8ncv3kj0gzlxwli61dbbxcjlrp176kvilw4sl09cjzm"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-deflate" ,rust-deflate-0.7)
+        ("rust-inflate" ,rust-inflate-0.4)
+        ("rust-num-iter" ,rust-num-iter-0.1))
+       #:cargo-development-inputs
+       (("rust-getopts" ,rust-getopts-0.2)
+        ;; TODO: gluum has many cyclic dependencies with other packages
+        ;; ("rust-glium" ,rust-glium-0.21)
+        ("rust-glob" ,rust-glob-0.2)
+        ("rust-term" ,rust-term-0.4))))))
+
 (define-public rust-pocket-resources-0.3
   (package
     (name "rust-pocket-resources")
@@ -11292,25 +12113,39 @@ integers, floats, tuples, booleans, lists, strings, options and results.")
         ("rust-log" ,rust-log-0.3)
         ("rust-rand" ,rust-rand-0.3))))))
 
-(define-public rust-quickcheck-0.2
+(define-public rust-quickcheck-0.4
   (package
-    (inherit rust-quickcheck-0.9)
+    (inherit rust-quickcheck-0.5)
     (name "rust-quickcheck")
-    (version "0.2.27")
+    (version "0.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "quickcheck" version))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1vb4acppaavlnchzc1jmn5wlkgir9x9gmhgp97bavyxxqxgsg1nh"))))
+         "01hligcv1h4pvc8ykch65qjzi7jgcq2s462v69j27slc84fl3hh2"))))
     (arguments
      `(#:cargo-inputs
        (("rust-env-logger" ,rust-env-logger-0.3)
         ("rust-log" ,rust-log-0.3)
-        ("rust-rand" ,rust-rand-0.3))
-       #:skip-build? #t))))  ; Package needs 'unicode' crate.
+        ("rust-rand" ,rust-rand-0.3))))))
+
+(define-public rust-quickcheck-0.2
+  (package
+    (inherit rust-quickcheck-0.4)
+    (name "rust-quickcheck")
+    (version "0.2.27")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "quickcheck" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1vb4acppaavlnchzc1jmn5wlkgir9x9gmhgp97bavyxxqxgsg1nh"))))))
 
 (define-public rust-quickcheck-macros-0.8
   (package
@@ -12472,6 +13307,34 @@ uses finite automata and guarantees linear time matching on all inputs.")
         ("rust-quickcheck" ,rust-quickcheck-0.6)
         ("rust-rand" ,rust-rand-0.4))))))
 
+(define-public rust-regex-0.1
+  (package
+    (inherit rust-regex-0.2)
+    (name "rust-regex")
+    (version "0.1.80")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "regex" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0bs036h3vzc6pj5jj4vc909s9rppq7b808ic99qn0y6gm3karm2g"))))
+    (arguments
+     `(#:skip-build? #t     ; Can't find dependent crates.
+       #:cargo-inputs
+       (("rust-aho-corasick" ,rust-aho-corasick-0.5)
+        ("rust-memchr" ,rust-memchr-0.1)
+        ("rust-regex-syntax" ,rust-regex-syntax-0.3)
+        ("rust-simd" ,rust-simd-0.2) ; 0.1?
+        ("rust-thread-local" ,rust-thread-local-0.2)
+        ("rust-utf8-ranges" ,rust-utf8-ranges-0.1))
+       #:cargo-development-inputs
+       (("rust-lazy-static" ,rust-lazy-static-0.1)
+        ("rust-quickcheck" ,rust-quickcheck-0.2)
+        ("rust-rand" ,rust-rand-0.3))))))
+
 (define-public rust-regex-automata-0.1
   (package
     (name "rust-regex-automata")
@@ -12559,8 +13422,7 @@ uses finite automata and guarantees linear time matching on all inputs.")
         (base32
          "0ms9hgdhhsxw9w920i7gipydvagf100bb56jbs192rz86ln01v7r"))))
     (arguments
-     `(#:skip-build? #t
-       #:cargo-development-inputs
+     `(#:cargo-development-inputs
        (("rust-quickcheck" ,rust-quickcheck-0.2)
         ("rust-rand" ,rust-rand-0.3))))))
 
@@ -12922,6 +13784,42 @@ rustc compiler.")
      "Automatically apply the suggestions made by rustc.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rusttype-0.8
+  (package
+    (name "rust-rusttype")
+    (version "0.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rusttype" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "12hwfg85iii7sbgsyyr23yw862dzp7f8zwn9xv5iqydm5w1i3a8l"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f      ; Artifacts for tests not included.
+       #:cargo-inputs
+       (("rust-approx" ,rust-approx-0.3)
+        ("rust-arrayvec" ,rust-arrayvec-0.5)
+        ("rust-crossbeam-deque" ,rust-crossbeam-deque-0.7)
+        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.7)
+        ("rust-libm" ,rust-libm-0.2)
+        ("rust-linked-hash-map" ,rust-linked-hash-map-0.5)
+        ("rust-num-cpus" ,rust-num-cpus-1.11)
+        ("rust-ordered-float" ,rust-ordered-float-1.0)
+        ("rust-rustc-hash" ,rust-rustc-hash-1.0)
+        ("rust-stb-truetype" ,rust-stb-truetype-0.3))))
+    (home-page "https://gitlab.redox-os.org/redox-os/rusttype")
+    (synopsis "Pure Rust alternative to libraries like FreeType")
+    (description
+     "This package provides a pure Rust alternative to libraries like FreeType.
+RustType provides an API for loading, querying and rasterising TrueType fonts.
+It also provides an implementation of a dynamic GPU glyph cache for hardware
+font rendering.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rustversion-1.0
   (package
     (name "rust-rustversion")
@@ -13330,6 +14228,38 @@ proven statistical guarantees.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-sema-0.1
+  (package
+    (name "rust-sema")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sema" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0ckq33sg84785p195m54h03jcn7fai8w08hjnb94nzaakgzibbz3"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin (substitute* "Cargo.toml"
+                   (("libc.*") "libc = \"0.2\"\n"))
+                 #t))))
+    (build-system cargo-build-system)
+    (arguments
+     `( #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-rand" ,rust-rand-0.3)
+        ("rust-time" ,rust-time-0.1))
+       #:cargo-development-inputs
+       (("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-nix" ,rust-nix-0.15))))
+    (home-page "https://github.com/cpjreynolds/sema")
+    (synopsis "Rust semaphore library")
+    (description "Rust semaphore library.")
+    (license license:expat)))
+
 (define-public rust-semver-0.9
   (package
     (name "rust-semver")
@@ -13419,6 +14349,33 @@ proven statistical guarantees.")
      "This package provides a generic serialization/deserialization framework.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-serde-0.9
+  (package
+    (inherit rust-serde-1.0)
+    (name "rust-serde")
+    (version "0.9.15")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1bsla8l5xr9pp5sirkal6mngxcq6q961km88jvf339j5ff8j7dil"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-cargo-toml
+           (lambda _
+             (substitute* "Cargo.toml"
+               ((", path =.*}") "}"))
+             #t)))
+       #:cargo-inputs
+       (("rust-serde-derive" ,rust-serde-derive-0.9))
+       #:cargo-development-inputs
+       (("rust-serde-derive" ,rust-serde-derive-0.9))))))
+
 (define-public rust-serde-0.8
   (package
     (inherit rust-serde-1.0)
@@ -13437,6 +14394,24 @@ proven statistical guarantees.")
        (("rust-clippy" ,rust-clippy-0.0))
        #:tests? #f))))
 
+(define-public rust-serde-0.4
+  (package
+    (inherit rust-serde-0.9)
+    (name "rust-serde")
+    (version "0.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "06s2ayx1p5zzj4q7bfld60c9iprsk1256pnh8qj6h794mjinw11b"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-num" ,rust-num-0.2))))))
+
 (define-public rust-serde-big-array-0.1
   (package
     (name "rust-serde-big-array")
@@ -13570,6 +14545,28 @@ proven statistical guarantees.")
 for the serde framework.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-serde-codegen-internals-0.14
+  (package
+    (name "rust-serde-codegen-internals")
+    (version "0.14.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde_codegen_internals" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0004s3wlc85vi6hq62hq84cv5b6qbbin1n6hdaqj095xhg98p25w"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-syn" ,rust-syn-0.11))))
+    (home-page "https://serde.rs")
+    (synopsis "AST representation used by Serde codegen")
+    (description
+     "Unstable AST representation used by Serde codegen.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-serde-derive-1.0
   (package
     (name "rust-serde-derive")
@@ -13598,6 +14595,33 @@ for the serde framework.")
       "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-serde-derive-0.9
+  (package
+    (inherit rust-serde-derive-1.0)
+    (name "rust-serde-derive")
+    (version "0.9.15")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde-derive" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1fkldf0lnl6pwxs00qpyp79m30qmfpi3bk0wm22211ylyikdi3wp"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-cargo-toml
+           (lambda _
+             (substitute* "Cargo.toml"
+               ((", path =.*}") "}"))
+             #t)))
+       #:cargo-inputs
+       (("rust-quote" ,rust-quote-0.3)
+        ("rust-serde-codegen-internals" ,rust-serde-codegen-internals-0.14)
+        ("rust-syn" ,rust-syn-0.11))))))
+
 (define-public rust-serde-json-1.0
   (package
     (name "rust-serde-json")
@@ -13628,6 +14652,67 @@ for the serde framework.")
      "This package provides a JSON serialization file format.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-serde-json-0.9
+  (package
+    (inherit rust-serde-json-1.0)
+    (name "rust-serde-json")
+    (version "0.9.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde_json" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "188nbf56m7p6mnh3xd71rwqxd4g95lqh8gsl7mfy3lp7gd4cz2xd"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-dtoa" ,rust-dtoa-0.4)
+        ("rust-itoa" ,rust-itoa-0.3)
+        ("rust-linked-hash-map" ,rust-linked-hash-map-0.4)
+        ("rust-num-traits" ,rust-num-traits-0.1)
+        ("rust-serde" ,rust-serde-0.9))
+       #:cargo-development-inputs
+       (("rust-serde-derive" ,rust-serde-derive-0.9))))))
+
+(define-public rust-serde-macros-0.4
+  (package
+    (name "rust-serde-macros")
+    (version "0.4.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde_macros" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1717rpncvvyvyrpb7hdjgxpiki9vdgygwv2r3d9aal5n8cm8xi8i"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-cargo-toml
+           (lambda _
+             (substitute* "Cargo.toml"
+               ((", path =.*}") "}"))
+             #t)))
+       #:cargo-inputs
+       (("rust-serde-codegen" ,rust-serde-codegen-0.4))
+       #:cargo-development-inputs
+       (("rust-num" ,rust-num-0.2)
+        ("rust-rustc-serialize" ,rust-rustc-serialize-0.3)
+        ("rust-serde" ,rust-serde-0.4))))
+    (home-page "https://serde.rs")
+    (synopsis
+     "Macros to auto-generate implementations for the serde framework")
+    (description
+     "Macros to auto-generate implementations for the serde framework.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-serde-test-1.0
   (package
     (name "rust-serde-test")
@@ -13656,6 +14741,30 @@ for the serde framework.")
      "Token De/Serializer for testing De/Serialize implementations.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-serde-test-0.9
+  (package
+    (inherit rust-serde-test-1.0)
+    (name "rust-serde-test")
+    (version "0.9.15")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde_test" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "193mf0qkhvjywd06x6hhmkixlqcyfbpfwfmr75dp2b8xwzpsvxwf"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-cargo-toml
+           (lambda _
+             (substitute* "Cargo.toml"
+               ((", path =.*}") "}"))
+             #t)))
+       #:cargo-inputs (("rust-serde" ,rust-serde-0.9))))))
+
 (define-public rust-serde-test-0.8
   (package
     (inherit rust-serde-test-1.0)
@@ -13709,6 +14818,99 @@ for the serde framework.")
     (description "YAML support for Serde.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-servo-freetype-sys-4
+  (package
+    (name "rust-servo-freetype-sys")
+    (version "4.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "servo-freetype-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1z0dvnakans4vn4vlpx4nxg984427lh8dskxxz9pglij1mnwnk1c"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin (delete-file-recursively "freetype2") #t))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cmake" ,rust-cmake-0.1)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("freetype" ,freetype)))
+    (home-page "http://www.freetype.org/")
+    (synopsis "Rust wrapper around freetype")
+    (description
+     "This package provides a Rust wrapper around the FreeType library.")
+    (license license:mpl2.0)))  ; build.rs is mpl2.0
+
+(define-public rust-servo-fontconfig-0.4
+  (package
+    (name "rust-servo-fontconfig")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "servo-fontconfig" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1nach6s4hdf86jz5hlm4p5r7vin91cs7gg89mr533id5fpbzi250"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-servo-fontconfig-sys" ,rust-servo-fontconfig-sys-4))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("fontconfig" ,fontconfig)))
+    (home-page "https://github.com/servo/rust-fontconfig/")
+    (synopsis "Rust bindings for fontconfig")
+    (description "This package provides Rust bindings for fontconfig.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-servo-fontconfig-sys-4
+  (package
+    (name "rust-servo-fontconfig-sys")
+    (version "4.0.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "servo-fontconfig-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0v0mbicy74wd6cjd5jyqnm4nvrrr5lmg053cn16kylhg8mkf3cv2"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            (for-each delete-file-recursively
+                      (find-files "." "[^Cargo.toml,^build\\.rs]"))
+            #t))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-expat-sys" ,rust-expat-sys-2.1)
+        ("rust-servo-freetype-sys" ,rust-servo-freetype-sys-4)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("fontconfig" ,fontconfig)))
+    (home-page "https://crates.io/crates/servo-fontconfig-sys")
+    (synopsis "Rust wrapper around Fontconfig")
+    (description
+     "This package provides a Rust wrapper around Fontxonfig.")
+    (license license:mpl2.0)))  ; build.rs is mpl2.0
+
 (define-public rust-sha-1-0.8
   (package
     (name "rust-sha-1")
@@ -14838,6 +16040,71 @@ cryptographic implementations.")
         ("rust-walkdir" ,rust-walkdir-2.2))))
     (properties '())))
 
+(define-public rust-syn-0.11
+  (package
+    (inherit rust-syn-0.15)
+    (name "rust-syn")
+    (version "0.11.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "syn" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1b8x8jdsmj6r9ck7n1pg371526n1q90kx6rv6ivcb22w06wr3f6k"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fixup-cargo-toml
+           (lambda _
+             (substitute* "Cargo.toml"
+               ((", path =.*,") ","))
+             #t)))
+       #:cargo-inputs
+       (("rust-quote" ,rust-quote-0.3)
+        ("rust-synom" ,rust-synom-0.11)
+        ("rust-unicode-xid" ,rust-unicode-xid-0.0))
+       #:cargo-development-inputs
+       (("rust-syntex-pos" ,rust-syntex-pos-0.58)
+        ("rust-syntex-syntax" ,rust-syntex-syntax-0.58)
+        ("rust-tempdir" ,rust-tempdir-0.3)
+        ("rust-walkdir" ,rust-walkdir-1.0))))))
+
+(define-public rust-synom-0.11
+  (package
+    (name "rust-synom")
+    (version "0.11.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "synom" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1dj536sh5xxhan2h0znxhv0sl6sb7lvzmsmrc3nvl3h1v5p0d4x3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f      ; doc tests fail
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fixup-cargo-toml
+           (lambda _
+             (substitute* "Cargo.toml"
+               (("^path =.*") ""))
+             #t)))
+       #:cargo-inputs
+       (("rust-unicode-xid" ,rust-unicode-xid-0.0))
+       #:cargo-development-inputs
+       (("rust-syn" ,rust-syn-0.11))))
+    (home-page "https://github.com/dtolnay/syn")
+    (synopsis "Stripped-down Nom parser used by Syn")
+    (description
+     "Stripped-down Nom parser used by Syn.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-synstructure-0.10
   (package
     (name "rust-synstructure")
@@ -15091,6 +16358,32 @@ memory all at once.")
      "This package provides a small wrapper around option.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-target-build-utils-0.3
+  (package
+    (name "rust-target-build-utils")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "target_build_utils" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0p7713x4bpbwi11l196z1mi8ym8qj1cdnab1mm2ffpm2wi516g81"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-phf" ,rust-phf-0.7)
+        ("rust-serde-json" ,rust-serde-json-0.9)
+        ("rust-phf-codegen" ,rust-phf-codegen-0.7))))
+    (home-page "https://github.com/nagisa/target_build_utils.rs")
+    (synopsis "Rust utility to handle TARGET environment variable")
+    (description
+     "Utility crate to handle the @code{TARGET} environment variable passed into
+@code{build.rs} scripts.")
+    (license (list license:isc license:asl2.0))))
+
 (define-public rust-tempdir-0.3
   (package
     (name "rust-tempdir")
@@ -15690,6 +16983,57 @@ fixed set of worker threads.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-tiff-0.3
+  (package
+    (name "rust-tiff")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tiff" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0zgmbny2f8rssqmjdfvnysy0vqwcvlwl6q9f5yixhavlqk7w5dyp"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f      ; Tests images not included with release.
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1.3)
+        ("rust-lzw" ,rust-lzw-0.10)
+        ("rust-num-derive" ,rust-num-derive-0.2)
+        ("rust-num-traits" ,rust-num-traits-0.2))
+       #:cargo-development-inputs
+       (("rust-tempfile" ,rust-tempfile-3.0))))
+    (home-page "https://github.com/image-rs/image-tiff")
+    (synopsis
+     "TIFF decoding and encoding library in pure Rust")
+    (description
+     "TIFF decoding and encoding library in pure Rust.")
+    (license license:expat)))
+
+(define-public rust-tiff-0.2
+  (package
+    (inherit rust-tiff-0.3)
+    (name "rust-tiff")
+    (version "0.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tiff" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1kn7psgpacns337vvqh272rkqwnakmjd51rc7ygwnc03ibr38j0y"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1.3)
+        ("rust-lzw" ,rust-lzw-0.10)
+        ("rust-num-derive" ,rust-num-derive-0.2)
+        ("rust-num-traits" ,rust-num-traits-0.2))))))
+
 (define-public rust-time-0.1
   (package
     (name "rust-time")
@@ -17120,6 +18464,24 @@ Unix users and groups.")
      "Convert ranges of Unicode codepoints to UTF-8 byte ranges.")
     (license (list license:expat license:unlicense))))
 
+(define-public rust-utf8-ranges-0.1
+  (package
+    (inherit rust-utf8-ranges-1.0)
+    (name "rust-utf8-ranges")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "utf8-ranges" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "03xf604b2v51ag3jgzw92l97xnb10kw9zv948bhc7ja1ik017jm1"))))
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-quickcheck" ,rust-quickcheck-0.2))))))
+
 (define-public rust-utf8parse-0.1
   (package
     (name "rust-utf8parse")
@@ -17435,6 +18797,31 @@ specified across Unix and Windows platforms.")
     (license (list license:unlicense
                    license:expat))))
 
+(define-public rust-walkdir-1.0
+  (package
+    (inherit rust-walkdir-2.2)
+    (name "rust-walkdir")
+    (version "1.0.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "walkdir" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1zw8safzqpsrvfn0256cngq2fr9d4lmwv5qb8ycn1f7sf3kgj25v"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-kernel32-sys" ,rust-kernel32-sys-0.2)
+        ("rust-same-file" ,rust-same-file-0.1)
+        ("rust-winapi" ,rust-winapi-0.2))
+       #:cargo-development-inputs
+       (("rust-docopt" ,rust-docopt-0.7)
+        ("rust-quickcheck" ,rust-quickcheck-0.4)
+        ("rust-rand" ,rust-rand-0.3)
+        ("rust-rustc-serialize" ,rust-rustc-serialize-0.3))))))
+
 (define-public rust-wasi-0.5
   (package
     (name "rust-wasi")
@@ -17908,6 +19295,30 @@ color in a Windows console.")
     (license (list license:unlicense
                    license:expat))))
 
+(define-public rust-winpty-sys-0.4
+  (package
+    (name "rust-winpty-sys")
+    (version "0.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "winpty-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0s5m2vvlw7wphc466s47zfmp08zk00wzj999l1w3ajqlxbnfgb9x"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bindgen" ,rust-bindgen-0.33)
+        ("rust-cc" ,rust-cc-1.0))))
+    (home-page "https://github.com/rprichard/winpty")
+    (synopsis "Rust winpty bindings")
+    (description "Rust winpty bindings.")
+    (license license:expat)))
+
 (define-public rust-winreg-0.6
   (package
     (name "rust-winreg")
@@ -18204,6 +19615,38 @@ to XDG Base Directory specification")
        (("rust-clippy" ,rust-clippy-0.0)
         ("rust-linked-hash-map" ,rust-linked-hash-map-0.3))))))
 
+(define-public rust-zip-0.5
+  (package
+    (name "rust-zip")
+    (version "0.5.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "zip" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1biv5kh4fl7wpjlsxfczvgrdjlybf0xjaw7s36didql8lxxz67z4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bzip2" ,rust-bzip2-0.3)
+        ("rust-crc32fast" ,rust-crc32fast-1.2)
+        ("rust-flate2" ,rust-flate2-1.0)
+        ("rust-podio" ,rust-podio-0.1)
+        ("rust-time" ,rust-time-0.1))
+       #:cargo-development-inputs
+       (("rust-bencher" ,rust-bencher-0.1)
+        ("rust-rand" ,rust-rand-0.4)
+        ("rust-walkdir" ,rust-walkdir-1.0))))
+    (home-page "https://github.com/mvdnes/zip-rs.git")
+    (synopsis
+     "Library to support the reading and writing of zip files")
+    (description
+     "Library to support the reading and writing of zip files.")
+    (license license:expat)))
+
 (define-public rust-zoneinfo-compiled-0.4
   (package
     (name "rust-zoneinfo-compiled")
diff --git a/gnu/packages/datamash.scm b/gnu/packages/datamash.scm
index ac1b71e63b..a61ee96fec 100644
--- a/gnu/packages/datamash.scm
+++ b/gnu/packages/datamash.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2018 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,7 +29,7 @@
 (define-public datamash
   (package
     (name "datamash")
-    (version "1.5")
+    (version "1.6")
     (source
      (origin
       (method url-fetch)
@@ -37,7 +37,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "1b91pbdarnfmbhid8aa2f50k0fln8n7pg62782b4y0jlzvaljqi2"))))
+        "1jvqxcyh0aghnqh3m2rk5av1x0038flcmfzd493vasv1k69vgfdr"))))
     (native-inputs
      `(("which" ,which)                 ;for tests
        ("perl" ,perl)))                 ;for help2man
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index be0e6a84c2..b61eb19069 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -59,6 +59,7 @@
 ;;; Copyright © 2019 David Wilson <david@daviwil.com>
 ;;; Copyright © 2020 Paul Garlick <pgarlick@tourbillion-technology.com>
 ;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
+;;; Copyright © 2020 Evan Straw <evan.straw99@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -165,7 +166,7 @@
 (define-public emacs-geiser
   (package
     (name "emacs-geiser")
-    (version "0.11")
+    (version "0.11.2")
     (source (origin
              (method git-fetch)
              (uri (git-reference
@@ -174,7 +175,7 @@
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "0fb2h984hn7bnyiziplp7kgk29zdzc9yainsv0k1li436irlp9dd"))))
+               "1khi1bghsjx6cs5acizmlbw9z19s4qycnji9krdbn42cbpv0rysv"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -19360,7 +19361,7 @@ with passwords for paths matching regexps.")
      `(("emacs-ivy" ,emacs-ivy)))
     (home-page "https://github.com/redguardtoo/eacl")
     (synopsis "Auto-complete lines by using @code{grep} on a project")
-    (description "This package provides auto-completion cammands for single
+    (description "This package provides auto-completion commands for single
 and multiple lines of code in a project.")
     (license license:gpl3+)))
 
@@ -20370,7 +20371,7 @@ color.  Designed for 256-color terminals.  Comes in light and dark!")
      "https://github.com/elixir-editors/emacs-elixir")
     (synopsis "Major mode for editing Elixir files")
     (description
-     "Elixir-Mode Provides font-locking, indentation and navigation support
+     "Elixir-Mode provides font-locking, indentation and navigation support
  for the Elixir programming language.")
     (license license:gpl3+)))
 
@@ -21536,3 +21537,26 @@ Values are stored in a directory in @code{user-emacs-directory}, using
 one file per value.  This makes it easy to delete or remove unused
 variables.")
     (license license:gpl3+)))
+
+(define-public emacs-company-emoji
+  (package
+    (name "emacs-company-emoji")
+    (version "2.5.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dunn/company-emoji/")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0r9zcbm3nb3zw5cwrkl098v5b49jbga5404bj7j55g6k4rwkjar2"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-company" ,emacs-company)))
+    (home-page "https://github.com/dunn/company-emoji/")
+    (synopsis "Company completion back-end for emoji")
+    (description
+     "This library is a Company back-end providing auto-completion for
+emoji.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index b248b27ce2..186e1eecff 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -781,7 +781,7 @@ It contains the following fonts and styles:
 (define-public font-fantasque-sans
   (package
     (name "font-fantasque-sans")
-    (version "1.7.2")
+    (version "1.8.0")
     (source
      (origin
        (method git-fetch)
@@ -790,26 +790,27 @@ It contains the following fonts and styles:
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1gjranq7qf20rfxnpxsckv1hl35nzsal0rjs475nhfbpqy5wmly6"))))
+        (base32 "17l18488qyl9gdj80r8pcym3gp3jkgsdikwalnrp5rgvwidqx507"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("ttfautohint" ,ttfautohint)
        ("woff-tools" ,woff-tools)
        ("fontforge" ,fontforge)
        ("woff2" ,woff2)
-       ("ttf2eot" ,ttf2eot)
        ("zip" ,zip)))
     (arguments
      `(#:tests? #f                 ;test target intended for visual inspection
        #:phases (modify-phases %standard-phases
                   (delete 'configure)   ;no configuration
-                  (add-before 'build 'xrange->range
-                    ;; Rather than use a python2 fontforge, just replace the
-                    ;; offending function.
+                  (add-before 'build 'support-python@3
+                    ;; Rather than use a Python 2 fontforge, replace Python-2-
+                    ;; specific code with a passable Python 3 equivalent.
                     (lambda _
                       (substitute* "Scripts/fontbuilder.py"
                         (("xrange") "range"))
+                      (substitute* "Scripts/features.py"
+                        (("f\\.write\\(fea_code\\)")
+                         "f.write(str.encode(fea_code))"))
                       #t))
                   (replace 'install
                     ;; 'make install' wants to install to ~/.fonts, install to
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 24527abae1..05e026a846 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -19,6 +19,7 @@
 ;;; Copyright © 2019 Jethro Cao <jethrocao@gmail.com>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
+;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -88,6 +89,7 @@
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages stb)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages video)
   #:use-module (gnu packages web)
@@ -2114,3 +2116,75 @@ computer games, 3D authoring tools and simulation tools.")
     (description "Chipmunk is a simple, lightweight, fast and portable 2D
 rigid body physics library written in C.")
     (license license:expat)))
+
+(define-public libtcod
+  (package
+    (name "libtcod")
+    (version "1.15.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/libtcod/libtcod.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0pzr8ajmbqvh43ldjajx962xirj3rf8ayh344p6mqlrmb8gxrfr5"))
+              (modules '((guix build utils)))
+              (snippet '(begin
+                          (delete-file-recursively "src/vendor/utf8proc")
+                          (delete-file-recursively "src/vendor/zlib")
+                          (delete-file "src/vendor/stb_truetype.h")
+                          (delete-file "src/vendor/stb_sprintf.h")
+                          (delete-file "src/vendor/lodepng.cpp")
+                          (delete-file "src/vendor/lodepng.h")
+
+                          (substitute* "buildsys/autotools/sources.am"
+                            (("\\.\\./\\.\\./src/vendor/lodepng\\.cpp \\\\\n") "")
+                            (("\\.\\./\\.\\./src/vendor/stb\\.c \\\\")
+                             "../../src/vendor/stb.c")
+                            (("\\.\\./\\.\\./src/vendor/utf8proc/utf8proc\\.c") ""))
+
+                          (substitute* "src/libtcod/sys_sdl_img_png.cpp"
+                            (("\\.\\./vendor/") ""))
+
+                          (substitute* '("src/libtcod/color/canvas.cpp"
+                                         "src/libtcod/sys_sdl_img_png.cpp"
+                                         "src/libtcod/tileset/truetype.cpp"
+                                         "src/libtcod/tileset/tilesheet.cpp")
+                            (("\\.\\./\\.\\./vendor/") ""))
+
+                          (substitute* "src/libtcod/console/printing.cpp"
+                            (("\\.\\./\\.\\./vendor/utf8proc/") ""))
+                          #t))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("--with-gnu-ld"
+                           "LIBS=-lutf8proc -llodepng")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'change-to-build-dir
+           (lambda _
+             (chdir "buildsys/autotools")
+             (patch-shebang "get_version.py")
+             #t)))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("python" ,python)
+       ("pkg-config" ,pkg-config)
+       ("stb-sprintf" ,stb-sprintf)
+       ("stb-truetype" ,stb-truetype)))
+    (inputs
+     `(("lodepng" ,lodepng)
+       ("sdl2" ,sdl2)
+       ("utf8proc" ,utf8proc)
+       ("zlib" ,zlib)))
+    (home-page "https://github.com/libtcod/libtcod")
+    (synopsis "Library specifically designed for writing roguelikes")
+    (description
+     "libtcod is a fast, portable and uncomplicated API for roguelike
+developers providing an advanced true color console, input, and lots of other
+utilities frequently used in roguelikes.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index f9da1e9e89..106b733673 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -23,6 +23,7 @@
 ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
+;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1844,3 +1845,58 @@ using only text tools.
 SNG is implemented by a compiler/decompiler called sng that
 losslessly translates between SNG and PNG.")
     (license license:zlib)))
+
+(define-public lodepng
+  ;; There are no tags in the repository, so we take the version as defined in
+  ;; lodepng.cpp.
+  (let ((commit "48e5364ef48ec2408f44c727657ac1b6703185f8")
+        (revision "1")
+        (version "20200215"))
+    (package
+      (name "lodepng")
+      (version (git-version version revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/lvandeve/lodepng")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1a1x8ag2scanzb2066jm9hg2y9kaa3wmpgmz10l1x9bkpik612lw"))
+                (file-name (git-file-name name version))))
+      (build-system gnu-build-system)
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (replace 'build
+             (lambda _
+               (setenv "CXXFLAGS" "-fPIC")
+               (invoke "make" "lodepng.o")
+               (invoke "make" "lodepng_util.o")
+               (invoke "g++" "-fPIC" "-O3"
+                       "-o" "liblodepng.so"
+                       "-shared" "lodepng.o" "lodepng_util.o")
+               #t))
+           (replace 'check
+             (lambda _
+               (invoke "make" "unittest")
+               (invoke "./unittest")
+               #t))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (doc (string-append out "/share/doc"))
+                      (lib (string-append out "/lib"))
+                      (include (string-append out "/include")))
+                 (install-file "lodepng.h" include)
+                 (install-file "lodepng_util.h" include)
+                 (install-file "liblodepng.so" lib)
+                 (install-file "README.md" doc)
+                 #t))))))
+      (home-page "https://lodev.org/lodepng/")
+      (synopsis "PNG encoder and decoder in C and C++, without dependencies")
+      (description "LodePNG is a PNG image decoder and encoder, all in one,
+no dependency or linkage required.  It's made for C (ISO C90), and has a C++
+wrapper with a more convenient interface on top.")
+      (license license:zlib))))
diff --git a/gnu/packages/ld-wrapper-next.in b/gnu/packages/ld-wrapper-next.in
new file mode 100644
index 0000000000..5d5756f6a3
--- /dev/null
+++ b/gnu/packages/ld-wrapper-next.in
@@ -0,0 +1,305 @@
+#!@BASH@
+# -*- mode: scheme; coding: utf-8; -*-
+
+# XXX: We have to go through Bash because there's no command-line switch to
+# augment %load-compiled-path, and because of the silly 127-byte limit for
+# the shebang line in Linux.
+# Use `load-compiled' because `load' (and `-l') doesn't otherwise load our
+# .go file (see <http://bugs.gnu.org/12519>).
+# Unset 'GUILE_LOAD_COMPILED_PATH' to make sure we do not stumble upon
+# incompatible .go files.  See
+# <https://lists.gnu.org/archive/html/guile-devel/2016-03/msg00000.html>.
+
+unset GUILE_LOAD_COMPILED_PATH
+main="(@ (gnu build-support ld-wrapper) ld-wrapper)"
+exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line)))" "$@"
+!#
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu build-support ld-wrapper)
+  #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match)
+  #:autoload   (ice-9 rdelim) (read-delimited)
+  #:export (ld-wrapper))
+
+;;; Commentary:
+;;;
+;;; This is a wrapper for the linker.  Its purpose is to inspect the -L and
+;;; -l switches passed to the linker, add corresponding -rpath arguments, and
+;;; invoke the actual linker with this new set of arguments.
+;;;
+;;; The alternatives to this hack would be:
+;;;
+;;;   1. Using $LD_RUN_PATH.  However, that would tend to include more than
+;;;      needed in the RPATH; for instance, given a package with `libfoo' as
+;;;      an input, all its binaries would have libfoo in their RPATH,
+;;;      regardless of whether they actually NEED it.
+;;;
+;;;   2. Use a GCC "lib" spec string such as `%{L*:-rpath %*}', which adds a
+;;;      `-rpath LIBDIR' argument for each occurrence of `-L LIBDIR'.
+;;;      However, this doesn't work when $LIBRARY_PATH is used, because the
+;;;      additional `-L' switches are not matched by the above rule, because
+;;;      the rule only matches explicit user-provided switches.  See
+;;;      <http://gcc.gnu.org/ml/gcc-help/2012-09/msg00110.html> for details.
+;;;
+;;; As a bonus, this wrapper checks for "impurities"--i.e., references to
+;;; libraries outside the store.
+;;;
+;;; Code:
+
+(define %real-ld
+  ;; Name of the linker that we wrap.
+  "@LD@")
+
+(define %store-directory
+  ;; File name of the store.
+  (or (getenv "NIX_STORE") "/gnu/store"))
+
+(define %temporary-directory
+  ;; Temporary directory.
+  (or (getenv "TMPDIR") "/tmp"))
+
+(define %build-directory
+  ;; Top build directory when run from a builder.
+  (getenv "NIX_BUILD_TOP"))
+
+(define %allow-impurities?
+  ;; Whether to allow references to libraries outside the store.
+  ;; Allow them by default for convenience.
+  (let ((value (getenv "GUIX_LD_WRAPPER_ALLOW_IMPURITIES")))
+    (or (not value)
+        (let ((value (string-downcase value)))
+          (cond ((member value '("yes" "y" "t" "true" "1"))
+                 #t)
+                ((member value '("no" "n" "f" "false" "0"))
+                 #f)
+                (else
+                 (format (current-error-port)
+                         "ld-wrapper: ~s: invalid value for \
+'GUIX_LD_WRAPPER_ALLOW_IMPURITIES'~%"
+                         value)))))))
+
+(define %debug?
+  ;; Whether to emit debugging output.
+  (getenv "GUIX_LD_WRAPPER_DEBUG"))
+
+(define %disable-rpath?
+  ;; Whether to disable automatic '-rpath' addition.
+  (getenv "GUIX_LD_WRAPPER_DISABLE_RPATH"))
+
+(define (readlink* file)
+  ;; Call 'readlink' until the result is not a symlink.
+  (define %max-symlink-depth 50)
+
+  (let loop ((file  file)
+             (depth 0))
+    (define (absolute target)
+      (if (absolute-file-name? target)
+          target
+          (string-append (dirname file) "/" target)))
+
+    (if (>= depth %max-symlink-depth)
+        file
+        (call-with-values
+            (lambda ()
+              (catch 'system-error
+                (lambda ()
+                  (values #t (readlink file)))
+                (lambda args
+                  (let ((errno (system-error-errno args)))
+                    (if (or (= errno EINVAL) (= errno ENOENT))
+                        (values #f file)
+                        (apply throw args))))))
+          (lambda (success? target)
+            (if success?
+                (loop (absolute target) (+ depth 1))
+                file))))))
+
+(define (pure-file-name? file)
+  ;; Return #t when FILE is the name of a file either within the store
+  ;; (possibly via a symlink) or within the build directory.
+  (let ((file (readlink* file)))
+    (or (not (string-prefix? "/" file))
+        (string-prefix? %store-directory file)
+        (string-prefix? %temporary-directory file)
+        (and %build-directory
+             (string-prefix? %build-directory file)))))
+
+(define (store-file-name? file)
+  ;; Return #t when FILE is a store file, possibly indirectly.
+  (string-prefix? %store-directory (readlink* file)))
+
+(define (shared-library? file)
+  ;; Return #t when FILE denotes a shared library.
+  (or (string-suffix? ".so" file)
+      (let ((index (string-contains file ".so.")))
+        ;; Since we cannot use regexps during bootstrap, roll our own.
+        (and index
+             (string-every (char-set-union (char-set #\.) char-set:digit)
+                           (string-drop file (+ index 3)))))))
+
+(define (library-search-path args)
+  ;; Return the library search path as a list of directory names.  The GNU ld
+  ;; manual notes that "[a]ll `-L' options apply to all `-l' options,
+  ;; regardless of the order in which the options appear", so we must compute
+  ;; the search path independently of the -l options.
+  (let loop ((args args)
+             (path '()))
+    (match args
+      (()
+       (reverse path))
+      (("-L" directory . rest)
+       (loop rest (cons directory path)))
+      ((argument . rest)
+       (if (string-prefix? "-L" argument)         ;augment the search path
+           (loop rest
+                 (cons (string-drop argument 2) path))
+           (loop rest path))))))
+
+(define (library-files-linked args library-path)
+  ;; Return the absolute file names of shared libraries explicitly linked
+  ;; against via `-l' or with an absolute file name in ARGS, looking them up
+  ;; in LIBRARY-PATH.
+  (define files+args
+    (fold (lambda (argument result)
+            (match result
+              ((library-files ((and flag
+                                    (or "-dynamic-linker" "-plugin"))
+                               . rest))
+               ;; When passed '-dynamic-linker ld.so', ignore 'ld.so'; when
+               ;; passed '-plugin liblto_plugin.so', ignore
+               ;; 'liblto_plugin.so'.  See <http://bugs.gnu.org/20102>.
+               (list library-files
+                     (cons* argument flag rest)))
+              ((library-files previous-args)
+               (cond ((string-prefix? "-l" argument) ;add library
+                      (let* ((lib  (string-append "lib"
+                                                  (string-drop argument 2)
+                                                  ".so"))
+                             (full (search-path library-path lib)))
+                        (list (if full
+                                  (cons full library-files)
+                                  library-files)
+                              (cons argument previous-args))))
+                     ((and (string-prefix? %store-directory argument)
+                           (shared-library? argument)) ;add library
+                      (list (cons argument library-files)
+                            (cons argument previous-args)))
+                     (else
+                      (list library-files
+                            (cons argument previous-args)))))))
+          (list '() '())
+          args))
+
+  (match files+args
+    ((files arguments)
+     (reverse files))))
+
+(define (rpath-arguments library-files)
+  ;; Return the `-rpath' argument list for each of LIBRARY-FILES, a list of
+  ;; absolute file names.
+  (fold-right (lambda (file args)
+                ;; Add '-rpath' if and only if FILE is in the store; we don't
+                ;; want to add '-rpath' for files under %BUILD-DIRECTORY or
+                ;; %TEMPORARY-DIRECTORY because that could leak to installed
+                ;; files.
+                (cond ((and (not %disable-rpath?)
+                            (store-file-name? file))
+                       (cons* "-rpath" (dirname file) args))
+                      ((or %allow-impurities?
+                           (pure-file-name? file))
+                       args)
+                      (else
+                       (begin
+                         (format (current-error-port)
+                                 "ld-wrapper: error: attempt to use \
+library outside of ~a: ~s~%"
+                                 %store-directory file)
+                         (exit 1)))))
+              '()
+              library-files))
+
+(define (expand-arguments args)
+  ;; Expand ARGS such that "response file" arguments, such as "@args.txt", are
+  ;; expanded (info "(gcc) Overall Options").
+  (define (response-file-arguments file)
+    (define (tokenize port)
+      ;; Return a list of all strings found in PORT.  Quote characters are removed,
+      ;; but whitespaces within quoted strings are preserved.
+      (let loop ((words '()))
+        (let* ((word (read-delimited " '\"" port 'split))
+               (token (car word))
+               (delim (cdr word)))
+          (if (eof-object? delim)
+              (reverse words)
+              (case delim
+                ((#\") (loop (cons (read-delimited "\"" port) words)))
+                ((#\') (loop (cons (read-delimited "'" port) words)))
+                ((#\ ) (if (> 0 (string-length token))
+                           (loop (cons token words))
+                           (loop words)))
+                (else (loop words)))))))
+
+    (when %debug?
+      (format (current-error-port)
+              "ld-wrapper: attempting to read arguments from '~a'~%" file))
+
+    (call-with-input-file file tokenize))
+
+  (define result
+    (fold-right (lambda (arg result)
+                  (if (string-prefix? "@" arg)
+                      (let ((file (string-drop arg 1)))
+                        (append (catch 'system-error
+                                  (lambda ()
+                                    (response-file-arguments file))
+                                  (lambda args
+                                    ;; FILE doesn't exist or cannot be read so
+                                    ;; leave ARG as is.
+                                    (list arg)))
+                                result))
+                      (cons arg result)))
+                '()
+                args))
+
+  ;; If there are "@" arguments in RESULT *and* we can expand them (they don't
+  ;; refer to nonexistent files), then recurse.
+  (if (equal? result args)
+      result
+      (expand-arguments result)))
+
+(define (ld-wrapper . args)
+  ;; Invoke the real `ld' with ARGS, augmented with `-rpath' switches.
+  (let* ((args (expand-arguments args))
+         (path (library-search-path args))
+         (libs (library-files-linked args path))
+         (args (append args (rpath-arguments libs))))
+    (when %debug?
+      (format (current-error-port)
+              "ld-wrapper: library search path: ~s~%" path)
+      (format (current-error-port)
+              "ld-wrapper: libraries linked: ~s~%" libs)
+      (format (current-error-port)
+              "ld-wrapper: invoking `~a' with ~s~%"
+              %real-ld args)
+      (force-output (current-error-port)))
+    (apply execl %real-ld (basename %real-ld) args)))
+
+;;; ld-wrapper.scm ends here
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index 338b2afd4e..3754a5c427 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015, 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
-;;; Copyright © 2017, 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
@@ -130,6 +130,20 @@ resolution, asynchronous file system operations, and threading primitives.")
     ;; details.  Documentation is CC-BY 4.0 as of 1.12.0; see 'LICENSE-docs'.
     (license (list expat cc-by4.0))))
 
+;; This newer version of LibUV is required by 'node'.  Package it separately
+;; to avoid massive rebuilds.
+(define-public libuv/latest
+  (package/inherit
+   libuv
+   (version "1.34.2")
+   (source (origin
+             (method url-fetch)
+             (uri (string-append "https://dist.libuv.org/dist/v" version
+                                 "/libuv-v" version ".tar.gz"))
+             (sha256
+              (base32
+               "0inzk8qpw78im3fiazrc54qi1gcapbs8dhf0hk3kwpzg0i2kpnb5"))))))
+
 (define-public perl-anyevent
   (package
     (name "perl-anyevent")
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 7afd409e9e..292c9d7317 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -51,6 +51,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages c)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages imagemagick)
@@ -10718,3 +10719,234 @@ approach to templating.")
 
 (define-public ecl-lquery
   (sbcl-package->ecl-package sbcl-lquery))
+
+(define-public sbcl-cl-mysql
+  (let ((commit "ab56c279c1815aec6ca0bfe85164ff7e85cfb6f9")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-mysql")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/hackinghat/cl-mysql.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0dg5ynx2ww94d0qfwrdrm7plkn43h64hs4iiq9mj2s1s4ixnp3lr"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("stefil" ,sbcl-stefil)))
+      (inputs
+       `(("cffi" ,sbcl-cffi)
+         ("mariadb-lib" ,mariadb "lib")))
+      (arguments
+       `(#:tests? #f ; TODO: Tests require a running server
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "system.lisp"
+                 (("libmysqlclient_r" all)
+                  (string-append (assoc-ref inputs "mariadb-lib")
+                                 "/lib/"
+                                 all)))
+               #t)))))
+      (synopsis "Common Lisp wrapper for MySQL")
+      (description
+       "@code{cl-mysql} is a Common Lisp implementation of a MySQL wrapper.")
+      (home-page "http://www.hackinghat.com/index.php/cl-mysql")
+      (license license:expat))))
+
+(define-public cl-mysql
+  (sbcl-package->cl-source-package sbcl-cl-mysql))
+
+(define-public sbcl-simple-date
+  (let ((commit "74469b25bbda990ec9b77e0d0eccdba0cd7e721a")
+        (revision "1"))
+    (package
+      (name "sbcl-simple-date")
+      (version (git-version "1.19" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/marijnh/Postmodern.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0im7ymnyxjhn2w74jfg76k5gpr0gl33n31akx33hl28722ljd0hd"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("fiveam" ,sbcl-fiveam)))
+      (synopsis "Basic date and time objects for Common Lisp")
+      (description
+       "@code{simple-date} is a very basic implementation of date and time
+objects, used to support storing and retrieving time-related SQL types.")
+      (home-page "https://marijnhaverbeke.nl/postmodern/")
+      (license license:zlib))))
+
+(define-public cl-simple-date
+  (sbcl-package->cl-source-package sbcl-simple-date))
+
+(define-public ecl-simple-date
+  (sbcl-package->ecl-package sbcl-simple-date))
+
+(define-public sbcl-cl-postgres
+  (package
+    (inherit sbcl-simple-date)
+    (name "sbcl-cl-postgres")
+    (native-inputs
+     `(("fiveam" ,sbcl-fiveam)
+       ("simple-date" ,sbcl-simple-date)))
+    (inputs
+     `(("md5" ,sbcl-md5)
+       ("split-sequence" ,sbcl-split-sequence)
+       ("usocket" ,sbcl-usocket)))
+    (arguments
+     `(#:tests? #f)) ; TODO: Break simple-date/postgres-glue circular dependency
+    (synopsis "Common Lisp interface for PostgreSQL")
+    (description
+     "@code{cl-postgres} is a low-level library used for interfacing with
+a PostgreSQL server over a socket.")))
+
+(define-public cl-postgres
+  (sbcl-package->cl-source-package sbcl-cl-postgres))
+
+(define-public sbcl-simple-date-postgres-glue
+  (package
+    (inherit sbcl-simple-date)
+    (name "sbcl-simple-date-postgres-glue")
+    (inputs
+     `(("cl-postgres" ,sbcl-cl-postgres)
+       ("simple-date" ,sbcl-simple-date)))
+    (arguments
+     `(#:asd-file "simple-date.asd"
+       #:asd-system-name "simple-date/postgres-glue"))))
+
+(define-public cl-simple-date-postgres-glue
+  (sbcl-package->cl-source-package sbcl-simple-date-postgres-glue))
+
+(define-public sbcl-s-sql
+  (package
+    (inherit sbcl-simple-date)
+    (name "sbcl-s-sql")
+    (inputs
+     `(("alexandria" ,sbcl-alexandria)
+       ("cl-postgres" ,sbcl-cl-postgres)))
+    (arguments
+     `(#:tests? #f)) ; TODO: Break postmodern circular dependency
+    (synopsis "Lispy DSL for SQL")
+    (description
+     "@code{s-sql} is a Common Lisp library that can be used to compile
+s-expressions to strings of SQL code, escaping any Lisp values inside, and
+doing as much as possible of the work at compile time.")))
+
+(define-public cl-s-sql
+  (sbcl-package->cl-source-package sbcl-s-sql))
+
+(define-public sbcl-postmodern
+  (package
+    (inherit sbcl-simple-date)
+    (name "sbcl-postmodern")
+    (native-inputs
+     `(("fiveam" ,sbcl-fiveam)
+       ("simple-date" ,sbcl-simple-date)
+       ("simple-date-postgres-glue" ,sbcl-simple-date-postgres-glue)))
+    (inputs
+     `(("alexandria" ,sbcl-alexandria)
+       ("bordeaux-threads" ,sbcl-bordeaux-threads)
+       ("cl-postgres" ,sbcl-cl-postgres)
+       ("closer-mop" ,sbcl-closer-mop)
+       ("global-vars" ,sbcl-global-vars)
+       ("s-sql" ,sbcl-s-sql)
+       ("split-sequence" ,sbcl-split-sequence)))
+    (arguments
+     ;; TODO: Fix missing dependency errors for simple-date/postgres-glue,
+     ;; cl-postgres/tests and s-sql/tests.
+     `(#:tests? #f))
+    (synopsis "Common Lisp library for interacting with PostgreSQL")
+    (description
+     "@code{postmodern} is a Common Lisp library for interacting with
+PostgreSQL databases.  It provides the following features:
+
+@itemize
+@item Efficient communication with the database server without need for
+foreign libraries.
+@item Support for UTF-8 on Unicode-aware Lisp implementations.
+@item A syntax for mixing SQL and Lisp code.
+@item Convenient support for prepared statements and stored procedures.
+@item A metaclass for simple database-access objects.
+@end itemize\n")))
+
+(define-public cl-postmodern
+  (sbcl-package->cl-source-package sbcl-postmodern))
+
+(define-public sbcl-dbi
+  (package
+    (name "sbcl-dbi")
+    (version "0.9.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/fukamachi/cl-dbi.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0m1fsravfaizamdak84adh3jxc4j91maqnrb4m08bfbmb04cdqhs"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+       ("closer-mop" ,sbcl-closer-mop)
+       ("split-sequence" ,sbcl-split-sequence)))
+    (arguments
+     `(#:tests? #f)) ; TODO: Break circular dependency with dbd-*
+    (synopsis "Database independent interface for Common Lisp")
+    (description
+     "@code{dbi} is a Common Lisp library providing a database independent
+interface for MySQL, PostgreSQL and SQLite.")
+    (home-page "https://github.com/fukamachi/cl-dbi")
+    (license license:llgpl)))
+
+(define-public cl-dbi
+  (sbcl-package->cl-source-package sbcl-dbi))
+
+(define-public sbcl-dbd-mysql
+  (package
+   (inherit sbcl-dbi)
+   (name "sbcl-dbd-mysql")
+   (inputs
+    `(("cl-mysql" ,sbcl-cl-mysql)
+      ("dbi" ,sbcl-dbi)))
+   (synopsis "Database driver for MySQL")))
+
+(define-public cl-dbd-mysql
+  (sbcl-package->cl-source-package sbcl-dbd-mysql))
+
+(define-public sbcl-dbd-postgres
+  (package
+   (inherit sbcl-dbi)
+   (name "sbcl-dbd-postgres")
+   (inputs
+    `(("cl-postgres" ,sbcl-cl-postgres)
+      ("dbi" ,sbcl-dbi)
+      ("trivial-garbage" ,sbcl-trivial-garbage)))
+   (synopsis "Database driver for PostgreSQL")))
+
+(define-public cl-dbd-postgres
+  (sbcl-package->cl-source-package sbcl-dbd-postgres))
+
+(define-public sbcl-dbd-sqlite3
+  (package
+   (inherit sbcl-dbi)
+   (name "sbcl-dbd-sqlite3")
+   (inputs
+    `(("cl-sqlite" ,sbcl-cl-sqlite)
+      ("dbi" ,sbcl-dbi)
+      ("trivial-garbage" ,sbcl-trivial-garbage)))
+   (synopsis "Database driver for SQLite3")))
+
+(define-public cl-dbd-sqlite3
+  (sbcl-package->cl-source-package sbcl-dbd-sqlite3))
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index e819625a46..41217d14f0 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
-;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -48,6 +48,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages mpi)
+  #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -207,64 +208,77 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
        #:build-type "Release"
 
        #:phases (modify-phases %standard-phases
-                  (add-after
-                   'unpack 'set-glibc-file-names
-                   (lambda* (#:key inputs #:allow-other-keys)
-                     (let ((libc (assoc-ref inputs "libc"))
-                           (compiler-rt (assoc-ref inputs "clang-runtime"))
-                           (gcc (assoc-ref inputs "gcc"))
-                           (version
-                            (string->number
-                             ,(version-major (package-version clang-runtime)))))
-                       (cond
-                         ((> version 3)
-                          ;; Link to libclang_rt files from clang-runtime.
-                          (substitute* "lib/Driver/ToolChain.cpp"
-                            (("getDriver\\(\\)\\.ResourceDir")
-                             (string-append "\"" compiler-rt "\"")))
-
-                          ;; Make "LibDir" refer to <glibc>/lib so that it
-                          ;; uses the right dynamic linker file name.
-                          (substitute* "lib/Driver/ToolChains/Linux.cpp"
-                            (("(^[[:blank:]]+LibDir = ).*" _ declaration)
-                             (string-append declaration "\"" libc "/lib\";\n"))
-
-                            ;; Make clang look for libstdc++ in the right
-                            ;; location.
-                            (("LibStdCXXIncludePathCandidates\\[\\] = \\{")
-                             (string-append
-                              "LibStdCXXIncludePathCandidates[] = { \"" gcc "/include/c++\","))
-
-                            ;; Make sure libc's libdir is on the search path, to
-                            ;; allow crt1.o & co. to be found.
-                            (("@GLIBC_LIBDIR@")
-                             (string-append libc "/lib"))))
-                         (else
-                          (substitute* "lib/Driver/Tools.cpp"
-                            ;; Patch the 'getLinuxDynamicLinker' function so that
-                            ;; it uses the right dynamic linker file name.
-                            (("/lib64/ld-linux-x86-64.so.2")
-                             (string-append libc
-                                            ,(glibc-dynamic-linker))))
-
-                          ;; Link to libclang_rt files from clang-runtime.
-                          ;; This substitution needed slight adjustment in 3.8.
-                          (if (< 3.8 (string->number ,(version-major+minor
-                                                       (package-version
-                                                        clang-runtime))))
-                              (substitute* "lib/Driver/Tools.cpp"
-                                (("TC\\.getDriver\\(\\)\\.ResourceDir")
-                                 (string-append "\"" compiler-rt "\"")))
+                  (add-after 'unpack 'add-missing-triplets
+                    (lambda _
+                      ;; Clang iterates through known triplets to search for
+                      ;; GCC's headers, but does not recognize some of the
+                      ;; triplets that are used in Guix.
+                      (substitute* ,@(if (version>=? version "6.0")
+                                         '("lib/Driver/ToolChains/Gnu.cpp")
+                                         '("lib/Driver/ToolChains.cpp"))
+                        (("\"aarch64-linux-gnu\"," all)
+                         (string-append "\"aarch64-unknown-linux-gnu\", "
+                                        all))
+                        (("\"arm-linux-gnueabihf\"," all)
+                         (string-append all
+                                        " \"arm-unknown-linux-gnueabihf\","))
+                        (("\"i686-pc-linux-gnu\"," all)
+                         (string-append "\"i686-unknown-linux-gnu\", "
+                                        all)))
+                      #t))
+                  (add-after 'unpack 'set-glibc-file-names
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((libc (assoc-ref inputs "libc"))
+                            (compiler-rt (assoc-ref inputs "clang-runtime"))
+                            (gcc (assoc-ref inputs "gcc")))
+                        ,@(cond
+                           ((version>=? version "6.0")
+                            `(;; Link to libclang_rt files from clang-runtime.
                               (substitute* "lib/Driver/ToolChain.cpp"
                                 (("getDriver\\(\\)\\.ResourceDir")
-                                 (string-append "\"" compiler-rt "\""))))
-
-                          ;; Make sure libc's libdir is on the search path, to
-                          ;; allow crt1.o & co. to be found.
-                          (substitute* "lib/Driver/ToolChains.cpp"
-                            (("@GLIBC_LIBDIR@")
-                             (string-append libc "/lib")))))
-                       #t)))
+                                 (string-append "\"" compiler-rt "\"")))
+
+                              ;; Make "LibDir" refer to <glibc>/lib so that it
+                              ;; uses the right dynamic linker file name.
+                              (substitute* "lib/Driver/ToolChains/Linux.cpp"
+                                (("(^[[:blank:]]+LibDir = ).*" _ declaration)
+                                 (string-append declaration "\"" libc "/lib\";\n"))
+
+                                ;; Make clang look for libstdc++ in the right
+                                ;; location.
+                                (("LibStdCXXIncludePathCandidates\\[\\] = \\{")
+                                 (string-append
+                                  "LibStdCXXIncludePathCandidates[] = { \"" gcc
+                                  "/include/c++\","))
+
+                                ;; Make sure libc's libdir is on the search path, to
+                                ;; allow crt1.o & co. to be found.
+                                (("@GLIBC_LIBDIR@")
+                                 (string-append libc "/lib")))))
+                           (else
+                            `((substitute* "lib/Driver/Tools.cpp"
+                                ;; Patch the 'getLinuxDynamicLinker' function so that
+                                ;; it uses the right dynamic linker file name.
+                                (("/lib64/ld-linux-x86-64.so.2")
+                                 (string-append libc
+                                                ,(glibc-dynamic-linker))))
+
+                              ;; Link to libclang_rt files from clang-runtime.
+                              ;; This substitution needed slight adjustment in 3.8.
+                              ,@(if (version>=? version "3.8")
+                                    '((substitute* "lib/Driver/Tools.cpp"
+                                        (("TC\\.getDriver\\(\\)\\.ResourceDir")
+                                         (string-append "\"" compiler-rt "\""))))
+                                    '((substitute* "lib/Driver/ToolChain.cpp"
+                                        (("getDriver\\(\\)\\.ResourceDir")
+                                         (string-append "\"" compiler-rt "\"")))))
+
+                              ;; Make sure libc's libdir is on the search path, to
+                              ;; allow crt1.o & co. to be found.
+                              (substitute* "lib/Driver/ToolChains.cpp"
+                                (("@GLIBC_LIBDIR@")
+                                 (string-append libc "/lib"))))))
+                        #t)))
                   (add-after 'install 'install-clean-up-/share/clang
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let* ((out (assoc-ref outputs "out"))
@@ -553,11 +567,33 @@ output), and Binutils.")
          "0xf5q17kkxsrm2gsi93h4pwlv663kji73r2g4asb97klsmb626a4"))))))
 
 (define-public clang-runtime-3.5
-  (clang-runtime-from-llvm
-   llvm-3.5
-   "1hsdnzzdr5kglz6fnv3lcsjs222zjsy14y8ax9dy6zqysanplbal"
-   '("clang-runtime-asan-build-fixes.patch"
-     "clang-3.5-libsanitizer-ustat-fix.patch")))
+  (let ((runtime (clang-runtime-from-llvm
+                  llvm-3.5
+                  "1hsdnzzdr5kglz6fnv3lcsjs222zjsy14y8ax9dy6zqysanplbal"
+                  '("clang-runtime-asan-build-fixes.patch"
+                    "clang-3.5-libsanitizer-ustat-fix.patch"))))
+    (package
+      (inherit runtime)
+      (arguments
+       (substitute-keyword-arguments (package-arguments runtime)
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             ;; glibc no longer includes rpc/xdr.h, so we use the headers from
+             ;; libtirpc.
+             (add-after 'unpack 'find-rpc-includes
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (setenv "CPATH"
+                         (string-append (assoc-ref inputs "libtirpc")
+                                        "/include/tirpc/:"
+                                        (or (getenv "CPATH") "")))
+                 (setenv "CPLUS_INCLUDE_PATH"
+                         (string-append (assoc-ref inputs "libtirpc")
+                                        "/include/tirpc/:"
+                                        (or (getenv "CPLUS_INCLUDE_PATH") "")))
+                 #t))))))
+      (inputs
+       `(("libtirpc" ,libtirpc)
+         ("llvm" ,llvm-3.5))))))
 
 (define-public clang-3.5
   (clang-from-llvm llvm-3.5 clang-runtime-3.5
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 16e69840df..eecc4f1626 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -5138,7 +5138,7 @@ and as an LV2 plugin.")
 (define-public zrythm
   (package
     (name "zrythm")
-    (version "0.7.474")
+    (version "0.7.573")
     (source
       (origin
         (method url-fetch)
@@ -5146,7 +5146,7 @@ and as an LV2 plugin.")
                             version ".tar.xz"))
         (sha256
           (base32
-            "0qq9v8y27zhamcb7nq7pl76874ws8x8cxhp5r685b8binvl9p0az"))))
+            "075gq478xbzz5ql4fsrgfzhgxi7z26k6034lhlkmm0klfcb8j9mg"))))
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
@@ -5164,24 +5164,25 @@ and as an LV2 plugin.")
    (inputs
     `(("alsa-lib" ,alsa-lib)
       ("jack" ,jack-1)
-      ("font-dseg", font-dseg)
-      ("ffmpeg", ffmpeg)
-      ("fftw", fftw)
-      ("fftwf", fftwf)
-      ("gettext", gettext-minimal)
-      ("glibc", glibc)
-      ("gtk+", gtk+)
+      ("font-dseg" ,font-dseg)
+      ("ffmpeg" ,ffmpeg)
+      ("fftw" ,fftw)
+      ("fftwf" ,fftwf)
+      ("gettext" ,gettext-minimal)
+      ("glibc" ,glibc)
+      ("gtk+" ,gtk+)
+      ("libcyaml" ,libcyaml)
       ("libsamplerate" ,libsamplerate)
       ("libsndfile" ,libsndfile)
       ("libyaml" ,libyaml)
-      ("lilv", lilv)
-      ("xdg-utils", xdg-utils)
-      ("rubberband", rubberband)))
+      ("lilv" ,lilv)
+      ("xdg-utils" ,xdg-utils)
+      ("rubberband" ,rubberband)))
    (native-inputs
-     `(("pkg-config", pkg-config)
-       ("help2man", help2man)
+     `(("pkg-config" ,pkg-config)
+       ("help2man" ,help2man)
        ("libaudec" ,libaudec)
-       ("lv2", lv2)
+       ("lv2" ,lv2)
        ("glib" ,glib "bin"))) ;for 'glib-compile-resources'
    (synopsis "Digital audio workstation focusing on usability")
    (description "Zrythm is a digital audio workstation designed to be
diff --git a/gnu/packages/musl.scm b/gnu/packages/musl.scm
index 7e4e27d00d..44c39750d6 100644
--- a/gnu/packages/musl.scm
+++ b/gnu/packages/musl.scm
@@ -28,14 +28,14 @@
 (define-public musl
   (package
     (name "musl")
-    (version "1.1.24")
+    (version "1.2.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.musl-libc.org/releases/"
                                   "musl-" version ".tar.gz"))
               (sha256
                (base32
-                "18r2a00k82hz0mqdvgm7crzc7305l36109c0j9yjmkxj2alcjw0k"))))
+                "1s6lix02k1ijm4nmhzpmwzk5w6xfkhn70nvvk8zjs51r24cpppn6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; musl has no tests
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index ee35d76852..eb8c83d831 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,14 +45,14 @@
 (define-public node
   (package
     (name "node")
-    (version "10.16.0")
+    (version "10.19.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nodejs.org/dist/v" version
                                   "/node-v" version ".tar.xz"))
               (sha256
                (base32
-                "0236jlb1hxhzqjlmmlxipcycrndiq92c8434iyy7zshh3n4pzqqq"))
+                "0sginvcsf7lrlzsnpahj4bj1f673wfvby8kaxgvzlrbb7sy229v2"))
               (modules '((guix build utils)))
               (snippet
                `(begin
@@ -74,8 +74,7 @@
                   #t))))
     (build-system gnu-build-system)
     (arguments
-     ;; TODO: Purge the bundled copies from the source.
-     '(#:configure-flags '("--shared-cares"
+     `(#:configure-flags '("--shared-cares"
                            "--shared-http-parser"
                            "--shared-libuv"
                            "--shared-nghttp2"
@@ -121,6 +120,20 @@
              ;; https://github.com/nodejs/node/issues/31213
              (delete-file "test/parallel/test-net-listen-after-destroying-stdin.js")
 
+             ;; FIXME: These tests fail on armhf-linux:
+             ;; https://github.com/nodejs/node/issues/31970
+             ,@(if (string-prefix? "arm" (%current-system))
+                   '((for-each delete-file
+                               '("test/parallel/test-zlib.js"
+                                 "test/parallel/test-zlib-brotli.js"
+                                 "test/parallel/test-zlib-brotli-flush.js"
+                                 "test/parallel/test-zlib-brotli-from-brotli.js"
+                                 "test/parallel/test-zlib-brotli-from-string.js"
+                                 "test/parallel/test-zlib-convenience-methods.js"
+                                 "test/parallel/test-zlib-random-byte-pipes.js"
+                                 "test/parallel/test-zlib-write-after-flush.js")))
+                   '())
+
              ;; These tests have an expiry date: they depend on the validity of
              ;; TLS certificates that are bundled with the source.  We want this
              ;; package to be reproducible forever, so remove those.
@@ -170,8 +183,8 @@
      `(("c-ares" ,c-ares)
        ("http-parser" ,http-parser)
        ("icu4c" ,icu4c)
-       ("libuv" ,libuv)
-       ("nghttp2" ,nghttp2 "lib")
+       ("libuv" ,libuv/latest)
+       ("nghttp2" ,nghttp2-1.40 "lib")
        ("openssl" ,openssl)
        ("zlib" ,zlib)))
     (synopsis "Evented I/O for V8 JavaScript")
diff --git a/gnu/packages/opencl.scm b/gnu/packages/opencl.scm
index 04b3cb0524..32eb360e04 100644
--- a/gnu/packages/opencl.scm
+++ b/gnu/packages/opencl.scm
@@ -315,7 +315,7 @@ back-end for the LLVM compiler framework.")
     (inputs
      `(("clang" ,clang)
        ("hwloc" ,hwloc-2 "lib")
-       ("llvm" ,llvm-8)
+       ("llvm" ,llvm)
        ("ocl-icd" ,ocl-icd)))
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 4688629172..069767e414 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -133,14 +133,14 @@ data as produced by digital cameras.")
 (define-public libgphoto2
   (package
     (name "libgphoto2")
-    (version "2.5.23")
+    (version "2.5.24")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gphoto/libgphoto/"
                                   version "/libgphoto2-" version ".tar.bz2"))
               (sha256
                (base32
-                "0bc5x2bkqbfi4hbkz8ab5xc0bkks9vvks1vygxhdh3x498v27byq"))))
+                "0cgvsk06c4kcfj16plc27nm7g16r9ci0y4k83sf3iyphd63mfg7x"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index f9981454fb..310fec4edf 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -32,6 +32,7 @@
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
+;;; Copyright © 2020 Evan Straw <evan.straw99@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1600,43 +1601,43 @@ supports url redirection and retries, and also gzip and deflate decoding.")
 
 (define-public awscli
   (package
-   (name "awscli")
-   (version "1.14.41")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (pypi-uri name version))
-     (sha256
-      (base32
-       "0sispclx263lybbk19zp1n9yhg8xxx4jddypzgi24vpjaqnsbwlc"))))
-   (build-system python-build-system)
-   (arguments
-    ;; FIXME: The 'pypi' release does not contain tests.
-    '(#:tests? #f
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'fix-reference-to-groff
-          (lambda _
-            (substitute* "awscli/help.py"
-              (("if not self._exists_on_path\\('groff'\\):") "")
-              (("raise ExecutableNotFoundError\\('groff'\\)") "")
-              (("cmdline = \\['groff'")
-               (string-append "cmdline = ['" (which "groff") "'")))
-            #t)))))
-   (propagated-inputs
-    `(("python-colorama" ,python-colorama)
-      ("python-botocore" ,python-botocore)
-      ("python-s3transfer" ,python-s3transfer)
-      ("python-docutils" ,python-docutils)
-      ("python-pyyaml" ,python-pyyaml)
-      ("python-rsa" ,python-rsa)))
-   (inputs
-    `(("groff" ,groff)))
-   (home-page "https://aws.amazon.com/cli/")
-   (synopsis "Command line client for AWS")
-   (description "AWS CLI provides a unified command line interface to the
+    (name "awscli")
+    (version "1.18.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri name version))
+       (sha256
+        (base32
+         "0p479mfs9r0m82a217pap8156ijwvhv6r3kqa4k267gd05wgvygm"))))
+    (build-system python-build-system)
+    (arguments
+     ;; FIXME: The 'pypi' release does not contain tests.
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-reference-to-groff
+           (lambda _
+             (substitute* "awscli/help.py"
+               (("if not self._exists_on_path\\('groff'\\):") "")
+               (("raise ExecutableNotFoundError\\('groff'\\)") "")
+               (("cmdline = \\['groff'")
+                (string-append "cmdline = ['" (which "groff") "'")))
+             #t)))))
+    (propagated-inputs
+     `(("python-colorama" ,python-colorama)
+       ("python-botocore" ,python-botocore)
+       ("python-s3transfer" ,python-s3transfer)
+       ("python-docutils" ,python-docutils)
+       ("python-pyyaml" ,python-pyyaml)
+       ("python-rsa" ,python-rsa)))
+    (native-inputs
+     `(("groff" ,groff)))
+    (home-page "https://aws.amazon.com/cli/")
+    (synopsis "Command line client for AWS")
+    (description "AWS CLI provides a unified command line interface to the
 Amazon Web Services (AWS) API.")
-   (license license:asl2.0)))
+    (license license:asl2.0)))
 
 (define-public python-wsgiproxy2
   (package
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index 3b7bc36889..d1b67a3943 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -49,14 +49,14 @@
 (define-public xapian
   (package
     (name "xapian")
-    (version "1.4.14")
+    (version "1.4.15")
     ;; 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 "0ja95vn0lkf6qkjhg2blkx306i10hg4fr8wlrhalmly93307lnlp"))))
+               (base32 "1sjhz6vgql801rdgl6vrsjj0vy1mwlkcxjx6nr7h27m031cyjs5i"))))
     (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
-                "0qb17cw8n0g5gcg8dq5b3hs6i16w74rgxcryd0ja9n2h0rlda2an"))))
+                "0364nalvh13c7wzx52mz4gaf8wg1rm17lw75cs8a813rv091ci38"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-python3")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 673f23c20b..86910a63fd 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -858,7 +858,7 @@ then ported to the GNU / Linux environment.")
 (define-public mbedtls-apache
   (package
     (name "mbedtls-apache")
-    (version "2.16.4")
+    (version "2.16.5")
     (source
      (origin
        (method url-fetch)
@@ -868,7 +868,7 @@ then ported to the GNU / Linux environment.")
                            version "-apache.tgz"))
        (sha256
         (base32
-         "1yxj5wahaj87xhdi89zbk78ig77b166h464yrj5gb3lwv8mz6h9l"))))
+         "0kdhwy241xsk4isbadqx6z80m8sf76da5sbmqv8qy11yr37cdd35"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/uml.scm b/gnu/packages/uml.scm
index 41fb66c3b9..b3b4505938 100644
--- a/gnu/packages/uml.scm
+++ b/gnu/packages/uml.scm
@@ -30,14 +30,14 @@
 (define-public plantuml
   (package
     (name "plantuml")
-    (version "1.2019.3")
+    (version "1.2020.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/plantuml/"
                                   version "/plantuml-" version ".tar.gz"))
               (sha256
                (base32
-                "0p2mqav0qfc6kmkhb2n1vjysffnvpsx4yal68nl0yrh5vd3bnmza"))))
+                "1mywv4m6v1y2wpfz9vqriw6cdq1d2md5k2vf244ldbd9s6j45467"))))
     (build-system ant-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
@@ -49,7 +49,7 @@
              (substitute* "build.xml"
                (("1.6") "1.7")
                (("<attribute name=\"Class-Path\"") "<!--")
-               (("j2v8_macosx_x86_64-3.1.7.jar\" />") "-->"))
+               (("ditaa0_9.jar\" />") "-->"))
              #t))
          (add-after 'delete-extra-from-classpath 'patch-usr-bin-dot
            (lambda* (#:key inputs #:allow-other-keys)
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index 579b21524e..a94a677b25 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2019 HiPhish <hiphish@posteo.de>
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019, 2020 Jakub Kądziołka <kuba@kadziolka.net>
+;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -84,12 +85,6 @@
        #:parallel-tests? #f
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'disable-CoW
-           ;; Disable copy-on-write (CoW) in the build directory.  Tests fail on
-           ;; btrfs (and possibly other CoW file systems) for unclear reasons.
-           ;; This needs to be run early as it only affects newly-created files.
-           (lambda _
-             (invoke "chattr" "-R" "+C" ".")))
          (add-after 'configure 'patch-config-files
            (lambda _
              (substitute* "runtime/tools/mve.awk"
@@ -134,10 +129,11 @@
      `(("libtool" ,libtool)
 
        ;; For tests.
-       ("e2fsprogs" ,e2fsprogs)         ; for chattr in disable-CoW above
        ("tzdata" ,tzdata-for-tests)))
     (home-page "https://www.vim.org/")
     (synopsis "Text editor based on vi")
+    ;; The description shares language with the vim-full package. When making
+    ;; changes, check if the other description also needs to be updated.
     (description
      "Vim is a highly configurable text editor built to enable efficient text
 editing.  It is an improved version of the vi editor distributed with most UNIX
@@ -261,7 +257,21 @@ with the editor vim.")))
        ("python-3" ,python)
        ("ruby" ,ruby)
        ("tcl" ,tcl)
-       ,@(package-inputs vim)))))
+       ,@(package-inputs vim)))
+    ;; The description shares language with the vim package. When making
+    ;; changes, check if the other description also needs to be updated.
+    (description "Vim is a highly configurable text editor built to enable efficient text
+editing.  It is an improved version of the vi editor distributed with most UNIX
+systems.
+
+Vim is often called a \"programmer's editor,\" and so useful for programming
+that many consider it an entire IDE.  It's not just for programmers, though.
+Vim is perfect for all kinds of text editing, from composing email to editing
+configuration files.
+
+This package provides a version of Vim with many optional features enabled.
+It includes a graphical interface, @command{gvim}, and support for plugins
+written in the Python 3, Perl, Ruby, Tcl, and Lua programming languages.")))
 
 (define-public vim-neocomplete
   (package
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 28f32df609..ae6072f585 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -19,7 +19,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Bake Timmons <b3timmons@speedymail.org>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Petter <petter@mykolab.ch>
 ;;; Copyright © 2017 Pierre Langlois <pierre.langlois@gmx.com>
@@ -7027,6 +7027,20 @@ compressed JSON header blocks.
                (base32
                 "12yfsjghbaypp4w964d45ih9vs38g6anih80wbsflaxx192idlm2"))))))
 
+;; 'Node' requires this newer version, to be removed on the next rebuild cycle.
+(define-public nghttp2-1.40
+  (package/inherit
+   nghttp2
+   (version "1.40.0")
+   (source (origin
+             (method url-fetch)
+             (uri (string-append "https://github.com/nghttp2/nghttp2/"
+                                 "releases/download/v" version "/"
+                                 "nghttp2-" version ".tar.xz"))
+             (sha256
+              (base32
+               "0wwhwv7cvi1vxpdjwvg0kpa4jzhszclpnwrwfcw728zz53a47z09"))))))
+
 (define-public hpcguix-web
   (let ((commit "f39c90b35e99e4122b0866ec4337020d61c81508")
         (revision "4"))
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 5e40ba1ec2..704839e5f3 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -2108,7 +2108,7 @@ libxml2 and libxslt.")
 (define-public python-xmlschema
   (package
     (name "python-xmlschema")
-    (version "1.1.0")
+    (version "1.1.1")
     (source (origin
               ;; Unit tests are not distributed with the PyPI archive.
               (method git-fetch)
@@ -2118,7 +2118,7 @@ libxml2 and libxslt.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1h8321jb6q3dhlh3608y3f3sbbzfd3jg1psyirxkrm4w5xs3lbvy"))))
+                "0nqhqbvp0kpd1bz11b6gpkc0mkg068mqs56ww4k5ang1cl9d8gd6"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
diff --git a/guix/build/linux-module-build-system.scm b/guix/build/linux-module-build-system.scm
index cd76df2de7..8145d5a724 100644
--- a/guix/build/linux-module-build-system.scm
+++ b/guix/build/linux-module-build-system.scm
@@ -60,15 +60,18 @@
 ;; part.
 (define* (install #:key inputs native-inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
-         (moddir (string-append out "/lib/modules"))
-         (kmod (assoc-ref (or native-inputs inputs) "kmod")))
+         (moddir (string-append out "/lib/modules")))
     ;; Install kernel modules
     (mkdir-p moddir)
     (invoke "make" "-C"
             (string-append (assoc-ref inputs "linux-module-builder")
                            "/lib/modules/build")
             (string-append "M=" (getcwd))
-            (string-append "DEPMOD=" kmod "/bin/depmod")
+            ;; Disable depmod because the Guix system's module directory
+            ;; is an union of potentially multiple packages.  It is not
+            ;; possible to use depmod to usefully calculate a dependency
+            ;; graph while building only one of those packages.
+            "DEPMOD=true"
             (string-append "MODULE_DIR=" moddir)
             (string-append "INSTALL_PATH=" out)
             (string-append "INSTALL_MOD_PATH=" out)
diff --git a/guix/build/node-build-system.scm b/guix/build/node-build-system.scm
index 3c0ac2a12b..7799f03595 100644
--- a/guix/build/node-build-system.scm
+++ b/guix/build/node-build-system.scm
@@ -133,10 +133,7 @@ the @file{bin} directory."
                 (symlink (string-append target "/node_modules/" modulename "/"
 					value)
                          (string-append binaries "/" key))))))
-         binary-configuration))
-      (else
-        (symlink (string-append target "/node_modules/" modulename "/bin")
-		 binaries)))
+         binary-configuration)))
     (when dependencies
       (mkdir-p
         (string-append target "/node_modules/" modulename "/node_modules"))
diff --git a/guix/scripts.scm b/guix/scripts.scm
index 77cbf12350..7ad1d5194c 100644
--- a/guix/scripts.scm
+++ b/guix/scripts.scm
@@ -181,32 +181,69 @@ Show what and how will/would be built."
     (newline (guix-warning-port))))
 
 (define %disk-space-warning
-  ;; The fraction (between 0 and 1) of free disk space below which a warning
-  ;; is emitted.
-  (make-parameter (match (and=> (getenv "GUIX_DISK_SPACE_WARNING")
-                                string->number)
-                    (#f        .05)               ;5%
-                    (threshold (/ threshold 100.)))))
+  ;; Return a pair of absolute threshold (number of bytes) and relative
+  ;; threshold (fraction between 0 and 1) for the free disk space below which
+  ;; a warning is emitted.
+  ;; GUIX_DISK_SPACE_WARNING can contain both thresholds.  A value in [0;100)
+  ;; is a relative threshold, otherwise it's absolute.  The following
+  ;; example values are valid:
+  ;; - 1GiB;10%      ;1 GiB absolute, and 10% relative.
+  ;; - 15G           ;15 GiB absolute, and default relative.
+  ;; - 99%           ;99% relative, and default absolute.
+  ;; - 99            ;Same.
+  ;; - 100           ;100 absolute, and default relative.
+  (let* ((default-absolute-threshold (size->number "5GiB"))
+         (default-relative-threshold 0.05)
+         (percentage->float (lambda (percentage)
+                              (or (and=> (string->number
+                                          (car (string-split percentage #\%)))
+                                         (lambda (n) (/ n 100.0)))
+                                  default-relative-threshold)))
+         (size->number* (lambda (size)
+                          (or (false-if-exception (size->number size))
+                              default-absolute-threshold)))
+         (absolute? (lambda (size)
+                      (not (or (string-suffix? "%" size)
+                               (false-if-exception (< (size->number size) 100)))))))
+    (make-parameter
+     (match (getenv "GUIX_DISK_SPACE_WARNING")
+       (#f (list default-absolute-threshold
+                 default-relative-threshold))
+       (env-string (match (string-split env-string #\;)
+                     ((threshold)
+                      (if (absolute? threshold)
+                          (list (size->number* threshold)
+                                default-relative-threshold)
+                          (list default-absolute-threshold
+                                (percentage->float threshold))))
+                     ((threshold1 threshold2)
+                      (if (absolute? threshold1)
+                          (list (size->number* threshold1)
+                                (percentage->float threshold2))
+                          (list (size->number* threshold2)
+                                (percentage->float threshold1))))))))))
 
 (define* (warn-about-disk-space #:optional profile
                                 #:key
-                                (threshold (%disk-space-warning)))
+                                (thresholds (%disk-space-warning)))
   "Display a hint about 'guix gc' if less than THRESHOLD of /gnu/store is
-available."
+available.
+THRESHOLD is a pair of (ABSOLUTE-THRESHOLD RELATIVE-THRESHOLD)."
   (let* ((stats      (statfs (%store-prefix)))
          (block-size (file-system-block-size stats))
          (available  (* block-size (file-system-blocks-available stats)))
          (total      (* block-size (file-system-block-count stats)))
-         (ratio      (/ available total 1.)))
-    (when (< ratio threshold)
-      (warning (G_ "only ~,1f% of free space available on ~a~%")
-               (* ratio 100) (%store-prefix))
+         (relative-threshold-in-bytes (* total (cadr thresholds)))
+         (absolute-threshold-in-bytes (* 1024 1024 1024 (car thresholds))))
+    (when (< available (min relative-threshold-in-bytes
+                            absolute-threshold-in-bytes))
+      (warning (G_ "only ~,1f GiB of free space available on ~a~%")
+               available (%store-prefix))
       (display-hint (format #f (G_ "Consider deleting old profile
 generations and collecting garbage, along these lines:
 
 @example
 guix gc --delete-generations=1m
-@end example\n")
-                            profile)))))
+@end example\n"))))))
 
 ;;; scripts.scm ends here
diff --git a/nix/libstore/gc.cc b/nix/libstore/gc.cc
index 77d7fa2dc7..8bc4e01eb0 100644
--- a/nix/libstore/gc.cc
+++ b/nix/libstore/gc.cc
@@ -581,15 +581,27 @@ void LocalStore::removeUnusedLinks(const GCState & state)
 #ifdef HAVE_STATX
 # define st_size stx_size
 # define st_nlink stx_nlink
+	static int statx_flags = AT_SYMLINK_NOFOLLOW | AT_STATX_DONT_SYNC;
 	struct statx st;
-	if (statx(AT_FDCWD, path.c_str(),
-		  AT_SYMLINK_NOFOLLOW | AT_STATX_DONT_SYNC,
-		  STATX_SIZE | STATX_NLINK, &st) == -1)
+
+	if (statx(AT_FDCWD, path.c_str(), statx_flags,
+		  STATX_SIZE | STATX_NLINK, &st) == -1) {
+	    if (errno == EINVAL) {
+		/* Old 3.10 kernels (CentOS 7) don't support
+		   AT_STATX_DONT_SYNC, so try again without it.  */
+		statx_flags &= ~AT_STATX_DONT_SYNC;
+		if (statx(AT_FDCWD, path.c_str(), statx_flags,
+			  STATX_SIZE | STATX_NLINK, &st) == -1)
+		    throw SysError(format("statting `%1%'") % path);
+	    } else {
+		throw SysError(format("statting `%1%'") % path);
+	    }
+	}
 #else
         struct stat st;
         if (lstat(path.c_str(), &st) == -1)
-#endif
             throw SysError(format("statting `%1%'") % path);
+#endif
 
         if (st.st_nlink != 1) {
             actualSize += st.st_size;