summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2019-08-22 15:53:27 -0400
committerMark H Weaver <mhw@netris.org>2019-08-22 15:53:27 -0400
commit893c2df00daa4e6dd6a7ff3813d7df5329877f9e (patch)
treeacd0db459464acae47083b66d5ce12cc656e2f10
parent04b9b7bb05aff4c41f46cd79aa7bc953ace16e86 (diff)
parent0ccc9a0f5bb89b239d56157ea66f8420fcec5ba6 (diff)
downloadguix-893c2df00daa4e6dd6a7ff3813d7df5329877f9e.tar.gz
Merge branch 'master' into core-updates
-rw-r--r--doc/guix.texi18
-rw-r--r--gnu/build/cross-toolchain.scm15
-rw-r--r--gnu/build/linux-boot.scm9
-rw-r--r--gnu/build/linux-modules.scm147
-rw-r--r--gnu/ci.scm3
-rw-r--r--gnu/local.mk6
-rw-r--r--gnu/machine.scm27
-rw-r--r--gnu/machine/ssh.scm150
-rw-r--r--gnu/packages/admin.scm26
-rw-r--r--gnu/packages/astronomy.scm6
-rw-r--r--gnu/packages/audio.scm10
-rw-r--r--gnu/packages/bioconductor.scm79
-rw-r--r--gnu/packages/bioinformatics.scm12
-rw-r--r--gnu/packages/bootstrap.scm2
-rw-r--r--gnu/packages/ccache.scm15
-rw-r--r--gnu/packages/ci.scm8
-rw-r--r--gnu/packages/compression.scm46
-rw-r--r--gnu/packages/cran.scm168
-rw-r--r--gnu/packages/cross-base.scm6
-rw-r--r--gnu/packages/databases.scm4
-rw-r--r--gnu/packages/dns.scm8
-rw-r--r--gnu/packages/elm.scm81
-rw-r--r--gnu/packages/emacs-xyz.scm518
-rw-r--r--gnu/packages/emulators.scm4
-rw-r--r--gnu/packages/finance.scm42
-rw-r--r--gnu/packages/fonts.scm5
-rw-r--r--gnu/packages/freeipmi.scm4
-rw-r--r--gnu/packages/games.scm16
-rw-r--r--gnu/packages/genealogy.scm4
-rw-r--r--gnu/packages/gnome.scm45
-rw-r--r--gnu/packages/graphics.scm47
-rw-r--r--gnu/packages/guile-xyz.scm2
-rw-r--r--gnu/packages/haskell.scm6
-rw-r--r--gnu/packages/image-processing.scm328
-rw-r--r--gnu/packages/image-viewers.scm11
-rw-r--r--gnu/packages/libreoffice.scm4
-rw-r--r--gnu/packages/linux.scm55
-rw-r--r--gnu/packages/lisp.scm6
-rw-r--r--gnu/packages/lxqt.scm33
-rw-r--r--gnu/packages/mail.scm13
-rw-r--r--gnu/packages/man.scm12
-rw-r--r--gnu/packages/maths.scm4
-rw-r--r--gnu/packages/mingw.scm111
-rw-r--r--gnu/packages/mpd.scm4
-rw-r--r--gnu/packages/music.scm10
-rw-r--r--gnu/packages/networking.scm92
-rw-r--r--gnu/packages/package-management.scm10
-rw-r--r--gnu/packages/patches/elm-compiler-disable-reactor.patch71
-rw-r--r--gnu/packages/patches/elm-compiler-fix-map-key.patch38
-rw-r--r--gnu/packages/patches/elm-compiler-relax-glsl-bound.patch19
-rw-r--r--gnu/packages/python-web.scm29
-rw-r--r--gnu/packages/python-xyz.scm31
-rw-r--r--gnu/packages/ruby.scm70
-rw-r--r--gnu/packages/sync.scm14
-rw-r--r--gnu/packages/tmux.scm6
-rw-r--r--gnu/packages/tor.scm25
-rw-r--r--gnu/packages/version-control.scm6
-rw-r--r--gnu/packages/video.scm44
-rw-r--r--gnu/packages/web.scm14
-rw-r--r--gnu/packages/wine.scm7
-rw-r--r--gnu/packages/xdisorg.scm8
-rw-r--r--gnu/packages/xorg.scm10
-rw-r--r--gnu/services.scm56
-rw-r--r--gnu/services/base.scm9
-rw-r--r--gnu/system/linux-initrd.scm5
-rw-r--r--guix/build-system/r.scm20
-rw-r--r--guix/channels.scm28
-rw-r--r--guix/derivations.scm6
-rw-r--r--guix/import/cran.scm46
-rw-r--r--guix/import/gnome.scm35
-rw-r--r--guix/remote.scm72
-rw-r--r--guix/scripts/deploy.scm25
-rw-r--r--guix/scripts/describe.scm27
-rw-r--r--guix/scripts/refresh.scm45
-rw-r--r--guix/ssh.scm56
-rw-r--r--guix/upstream.scm9
-rw-r--r--m4/guix.m45
-rw-r--r--tests/derivations.scm32
-rw-r--r--tests/guix-environment-container.sh7
-rw-r--r--tests/guix-environment.sh8
-rw-r--r--tests/lint.scm12
81 files changed, 2657 insertions, 470 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 42acc3c7f3..aac0c055db 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -25514,6 +25514,7 @@ evaluates to.  As an example, @var{file} might contain a definition like this:
        (environment managed-host-environment-type)
        (configuration (machine-ssh-configuration
                        (host-name "localhost")
+                       (user "alice")
                        (identity "./id_rsa")
                        (port 2222)))))
 @end example
@@ -25546,6 +25547,15 @@ accepts store items it receives from the coordinator:
 # guix archive --authorize < coordinator-public-key.txt
 @end example
 
+@code{user}, in this example, specifies the name of the user account to log in
+as to perform the deployment.  Its default value is @code{root}, but root
+login over SSH may be forbidden in some cases.  To work around this,
+@command{guix deploy} can log in as an unprivileged user and employ
+@code{sudo} to escalate privileges.  This will only work if @code{sudo} is
+currently installed on the remote and can be invoked non-interactively as
+@code{user}.  That is: the line in @code{sudoers} granting @code{user} the
+ability to use @code{sudo} must contain the @code{NOPASSWD} tag.
+
 @deftp {Data Type} machine
 This is the data type representing a single machine in a heterogeneous Guix
 deployment.
@@ -25573,6 +25583,14 @@ with an @code{environment} of @code{managed-host-environment-type}.
 
 @table @asis
 @item @code{host-name}
+@item @code{build-locally?} (default: @code{#t})
+If false, system derivations will be built on the machine being deployed to.
+@item @code{system}
+The Nix system type describing the architecture of the machine being deployed
+to. This should look something like ``x86_64-linux''.
+@item @code{authorize?} (default: @code{#t})
+If true, the coordinator's signing key will be added to the remote's ACL
+keyring.
 @item @code{port} (default: @code{22})
 @item @code{user} (default: @code{"root"})
 @item @code{identity} (default: @code{#f})
diff --git a/gnu/build/cross-toolchain.scm b/gnu/build/cross-toolchain.scm
index 53d6d39187..1704157750 100644
--- a/gnu/build/cross-toolchain.scm
+++ b/gnu/build/cross-toolchain.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019 Carl Dong <contact@carldong.me>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -93,7 +94,7 @@ C_INCLUDE_PATH et al."
      ;; We're building the sans-libc cross-compiler, so nothing to do.
      #t)))
 
-(define* (set-cross-path/mingw #:key inputs #:allow-other-keys)
+(define* (set-cross-path/mingw #:key inputs target #:allow-other-keys)
   "Add the cross MinGW headers to CROSS_C_*_INCLUDE_PATH, and remove them from
 C_*INCLUDE_PATH."
   (let ((libc (assoc-ref inputs "libc"))
@@ -110,7 +111,7 @@ C_*INCLUDE_PATH."
 
     (if libc
         (let ((cpath (string-append libc "/include"
-                                    ":" libc "/i686-w64-mingw32/include")))
+                                    ":" libc "/" target "/include")))
           (for-each (cut setenv <> cpath)
                     %gcc-cross-include-paths))
 
@@ -140,7 +141,7 @@ C_*INCLUDE_PATH."
     (when libc
       (setenv "CROSS_LIBRARY_PATH"
               (string-append libc "/lib"
-                             ":" libc "/i686-w64-mingw32/lib")))
+                             ":" libc "/" target "/lib")))
 
     (setenv "CPP" (string-append gcc "/bin/cpp"))
     (for-each (lambda (var)
@@ -166,8 +167,12 @@ C_*INCLUDE_PATH."
 a target triplet."
   (modify-phases phases
     (add-before 'configure 'set-cross-path
-      (if (string-contains target "mingw")
-          set-cross-path/mingw
+      ;; This mingw32 target checking logic should match that of target-mingw?
+      ;; in (guix utils), but (guix utils) is too large too copy over to the
+      ;; build side entirely and for now we have no way to select variables to
+      ;; copy over. See (gnu packages cross-base) for more details.
+      (if (string-suffix? "-mingw32" target)
+          (cut set-cross-path/mingw #:target target <...>)
           set-cross-path))
     (add-after 'install 'make-cross-binutils-visible
       (cut make-cross-binutils-visible #:target target <...>))
diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm
index 03f2ea245c..f273957d78 100644
--- a/gnu/build/linux-boot.scm
+++ b/gnu/build/linux-boot.scm
@@ -471,10 +471,6 @@ upon error."
              mounts)
         "ext4"))
 
-  (define (lookup-module name)
-    (string-append linux-module-directory "/"
-                   (ensure-dot-ko name)))
-
   (display "Welcome, this is GNU's early boot Guile.\n")
   (display "Use '--repl' for an initrd REPL.\n\n")
 
@@ -489,9 +485,8 @@ upon error."
          (start-repl))
 
        (display "loading kernel modules...\n")
-       (for-each (cut load-linux-module* <>
-                      #:lookup-module lookup-module)
-                 (map lookup-module linux-modules))
+       (load-linux-modules-from-directory linux-modules
+                                          linux-module-directory)
 
        (when keymap-file
          (let ((status (system* "loadkeys" keymap-file)))
diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index c66ef97012..a149eff329 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,8 +31,10 @@
   #:use-module (ice-9 vlist)
   #:use-module (ice-9 match)
   #:use-module (ice-9 rdelim)
+  #:autoload   (ice-9 pretty-print) (pretty-print)
   #:export (dot-ko
             ensure-dot-ko
+            module-formal-name
             module-aliases
             module-dependencies
             module-soft-dependencies
@@ -42,13 +45,18 @@
             modules-loaded
             module-loaded?
             load-linux-module*
+            load-linux-modules-from-directory
 
             current-module-debugging-port
 
             device-module-aliases
             known-module-aliases
             matching-modules
-            missing-modules))
+            missing-modules
+
+            write-module-name-database
+            write-module-alias-database
+            write-module-device-database))
 
 ;;; Commentary:
 ;;;
@@ -95,6 +103,14 @@ key/value pairs.."
 (define %not-comma
   (char-set-complement (char-set #\,)))
 
+(define (module-formal-name file)
+  "Return the module name of FILE as it appears in its info section.  Usually
+the module name is the same as the base name of FILE, modulo hyphens and minus
+the \".ko\" extension."
+  (match (assq 'name (modinfo-section-contents file))
+    (('name . name) name)
+    (#f #f)))
+
 (define (module-dependencies file)
   "Return the list of modules that FILE depends on.  The returned list
 contains module names, not actual file names."
@@ -310,6 +326,18 @@ appears in BLACK-LIST are not loaded."
              (or (and recursive? (= EEXIST (system-error-errno args)))
                  (apply throw args)))))))
 
+(define (load-linux-modules-from-directory modules directory)
+  "Load MODULES and their dependencies from DIRECTORY, a directory containing
+the '.ko' files.  The '.ko' suffix is automatically added to MODULES if
+needed."
+  (define module-name->file-name
+    (module-name-lookup directory))
+
+  (for-each (lambda (module)
+              (load-linux-module* (module-name->file-name module)
+                                  #:lookup-module module-name->file-name))
+            modules))
+
 
 ;;;
 ;;; Device modules.
@@ -486,4 +514,121 @@ are required to access DEVICE."
         (remove (cut member <> provided) modules))
       '()))
 
+
+;;;
+;;; Module databases.
+;;;
+
+(define (module-name->file-name/guess directory name)
+  "Guess the file name corresponding to NAME, a module name.  That doesn't
+always work because sometimes underscores in NAME map to hyphens (e.g.,
+\"input-leds.ko\"), sometimes not (e.g., \"mac_hid.ko\")."
+  (string-append directory "/" (ensure-dot-ko name)))
+
+(define (module-name-lookup directory)
+  "Return a one argument procedure that takes a module name (e.g.,
+\"input_leds\") and returns its absolute file name (e.g.,
+\"/.../input-leds.ko\")."
+  (catch 'system-error
+    (lambda ()
+      (define mapping
+        (call-with-input-file (string-append directory "/modules.name")
+          read))
+
+      (lambda (name)
+        (or (assoc-ref mapping name)
+            (module-name->file-name/guess directory name))))
+    (lambda args
+      (if (= ENOENT (system-error-errno args))
+          (cut module-name->file-name/guess directory <>)
+          (apply throw args)))))
+
+(define (write-module-name-database directory)
+  "Write a database that maps \"module names\" as they appear in the relevant
+ELF section of '.ko' files, to actual file names.  This format is
+Guix-specific.  It aims to deal with inconsistent naming, in particular
+hyphens vs. underscores."
+  (define mapping
+    (map (lambda (file)
+           (match (module-formal-name file)
+             (#f   (cons (basename file ".ko") file))
+             (name (cons name file))))
+         (find-files directory "\\.ko$")))
+
+  (call-with-output-file (string-append directory "/modules.name")
+    (lambda (port)
+      (display ";; Module name to file name mapping.
+;;
+;; This format is Guix-specific; it is not supported by upstream Linux tools.
+\n"
+               port)
+      (pretty-print mapping port))))
+
+(define (write-module-alias-database directory)
+  "Traverse the '.ko' files in DIRECTORY and create the corresponding
+'modules.alias' file."
+  (define aliases
+    (map (lambda (file)
+           (cons (file-name->module-name file) (module-aliases file)))
+         (find-files directory "\\.ko$")))
+
+  (call-with-output-file (string-append directory "/modules.alias")
+    (lambda (port)
+      (display "# Aliases extracted from modules themselves.\n" port)
+      (for-each (match-lambda
+                  ((module . aliases)
+                   (for-each (lambda (alias)
+                               (format port "alias ~a ~a\n" alias module))
+                             aliases)))
+                aliases))))
+
+(define (aliases->device-tuple aliases)
+  "Traverse ALIASES, a list of module aliases, and search for
+\"char-major-M-N\", \"block-major-M-N\", or \"devname:\" aliases.  When they
+are found, return a tuple (DEVNAME TYPE MAJOR MINOR), otherwise return #f."
+  (define (char/block-major? alias)
+    (or (string-prefix? "char-major-" alias)
+        (string-prefix? "block-major-" alias)))
+
+  (define (char/block-major->tuple alias)
+    (match (string-tokenize alias %not-dash)
+      ((type "major" (= string->number major) (= string->number minor))
+       (list (match type
+               ("char" "c")
+               ("block" "b"))
+             major minor))))
+
+  (let* ((devname     (any (lambda (alias)
+                             (and (string-prefix? "devname:" alias)
+                                  (string-drop alias 8)))
+                           aliases))
+         (major/minor (match (find char/block-major? aliases)
+                        (#f #f)
+                        (str (char/block-major->tuple str)))))
+    (and devname major/minor
+         (cons devname major/minor))))
+
+(define %not-dash
+  (char-set-complement (char-set #\-)))
+
+(define (write-module-device-database directory)
+  "Traverse the '.ko' files in DIRECTORY and create the corresponding
+'modules.devname' file.  This file contains information about modules that can
+be loaded on-demand, such as file system modules."
+  (define aliases
+    (filter-map (lambda (file)
+                  (match (aliases->device-tuple (module-aliases file))
+                    (#f #f)
+                    (tuple (cons (file-name->module-name file) tuple))))
+                (find-files directory "\\.ko$")))
+
+  (call-with-output-file (string-append directory "/modules.devname")
+    (lambda (port)
+      (display "# Device nodes to trigger on-demand module loading.\n" port)
+      (for-each (match-lambda
+                  ((module devname type major minor)
+                   (format port "~a ~a ~a~a:~a~%"
+                           module devname type major minor)))
+                aliases))))
+
 ;;; linux-modules.scm ends here
diff --git a/gnu/ci.scm b/gnu/ci.scm
index 4885870e16..aeebd4f14b 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -130,7 +130,8 @@ SYSTEM."
     "aarch64-linux-gnu"
     "powerpc-linux-gnu"
     "i586-pc-gnu"                                 ;aka. GNU/Hurd
-    "i686-w64-mingw32"))
+    "i686-w64-mingw32"
+    "x86_64-w64-mingw32"))
 
 (define %guixsd-supported-systems
   '("x86_64-linux" "i686-linux" "armhf-linux"))
diff --git a/gnu/local.mk b/gnu/local.mk
index 0002f49409..44a553d871 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -161,6 +161,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/electronics.scm			\
   %D%/packages/elf.scm				\
   %D%/packages/elixir.scm			\
+  %D%/packages/elm.scm				\
   %D%/packages/embedded.scm			\
   %D%/packages/emacs.scm			\
   %D%/packages/emacs-xyz.scm			\
@@ -769,9 +770,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch	\
   %D%/packages/patches/dstat-skip-devices-without-io.patch	\
   %D%/packages/patches/dvd+rw-tools-add-include.patch 		\
+  %D%/packages/patches/einstein-build.patch			\
   %D%/packages/patches/elfutils-tests-ptrace.patch		\
   %D%/packages/patches/elixir-path-length.patch			\
-  %D%/packages/patches/einstein-build.patch			\
+  %D%/packages/patches/elm-compiler-disable-reactor.patch	\
+  %D%/packages/patches/elm-compiler-fix-map-key.patch		\
+  %D%/packages/patches/elm-compiler-relax-glsl-bound.patch	\
   %D%/packages/patches/emacs-dired-toggle-sudo-emacs-26.patch   \
   %D%/packages/patches/emacs-exec-path.patch			\
   %D%/packages/patches/emacs-fix-scheme-indent-function.patch	\
diff --git a/gnu/machine.scm b/gnu/machine.scm
index 30ae97f6ec..05b03b21d4 100644
--- a/gnu/machine.scm
+++ b/gnu/machine.scm
@@ -24,6 +24,7 @@
   #:use-module (guix records)
   #:use-module (guix store)
   #:use-module ((guix utils) #:select (source-properties->location))
+  #:use-module (srfi srfi-35)
   #:export (environment-type
             environment-type?
             environment-type-name
@@ -40,7 +41,13 @@
             machine-display-name
 
             deploy-machine
-            machine-remote-eval))
+            roll-back-machine
+            machine-remote-eval
+
+            &deploy-error
+            deploy-error?
+            deploy-error-should-roll-back
+            deploy-error-captured-args))
 
 ;;; Commentary:
 ;;;
@@ -66,6 +73,7 @@
   ;; of the form '(machine-remote-eval machine exp)'.
   (machine-remote-eval environment-type-machine-remote-eval) ; procedure
   (deploy-machine      environment-type-deploy-machine)      ; procedure
+  (roll-back-machine   environment-type-roll-back-machine)   ; procedure
 
   ;; Metadata.
   (name        environment-type-name)       ; symbol
@@ -105,3 +113,20 @@ are built and deployed to MACHINE beforehand."
 MACHINE, activating it on MACHINE and switching MACHINE to the new generation."
   (let ((environment (machine-environment machine)))
     ((environment-type-deploy-machine environment) machine)))
+
+(define (roll-back-machine machine)
+  "Monadic procedure rolling back to the previous system generation on
+MACHINE. Return the number of the generation that was current before switching
+and the new generation number."
+  (let ((environment (machine-environment machine)))
+    ((environment-type-roll-back-machine environment) machine)))
+
+
+;;;
+;;; Error types.
+;;;
+
+(define-condition-type &deploy-error &error
+  deploy-error?
+  (should-roll-back deploy-error-should-roll-back)
+  (captured-args deploy-error-captured-args))
diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm
index ba3e33c922..6e3ed0e092 100644
--- a/gnu/machine/ssh.scm
+++ b/gnu/machine/ssh.scm
@@ -17,6 +17,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu machine ssh)
+  #:use-module (gnu bootloader)
   #:use-module (gnu machine)
   #:autoload   (gnu packages gnupg) (guile-gcrypt)
   #:use-module (gnu system)
@@ -27,15 +28,20 @@
   #:use-module (guix i18n)
   #:use-module (guix modules)
   #:use-module (guix monads)
+  #:use-module (guix pki)
   #:use-module (guix records)
   #:use-module (guix remote)
   #:use-module (guix scripts system reconfigure)
   #:use-module (guix ssh)
   #:use-module (guix store)
   #:use-module (guix utils)
+  #:use-module (gcrypt pk-crypto)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 textual-ports)
+  #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
   #:export (managed-host-environment-type
 
@@ -45,6 +51,7 @@
 
             machine-ssh-configuration-host-name
             machine-ssh-configuration-build-locally?
+            machine-ssh-configuration-authorize?
             machine-ssh-configuration-port
             machine-ssh-configuration-user
             machine-ssh-configuration-session))
@@ -67,16 +74,19 @@
   make-machine-ssh-configuration
   machine-ssh-configuration?
   this-machine-ssh-configuration
-  (host-name      machine-ssh-configuration-host-name) ; string
-  (build-locally? machine-ssh-configuration-build-locally?
+  (host-name      machine-ssh-configuration-host-name)     ; string
+  (system         machine-ssh-configuration-system)        ; string
+  (build-locally? machine-ssh-configuration-build-locally? ; boolean
                   (default #t))
-  (port           machine-ssh-configuration-port       ; integer
+  (authorize?     machine-ssh-configuration-authorize?     ; boolean
+                  (default #t))
+  (port           machine-ssh-configuration-port           ; integer
                   (default 22))
-  (user           machine-ssh-configuration-user       ; string
+  (user           machine-ssh-configuration-user           ; string
                   (default "root"))
-  (identity       machine-ssh-configuration-identity   ; path to a private key
+  (identity       machine-ssh-configuration-identity       ; path to a private key
                   (default #f))
-  (session        machine-ssh-configuration-session    ; session
+  (session        machine-ssh-configuration-session        ; session
                   (default #f)))
 
 (define (machine-ssh-session machine)
@@ -99,14 +109,26 @@ one from the configuration's parameters if one was not provided."
 ;;; Remote evaluation.
 ;;;
 
+(define (machine-become-command machine)
+  "Return as a list of strings the program and arguments necessary to run a
+shell command with escalated privileges for MACHINE's configuration."
+  (if (string= "root" (machine-ssh-configuration-user
+                       (machine-configuration machine)))
+      '()
+      '("/run/setuid-programs/sudo" "-n" "--")))
+
 (define (managed-host-remote-eval machine exp)
   "Internal implementation of 'machine-remote-eval' for MACHINE instances with
 an environment type of 'managed-host."
   (maybe-raise-unsupported-configuration-error machine)
-  (remote-eval exp (machine-ssh-session machine)
-               #:build-locally?
-               (machine-ssh-configuration-build-locally?
-                (machine-configuration machine))))
+  (let ((config (machine-configuration machine)))
+    (remote-eval exp (machine-ssh-session machine)
+                 #:build-locally?
+                 (machine-ssh-configuration-build-locally? config)
+                 #:system
+                 (machine-ssh-configuration-system config)
+                 #:become-command
+                 (machine-become-command machine))))
 
 
 ;;;
@@ -144,7 +166,8 @@ MACHINE's 'system' declaration do not exist on the machine."
 
   (define (check-labeled-file-system fs)
     (define remote-exp
-      (with-imported-modules '((gnu build file-systems))
+      (with-imported-modules (source-module-closure
+                              '((gnu build file-systems)))
         #~(begin
             (use-modules (gnu build file-systems))
             (find-partition-by-label #$(file-system-label->string
@@ -221,7 +244,7 @@ MACHINE's 'system' declaration do not exist on the machine."
                                             #$(uuid->string device))))
                         ((file-system-label? device)
                          #~(find-partition-by-label
-                            (file-system-label->string #$device)))))
+                            #$(file-system-label->string device)))))
 
               (missing-modules dev '#$(operating-system-initrd-modules
                                        (machine-operating-system machine)))))))
@@ -240,10 +263,29 @@ MACHINE's 'system' declaration do not exist on the machine."
               device)
     (return #t)))
 
+(define (machine-check-building-for-appropriate-system machine)
+  "Raise a '&message' error condition if MACHINE is configured to be built
+locally and the 'system' field does not match the '%current-system' reported
+by MACHINE."
+  (let ((config (machine-configuration machine))
+        (system (remote-system (machine-ssh-session machine))))
+    (when (and (machine-ssh-configuration-build-locally? config)
+               (not (string= system (machine-ssh-configuration-system config))))
+      (raise (condition
+              (&message
+               (message (format #f (G_ "incorrect target system \
+('~a' was given, while the system reports that it is '~a')~%")
+                                (machine-ssh-configuration-system config)
+                                system)))))))
+  (with-monad %store-monad (return #t)))
+
 (define (check-deployment-sanity machine)
   "Raise a '&message' error condition if it is clear that deploying MACHINE's
 'system' declaration would fail."
+  ;; Order is important here -- an incorrect value for 'system' will cause
+  ;; invocations of 'remote-eval' to fail.
   (mbegin %store-monad
+    (machine-check-building-for-appropriate-system machine)
     (machine-check-file-system-availability machine)
     (machine-check-initrd-modules machine)))
 
@@ -310,10 +352,36 @@ of MACHINE's system profile, ordered from most recent to oldest."
                            (boot-parameters-kernel-arguments params))))))))
           generations))))
 
+(define-syntax-rule (with-roll-back should-roll-back? mbody ...)
+  "Catch exceptions that arise when binding MBODY, a monadic expression in
+%STORE-MONAD, and collect their arguments in a &deploy-error condition, with
+the 'should-roll-back' field set to SHOULD-ROLL-BACK?"
+  (catch #t
+    (lambda ()
+      mbody ...)
+    (lambda args
+      (raise (condition (&deploy-error
+                         (should-roll-back should-roll-back?)
+                         (captured-args args)))))))
+
 (define (deploy-managed-host machine)
   "Internal implementation of 'deploy-machine' for MACHINE instances with an
 environment type of 'managed-host."
   (maybe-raise-unsupported-configuration-error machine)
+  (when (machine-ssh-configuration-authorize?
+         (machine-configuration machine))
+    (unless (file-exists? %public-key-file)
+      (raise (condition
+              (&message
+               (message (format #f (G_ "no signing key '~a'. \
+have you run 'guix archive --generate-key?'")
+                                %public-key-file))))))
+    (remote-authorize-signing-key (call-with-input-file %public-key-file
+                                    (lambda (port)
+                                      (string->canonical-sexp
+                                       (get-string-all port))))
+                                  (machine-ssh-session machine)
+                                  (machine-become-command machine)))
   (mlet %store-monad ((_ (check-deployment-sanity machine))
                       (boot-parameters (machine-boot-parameters machine)))
     (let* ((os (machine-operating-system machine))
@@ -322,9 +390,60 @@ environment type of 'managed-host."
            (bootloader-configuration (operating-system-bootloader os))
            (bootcfg (operating-system-bootcfg os menu-entries)))
       (mbegin %store-monad
-        (switch-to-system eval os)
-        (upgrade-shepherd-services eval os)
-        (install-bootloader eval bootloader-configuration bootcfg)))))
+        (with-roll-back #f
+          (switch-to-system eval os))
+        (with-roll-back #t
+          (mbegin %store-monad
+            (upgrade-shepherd-services eval os)
+            (install-bootloader eval bootloader-configuration bootcfg)))))))
+
+
+;;;
+;;; Roll-back.
+;;;
+
+(define (roll-back-managed-host machine)
+  "Internal implementation of 'roll-back-machine' for MACHINE instances with
+an environment type of 'managed-host."
+  (define remote-exp
+    (with-extensions (list guile-gcrypt)
+      (with-imported-modules (source-module-closure '((guix config)
+                                                      (guix profiles)))
+        #~(begin
+            (use-modules (guix config)
+                         (guix profiles))
+
+            (define %system-profile
+              (string-append %state-directory "/profiles/system"))
+
+            (define target-generation
+              (relative-generation %system-profile -1))
+
+            (if target-generation
+                (switch-to-generation %system-profile target-generation)
+                'error)))))
+
+  (define roll-back-failure
+    (condition (&message (message (G_ "could not roll-back machine")))))
+
+  (mlet* %store-monad ((boot-parameters (machine-boot-parameters machine))
+                       (_ -> (if (< (length boot-parameters) 2)
+                                 (raise roll-back-failure)))
+                       (entries -> (map boot-parameters->menu-entry
+                                        (list (second boot-parameters))))
+                       (old-entries -> (map boot-parameters->menu-entry
+                                            (drop boot-parameters 2)))
+                       (bootloader -> (operating-system-bootloader
+                                       (machine-operating-system machine)))
+                       (bootcfg (lower-object
+                                 ((bootloader-configuration-file-generator
+                                   (bootloader-configuration-bootloader
+                                    bootloader))
+                                  bootloader entries
+                                  #:old-entries old-entries)))
+                       (remote-result (machine-remote-eval machine remote-exp)))
+    (when (eqv? 'error remote-result)
+      (raise roll-back-failure))))
 
 
 ;;;
@@ -335,6 +454,7 @@ environment type of 'managed-host."
   (environment-type
    (machine-remote-eval managed-host-remote-eval)
    (deploy-machine      deploy-managed-host)
+   (roll-back-machine   roll-back-managed-host)
    (name                'managed-host-environment-type)
    (description         "Provisioning for machines that are accessible over SSH
 and have a known host-name. This entails little more than maintaining an SSH
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index bd3c14033e..eb298dca3b 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -684,7 +684,7 @@ connection alive.")
 (define-public isc-dhcp
   (let* ((bind-major-version "9")
          (bind-minor-version "11")
-         (bind-patch-version "9")
+         (bind-patch-version "10")
          (bind-release-type "")         ; for patch release, use "-P"
          (bind-release-version "")      ; for patch release, e.g. "6"
          (bind-version (string-append bind-major-version
@@ -825,7 +825,7 @@ connection alive.")
                                         "/bind-" bind-version ".tar.gz"))
                     (sha256
                      (base32
-                      "03n57as73ygw6g3lqsmq2idkykajpbskzgixixdvi5a76m4g0fwn"))))
+                      "1hvhdaar9swh5087kzkbmav1nbn19rxh0m60x0d7gri0v8689fxj"))))
 
                 ;; When cross-compiling, we need the cross Coreutils and sed.
                 ;; Otherwise just use those from %FINAL-INPUTS.
@@ -1240,9 +1240,10 @@ commands and their arguments.")
       CONFIG_READLINE=y\n" port)
                (close-port port))
              #t))
-         (add-after 'install 'install-man-pages
+         (add-after 'install 'install-documentation
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
+                    (doc  (string-append out "/share/doc/wpa-supplicant"))
                     (man  (string-append out "/share/man"))
                     (man5 (string-append man "/man5"))
                     (man8 (string-append man "/man8")))
@@ -1255,6 +1256,15 @@ commands and their arguments.")
                          (find-files "doc/docbook" "\\.5"))
                (for-each (copy-man-page man8)
                          (find-files "doc/docbook" "\\.8"))
+
+               ;; wpa_supplicant.conf(5) does not explain all configuration
+               ;; options but refers to the example config file, so install it
+               ;; along with READMEs.
+               (for-each (lambda (file)
+                           (install-file file doc))
+                         '("README" "README-DPP" "README-HS20"
+                           "README-P2P" "README-WPS"
+                           "wpa_supplicant.conf"))
                #t))))
 
       #:make-flags (list "CC=gcc"
@@ -1303,7 +1313,7 @@ command.")
       CONFIG_CTRL_IFACE_DBUS_INTRO=y\n" port)
                  (close-port port))
                #t))
-          (add-after 'install-man-pages 'install-dbus-conf
+          (add-after 'install-documentation 'install-dbus-conf
             (lambda* (#:key outputs #:allow-other-keys)
               (let* ((out (assoc-ref outputs "out"))
                      (dir (string-append out "/etc/dbus-1/system.d")))
@@ -2124,14 +2134,14 @@ done with the @code{auditctl} utility.")
 (define-public nmap
   (package
     (name "nmap")
-    (version "7.70")
+    (version "7.80")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nmap.org/dist/nmap-" version
                                   ".tar.bz2"))
               (sha256
                (base32
-                "063fg8adx23l4irrh5kn57hsmi1xvjkar4vm4k6g94ppan4hcyw4"))
+                "1aizfys6l9f9grm82bk878w56mg0zpkfns3spzj157h98875mypw"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -2744,14 +2754,14 @@ you are running, what theme or icon set you are using, etc.")
 (define-public nnn
   (package
     (name "nnn")
-    (version "1.9")
+    (version "2.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/jarun/nnn/releases/download/v"
                            version "/nnn-v" version ".tar.gz"))
        (sha256
-        (base32 "1d6z12y4rlg4dzhpm30irpq2ak8hjh5zykkp2n7vxnz5m4ki89zp"))))
+        (base32 "0xb6crd9vig3xgjwl8m4bmgcs4azfmfdpx3g8pdpzs28jdg7i3rr"))))
     (build-system gnu-build-system)
     (inputs
      `(("ncurses" ,ncurses)
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index 3312fe0c47..1160feb553 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -81,15 +81,15 @@ in FITS files.")
 (define-public wcslib
   (package
     (name "wcslib")
-    (version "6.2")
+    (version "6.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "ftp://ftp.atnf.csiro.au/pub/software/wcslib/wcslib" version
+             "ftp://ftp.atnf.csiro.au/pub/software/wcslib/wcslib-" version
              ".tar.bz2"))
        (sha256
-        (base32 "01fqckazhbfqqhyr0wd9vcks1m2afmsh83l981alxg2r54jgwkdv"))))
+        (base32 "003h23m6d5wcs29v2vbnl63f3z35k5x70lpsqlz5c9bp1bvizh8k"))))
     (inputs
      `(("cfitsio" ,cfitsio)))
     (build-system gnu-build-system)
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index c3bcecf349..dec94dd6c5 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -716,7 +716,7 @@ emulation (valve, tape), bit fiddling (decimator, pointer-cast), etc.")
 (define-public csound
   (package
     (name "csound")
-    (version "6.12.2")
+    (version "6.13.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -725,7 +725,7 @@ emulation (valve, tape), bit fiddling (decimator, pointer-cast), etc.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "01krxcf0alw9k7p5sv0s707600an4sl7lhw3bymbwgqrj0v2p9z2"))))
+                "14822ybqyp31z18gky2y9zadr9dkbhabg97y139py73w7v3af1bh"))))
     (build-system cmake-build-system)
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -1107,16 +1107,16 @@ follower.")
 (define-public fluidsynth
   (package
     (name "fluidsynth")
-    (version "2.0.5")
+    (version "2.0.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/FluidSynth/fluidsynth.git")
                     (commit (string-append "v" version))))
-              (file-name (string-append name "-" version "-checkout"))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0rv0apxbj0cgm8f8sqf5xr6kdi4q58ph92ip6cg716ha0ca5lr8y"))))
+                "0nas9pp9r8rnziznxm65x2yzf1ryg98zr3946g0br3s38sjf8l3a"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f                      ; no check target
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 74620a2cbe..ea43bf2fdf 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -5089,6 +5089,41 @@ by a sparse number of variables, this method can reduce the complexity of
 data, to only emphasize the data that actually matters.")
     (license license:expat)))
 
+(define-public r-rcistarget
+  (package
+    (name "r-rcistarget")
+    (version "1.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "RcisTarget" version))
+       (sha256
+        (base32
+         "133x2vr86ifbk82q08x1c8q19zsk5za7b6qrzz77dhsyf4bhcvpd"))))
+    (properties `((upstream-name . "RcisTarget")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-aucell" ,r-aucell)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-data-table" ,r-data-table)
+       ("r-feather" ,r-feather)
+       ("r-gseabase" ,r-gseabase)
+       ("r-r-utils" ,r-r-utils)
+       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+    (home-page "https://aertslab.org/#scenic")
+    (synopsis "Identify transcription factor binding motifs enriched on a gene list")
+    (description
+     "RcisTarget identifies @dfn{transcription factor binding motifs} (TFBS)
+over-represented on a gene list.  In a first step, RcisTarget selects DNA
+motifs that are significantly over-represented in the surroundings of the
+@dfn{transcription start site} (TSS) of the genes in the gene-set.  This is
+achieved by using a database that contains genome-wide cross-species rankings
+for each motif.  The motifs that are then annotated to TFs and those that have
+a high @dfn{Normalized Enrichment Score} (NES) are retained.  Finally, for
+each motif and gene-set, RcisTarget predicts the candidate target genes (i.e.
+genes in the gene-set that are ranked above the leading edge).")
+    (license license:gpl3)))
+
 (define-public r-cicero
   (package
     (name "r-cicero")
@@ -5151,3 +5186,47 @@ accessibility data.")
        `(("r-monocle3" ,r-monocle3)
          ,@(alist-delete "r-monocle"
                          (package-propagated-inputs r-cicero)))))))
+
+(define-public r-cistopic
+  (let ((commit "29abd8df9afb60ff27ac3f0a590930debe926950")
+        (revision "0"))
+    (package
+      (name "r-cistopic")
+      (version (git-version "0.2.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/aertslab/cisTopic.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0s8irpsv5d2zcv4ihanvsf1vrpignzliscxnvs4519af3jmx78h8"))))
+      (build-system r-build-system)
+      (propagated-inputs
+       `(("r-aucell" ,r-aucell)
+         ("r-data-table" ,r-data-table)
+         ("r-dplyr" ,r-dplyr)
+         ("r-dosnow" ,r-dosnow)
+         ("r-dt" ,r-dt)
+         ("r-feather" ,r-feather)
+         ("r-fitdistrplus" ,r-fitdistrplus)
+         ("r-genomicranges" ,r-genomicranges)
+         ("r-ggplot2" ,r-ggplot2)
+         ("r-lda" ,r-lda)
+         ("r-matrix" ,r-matrix)
+         ("r-plyr" ,r-plyr)
+         ("r-rcistarget" ,r-rcistarget)
+         ("r-rtracklayer" ,r-rtracklayer)
+         ("r-s4vectors" ,r-s4vectors)))
+      (home-page "https://github.com/aertslab/cisTopic")
+      (synopsis "Modelling of cis-regulatory topics from single cell epigenomics data")
+      (description
+       "The sparse nature of single cell epigenomics data can be overruled using
+probabilistic modelling methods such as @dfn{Latent Dirichlet
+Allocation} (LDA).  This package allows the probabilistic modelling of
+cis-regulatory topics (cisTopics) from single cell epigenomics data, and
+includes functionalities to identify cell states based on the contribution of
+cisTopics and explore the nature and regulatory proteins driving them.")
+      (license license:gpl3))))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 898b8d200e..b2953fddbf 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -2740,7 +2740,7 @@ quantitative phenotypes.")
 (define-public edirect
   (package
     (name "edirect")
-    (version "10.2.20181018")
+    (version "12.1.20190819")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://ftp.ncbi.nlm.nih.gov/entrez/entrezdirect"
@@ -2748,7 +2748,7 @@ quantitative phenotypes.")
                                   "/edirect-" version ".tar.gz"))
               (sha256
                (base32
-                "091f4aigzpbqih6h82nq566gkp3y07i72yqndmqskfgar1vwgci7"))))
+                "1i9s9mppcfqd60pfywpm8vdyz5vpnyslw22nd7dv0bhykrdnkz9g"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
@@ -7447,13 +7447,13 @@ names in their natural, rather than lexicographic, order.")
 (define-public r-edger
   (package
     (name "r-edger")
-    (version "3.26.6")
+    (version "3.26.7")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "edgeR" version))
               (sha256
                (base32
-                "17vadhamjv4x0l4qqq2p2fi6j2bkllz5zd8dq761vgd5ic23zizm"))))
+                "1xbhb8aa1ygm5crkp1bmqs2x1601ppa2kgc2xlf2zh8jj8zqapg8"))))
     (properties `((upstream-name . "edgeR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -10262,14 +10262,14 @@ family of feature/genome hypotheses.")
 (define-public r-gviz
   (package
     (name "r-gviz")
-    (version "1.28.0")
+    (version "1.28.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Gviz" version))
        (sha256
         (base32
-         "02alz27w8fnnm2ga71g3jg2b94f95ccv6r1fyszj4yb1k2g7rkxk"))))
+         "0chsb3ijwd8zh588s1vqgfassn2rzax5rhqrhl0ini6pi4ilchp2"))))
     (properties `((upstream-name . "Gviz")))
     (build-system r-build-system)
     (propagated-inputs
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 8dbe52435e..6cd3e13567 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2019 Carl Dong <contact@carldong.me>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -276,6 +277,7 @@ or false to signal an error."
         ((string=? system "avr") "no-ld.so")
         ((string=? system "propeller-elf") "no-ld.so")
         ((string=? system "i686-mingw") "no-ld.so")
+        ((string=? system "x86_64-mingw") "no-ld.so")
         ((string=? system "vc4-elf") "no-ld.so")
 
         (else (error "dynamic linker name not known for this system"
diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm
index 0a1112c310..b3f0cbbd95 100644
--- a/gnu/packages/ccache.scm
+++ b/gnu/packages/ccache.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,15 +30,14 @@
 (define-public ccache
   (package
     (name "ccache")
-    (version "3.5")
+    (version "3.6")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "https://www.samba.org/ftp/ccache/ccache-"
-                          version ".tar.xz"))
-      (sha256
-       (base32
-        "04n0xram2416pv98qrd7pi5lfsk0bjqyz7zgvvia41j5mrr4pm5x"))))
+       (method url-fetch)
+       (uri (string-append "https://www.samba.org/ftp/ccache/ccache-"
+                           version ".tar.xz"))
+       (sha256
+        (base32 "07wv75xdcxpdkfsz9h5ffrm8pjbvr1dh6wnb02nyzz18cdbjkcd6"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)     ; for test/run
                      ("which" ,(@ (gnu packages base) which))))
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index 4af2cdc6ea..d706e8d04b 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -47,8 +47,8 @@
   #:use-module (guix build-system gnu))
 
 (define-public cuirass
-  (let ((commit "0b40dca734468e8b12b3ff58e3e779679f17d38e")
-        (revision "21"))
+  (let ((commit "858b6b8c8f2ae7b1ddaf4ae363147121be1f1fe8")
+        (revision "22"))
     (package
       (name "cuirass")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -60,7 +60,7 @@
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "1kdxs8dzdyldfs4wsz5hb64hprkbrnq5ljdll631f3bj8pbvvvc1"))))
+                  "049hg0yaakmfp27950cn0yn43r0v7bqva75xi082n8cxzi6vadgc"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
@@ -121,7 +121,7 @@
        `(("guile" ,guile-2.2)
          ("guile-fibers" ,guile-fibers)
          ("guile-gcrypt" ,guile-gcrypt)
-         ("guile-json" ,guile-json-1)
+         ("guile-json" ,guile-json-3)
          ("guile-sqlite3" ,guile-sqlite3)
          ("guile-git" ,guile-git)
          ;; FIXME: this is propagated by "guile-git", but it needs to be among
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 774abad5c9..64d995b8fd 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -2002,3 +2002,49 @@ reading from and writing to ZIP archives. ")
     ;; Project is distributed under LGPL, but "quazip/z*" "quazip/unzip.*" are
     ;; distributed under zlib terms.
     (license (list license:lgpl2.1+ license:zlib))))
+
+(define-public zutils
+  (package
+    (name "zutils")
+    ;; Check and remove the lint-hidden-cve property when updating.
+    (version "1.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://savannah/zutils/zutils-" version ".tar.lz"))
+       (sha256
+        (base32 "0dx35mv78fgqgz6sszs05ng8ipz2xy09ry9vpmka2rmy08b7x907"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "--sysconfdir=/etc")
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install
+          (lambda* (#:key make-flags outputs #:allow-other-keys)
+            (apply invoke "make" "install"
+                   (string-append "sysconfdir=" (assoc-ref outputs "out")
+                                  "/etc")
+                   make-flags))))))
+    (native-inputs
+     ;; Needed to extract the source tarball and run the test suite.
+     `(("lzip" ,lzip)))
+    (properties `((lint-hidden-cve . ("CVE-2018-1000637"))))
+    (home-page "https://www.nongnu.org/zutils/zutils.html")
+    (synopsis "Utilities that transparently operate on compressed files")
+    (description
+     "Zutils is a collection of utilities able to process any combination of
+compressed and uncompressed files transparently.  If any given file, including
+standard input, is compressed, its decompressed content is used instead.
+
+@command{zcat}, @command{zcmp}, @command{zdiff}, and @command{zgrep} are
+improved replacements for the shell scripts provided by GNU gzip.
+@command{ztest} tests the integrity of supported compressed files.
+@command{zupdate} recompresses files with lzip, similar to gzip's
+@command{znew}.
+
+Supported compression formats are bzip2, gzip, lzip, and xz.  Zutils uses
+external compressors: the compressor to be used for each format is configurable
+at run time, and must be installed separately.")
+    (license (list license:bsd-2        ; arg_parser.{cc,h}
+                   license:gpl2+))))    ; the rest
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 17c85fe512..ae8e9c5a47 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -2230,14 +2230,14 @@ topics for ecologists (ISBN 978-0-691-12522-0).")
 (define-public r-lpsolve
   (package
     (name "r-lpsolve")
-    (version "5.6.13.2")
+    (version "5.6.13.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lpSolve" version))
        (sha256
         (base32
-         "0fc5m259ayc880f5hvnq59ih6nb2rlp394n756n1khmxbjpw1w3m"))))
+         "1xazby8amb47vw5n12k13awv7x3bjci3q8vdd3vk1ms0ii16ahg6"))))
     (properties `((upstream-name . "lpSolve")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/lpSolve")
@@ -5851,14 +5851,14 @@ functions.")
 (define-public r-rjags
   (package
     (name "r-rjags")
-    (version "4-8")
+    (version "4-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rjags" version))
        (sha256
         (base32
-         "17xmjksj69f9wk4x71jxk4cgiqhaf2fj6bjm0mgzp4qln5x84a8m"))))
+         "1vrmxxfnia2mkmfkp5yaq5qrlh4xg3ggab6fnj14mrp1231wb91a"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-coda" ,r-coda)))
@@ -6823,13 +6823,13 @@ and coverage methods to tune the choice of threshold.")
 (define-public r-ggstance
   (package
     (name "r-ggstance")
-    (version "0.3.2")
+    (version "0.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggstance" version))
        (sha256
-        (base32 "078ih9s5b0xzf582qg0vjnxvg5qad5ms1v2vdd062ckahi8zz1r8"))))
+        (base32 "0kdksay61hyb6612b07r84chh7a9aibjyclk3qcypvr9aang8hkh"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ggplot2" ,r-ggplot2)
@@ -14752,14 +14752,14 @@ into R and converted to @code{BibEntry} objects.")
 (define-public r-citr
   (package
     (name "r-citr")
-    (version "0.3.1")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "citr" version))
        (sha256
         (base32
-         "0p2sg0fl7cppxxmr20qyqzs2469kglmgpsvykynw4qx501as57rc"))))
+         "1qbarvafjb8jgkrnrhh6jw7mcglmjwf7dpdiibxf39jkmlhf7las"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-assertthat" ,r-assertthat)
@@ -14945,3 +14945,155 @@ path of values for the regularization parameter.")
 library uses.  It is also possible to control the number of threads in
 OpenMP.")
     (license license:agpl3+)))
+
+(define-public r-lda
+  (package
+    (name "r-lda")
+    (version "1.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "lda" version))
+       (sha256
+        (base32
+         "03r4h5kgr8mfy44p66mfj5bp4k00g8zh4a1mhn46jw14pkhs21jn"))))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/lda/")
+    (synopsis "Collapsed Gibbs sampling methods for topic models")
+    (description
+     "This package implements @dfn{latent Dirichlet allocation} (LDA) and
+related models.  This includes (but is not limited to) sLDA, corrLDA, and the
+mixed-membership stochastic blockmodel.  Inference for all of these models is
+implemented via a fast collapsed Gibbs sampler written in C.  Utility
+functions for reading/writing data typically used in topic models, as well as
+tools for examining posterior distributions are also included.")
+    ;; Any version of the LGPL
+    (license license:lgpl3+)))
+
+(define-public r-rann-l1
+  (package
+    (name "r-rann-l1")
+    (version "2.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "RANN.L1" version))
+       (sha256
+        (base32
+         "1hanh3my84mdr5wy6b89fawqzfc184vff1y65wy4l5ld9qza1n44"))))
+    (properties `((upstream-name . "RANN.L1")))
+    (build-system r-build-system)
+    (home-page "https://github.com/jefferis/RANN/tree/master-L1")
+    (synopsis "Fast nearest neighbour search using L1 metric")
+    (description
+     "This package provides tools to find the k nearest neighbours for every
+point in a given dataset in O(N log N) time using Arya and Mount's ANN
+library.  There is support for approximate as well as exact searches, fixed
+radius searches and @code{bd} as well as @code{kd} trees.  The distance is
+computed using the L1 (Manhattan, taxicab) metric.")
+    (license license:gpl3+)))
+
+(define-public r-patchwork
+  ;; There has been no public release yet.
+  (let ((commit "fd7958bae3e7a1e30237c751952e412a0a1d1242")
+        (revision "1"))
+    (package
+      (name "r-patchwork")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/thomasp85/patchwork.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "00fq520xwy1ysg4k8x48x9b0yy9wyi8y8zj6dvxjg4bwx0yyp6s4"))))
+      (build-system r-build-system)
+      (propagated-inputs
+       `(("r-ggplot2" ,r-ggplot2)
+         ("r-gtable" ,r-gtable)))
+      (home-page "https://github.com/thomasp85/patchwork")
+      (synopsis "Compose ggplot2 plots")
+      (description
+       "The @code{ggplot2} package provides a strong API for sequentially
+building up a plot, but does not concern itself with composition of multiple
+plots.  Patchwork is a package that expands the API to allow for arbitrarily
+complex composition of plots by providing mathmatical operators for combining
+multiple plots.")
+      (license license:expat))))
+
+(define-public r-liger
+  (package
+    (name "r-liger")
+    (version "0.4.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/MacoskoLab/liger.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "16dzwwcpw6n78pxlc5w3kraigki35ix7zhd2cbx5f3y60bbkhlmx"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (delete-file "inst/java/ModularityOptimizer.jar")
+           #t))))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'build-java-part
+           (lambda* (#:key inputs #:allow-other-keys)
+             (invoke "unzip" (assoc-ref inputs "optimizer-src"))
+             (for-each (lambda (file) (invoke "javac" file))
+                       (find-files "." "\\.java$"))
+             (apply invoke "jar" "cf" "inst/java/ModularityOptimizer.jar"
+                    (find-files "." "\\.class$"))
+             #t)))))
+    (propagated-inputs
+     `(("r-cowplot" ,r-cowplot)
+       ("r-dosnow" ,r-dosnow)
+       ("r-dplyr" ,r-dplyr)
+       ("r-fnn" ,r-fnn)
+       ("r-foreach" ,r-foreach)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-ggrepel" ,r-ggrepel)
+       ("r-hmisc" ,r-hmisc)
+       ("r-ica" ,r-ica)
+       ("r-irlba" ,r-irlba)
+       ("r-matrix" ,r-matrix)
+       ("r-mclust" ,r-mclust)
+       ("r-patchwork" ,r-patchwork)
+       ("r-plyr" ,r-plyr)
+       ("r-rann-l1" ,r-rann-l1)
+       ("r-rcpp" ,r-rcpp)
+       ("r-rcpparmadillo" ,r-rcpparmadillo)
+       ("r-riverplot" ,r-riverplot)
+       ("r-rtsne" ,r-rtsne)
+       ("r-snow" ,r-snow)))
+    (native-inputs
+     `(("jdk" ,icedtea "jdk")
+       ;; See https://github.com/MacoskoLab/liger/issues/96
+       ;; The optimizer is released under the Expat license.
+       ("optimizer-src"
+        ,(origin
+           (method url-fetch)
+           (uri "http://www.ludowaltman.nl/slm/modularity_optimizer_source.zip")
+           (sha256
+            (base32
+             "01hmm6sapcmldvayknqx2w4cav3qv71mwwkdkwj4qgq6dss09g18"))))
+       ("unzip" ,unzip)
+       ("r-knitr" ,r-knitr))) ; for vignettes
+    (home-page "https://github.com/MacoskoLab/liger")
+    (synopsis "Integrate and analyze multiple single-cell datasets")
+    (description
+     "LIGER is a package for integrating and analyzing multiple single-cell
+datasets, developed and maintained by the Macosko lab.  It relies on
+integrative non-negative matrix factorization to identify shared and
+dataset-specific factors.")
+    (license license:gpl3)))
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 3fc9ba6540..78dae7431a 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019 Carl Dong <contact@carldong.me>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -267,7 +268,7 @@ target that libc."
            (cond
             ((target-mingw? target)
              (if libc
-                 `(("libc" ,mingw-w64)
+                 `(("libc" ,libc)
                    ,@inputs)
                  `(("mingw-source" ,(package-source mingw-w64))
                    ,@inputs)))
@@ -508,7 +509,8 @@ and the cross tool chain."
                      #:optional
                      (libc glibc))
   (if (target-mingw? target)
-      mingw-w64
+      (let ((machine (substring target 0 (string-index target #\-))))
+        (make-mingw-w64 machine))
       libc))
 
 (define* (cross-newlib? target
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 771981fb19..4194f1f607 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -2729,13 +2729,13 @@ reasonable substitute.")
 (define-public python-redis
   (package
     (name "python-redis")
-    (version "3.2.1")
+    (version "3.3.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "redis" version))
        (sha256
-        (base32 "0wwj8il4c3aff15xwwcjfci367zxsakq05ps1a2il6yavp91i94c"))))
+        (base32 "0fyxzqax7lcwzwhvnz0i0q6v62hxyv1mv52ywx3bpff9a2vjz8lq"))))
     (build-system python-build-system)
     ;; Tests require a running Redis server.
     (arguments '(#:tests? #f))
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index b4d5a9ab27..ae2e5cf8fa 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -109,7 +109,7 @@ and BOOTP/TFTP for network booting of diskless machines.")
 (define-public isc-bind
   (package
     (name "bind")
-    (version "9.14.4")
+    (version "9.14.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -117,7 +117,7 @@ and BOOTP/TFTP for network booting of diskless machines.")
                     "/bind-" version ".tar.gz"))
               (sha256
                (base32
-                "0gxqws7ml15lwkjw9mdcd759gv5kk3s9m17j3vrp9448ls1gnbii"))))
+                "0ic0k0kpavwnbyf10rwx6yypxg66f65fprwc0dbmp61xp0n6gl0j"))))
     (build-system gnu-build-system)
     (outputs `("out" "utils"))
     (inputs
@@ -303,14 +303,14 @@ asynchronous fashion.")
 (define-public nsd
   (package
     (name "nsd")
-    (version "4.2.0")
+    (version "4.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.nlnetlabs.nl/downloads/nsd/nsd-"
                            version ".tar.gz"))
        (sha256
-        (base32 "0k57xl3ybdnqjqw9a3dmi7l6qmhkiic6wsghkz08ir809aj1rpsi"))))
+        (base32 "1ys608jyp5scc957q4brm094c97sxlwymina7d2nvzi51aa37cw3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/elm.scm b/gnu/packages/elm.scm
new file mode 100644
index 0000000000..8b5ec36621
--- /dev/null
+++ b/gnu/packages/elm.scm
@@ -0,0 +1,81 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages elm)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages haskell)
+  #:use-module (gnu packages haskell-check)
+  #:use-module (gnu packages haskell-crypto)
+  #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages haskell-web)
+  #:use-module (guix build-system haskell)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages))
+
+;; The full elm build calls out to itself via Template Haskell to
+;; compile the elm reactor web app. elm reactor isn't required to
+;; compile elm applications, so we take this part out of this
+;; bootstrap package.
+(define-public elm-compiler
+  (package
+    (name "elm-compiler")
+    (version "0.19.0")
+    (source
+     (origin
+       (method git-fetch)
+       (file-name (git-file-name name version))
+       (uri (git-reference
+             (url "https://github.com/elm/compiler/")
+             (commit version)))
+       (sha256
+        (base32 "0s93z9vr0vp5w894ghc5s34nsq09sg1msf59zfiba87sid5vgjqy"))
+       (patches
+        (search-patches "elm-compiler-disable-reactor.patch"
+                        "elm-compiler-relax-glsl-bound.patch"
+                        "elm-compiler-fix-map-key.patch"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
+       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
+       ("ghc-edit-distance" ,ghc-edit-distance)
+       ("ghc-file-embed" ,ghc-file-embed)
+       ("ghc-http" ,ghc-http)
+       ("ghc-http-client" ,ghc-http-client)
+       ("ghc-http-client-tls" ,ghc-http-client-tls)
+       ("ghc-http-types" ,ghc-http-types)
+       ("ghc-language-glsl" ,ghc-language-glsl)
+       ("ghc-logict" ,ghc-logict)
+       ("ghc-network" ,ghc-network)
+       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
+       ("ghc-scientific" ,ghc-scientific)
+       ("ghc-sha" ,ghc-sha)
+       ("ghc-snap-core" ,ghc-snap-core)
+       ("ghc-snap-server" ,ghc-snap-server)
+       ("ghc-unordered-containers"
+        ,ghc-unordered-containers)
+       ("ghc-utf8-string" ,ghc-utf8-string)
+       ("ghc-vector" ,ghc-vector)
+       ("ghc-zip-archive" ,ghc-zip-archive)))
+    (home-page "https://elm-lang.org")
+    (synopsis "Programming language for Web applications")
+    (description
+     "This package provides Elm, a statically-typed functional programming
+language for the browser.  It includes commands for developers such as
+@command{elm make} and @command{elm repl}.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 886307d02b..2862f7b975 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -40,7 +40,7 @@
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
 ;;; Copyright © 2018 Alex Branham <alex.branham@gmail.com>
 ;;; Copyright © 2018 Thorsten Wilms <t_w_@freenet.de>
-;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2018, 2019 Brett Gilio <brettg@posteo.net>
 ;;; Copyright © 2019 Dimakakos Dimos <bendersteed@teknik.io>
 ;;; Copyright © 2019 Brian Leung <bkleung89@gmail.com>
@@ -52,6 +52,7 @@
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autitici.org>
 ;;; Copyright © 2019 Jens Mølgaard <jens@zete.tk>
 ;;; Copyright © 2019 Amin Bandali <bandali@gnu.org>
+;;; Copyright © 2019 Jelle Licht <jlicht@fsfe.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2255,7 +2256,7 @@ display and behaviour is easily customisable.")
 (define-public emacs-git-timemachine
   (package
     (name "emacs-git-timemachine")
-    (version "4.10")
+    (version "4.11")
     (source
      (origin
        (method git-fetch)
@@ -2265,7 +2266,7 @@ display and behaviour is easily customisable.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "08zsn3lsnnf01wkv5ls38jga02s5dnf0j3gigy4qd6im3j3d04m1"))))
+         "1pz4l1xnq6s67w5yq9107vm8dg7rqf8n9dmbn90jys97c722g70n"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-transient" ,emacs-transient)))
@@ -2729,6 +2730,78 @@ naming style of a symbol.  It supports different naming conventions such as:
 tables.")
     (license license:gpl2+)))
 
+(define-public emacs-org-rich-yank
+  (package
+    (name "emacs-org-rich-yank")
+    (version "0.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/unhammer/org-rich-yank.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0gxb0fnh5gxjmld0hnk5hli0cvdd8gjd27m30bk2b80kwldxlq1z"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/unhammer/org-rich-yank")
+    (synopsis "Automatically surround source code pasted into Org with
+@code{#+BEGIN_SRC} blocks")
+    (description
+     "This package provides a utility function for Org buffers that makes a
+@code{_SRC} block with the appropriate language annotation for code that has
+been copied from an Emacs major mode.")
+    (license license:gpl2+)))
+
+(define-public emacs-ob-restclient
+  (let ((commit "53376667eeddb1388fd6c6976f3222e7c8adcd46"))
+    (package
+      (name "emacs-ob-restclient")
+      (version (git-version "0.02" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/alf/ob-restclient.el.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1djg53cp7y83gic2v71y6r5z76kwrbkp0r69hl25rs99dx6p89dy"))))
+      (propagated-inputs
+       `(("emacs-restclient" ,emacs-restclient)))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/alf/ob-restclient.el")
+      (synopsis "Org-babel functionality for @code{restclient-mode}")
+      (description
+       "This package integrates @code{restclient-mode} with Org.")
+      (license license:gpl3+))))
+
+(define-public emacs-org-now
+  (let ((commit "8f6b277a73f1c66e58ccb4b7f40d406851befc91"))
+    (package
+      (name "emacs-org-now")
+      (version (git-version "0.1-pre" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/alphapapa/org-now.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "117zzkryznznk6h4i1jqzdn888nl019xrgxm2gza0lndx8dxsg2c"))))
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/alphapapa/org-now")
+      (synopsis "Show current Org tasks in a sidebar")
+      (description
+       "This package provides commands to show Org headings in a sidebar
+window while working on them.  After defining one heading as the \"now\"
+heading, other headings can be refiled to it with one command, and back to
+their original location with another.")
+      (license license:gpl3+))))
+
 (define-public emacs-rich-minority
   (package
     (name "emacs-rich-minority")
@@ -3460,6 +3533,55 @@ completion candidate when using the Company text completion framework.")
 a customizable list.")
       (license license:gpl3+))))
 
+(define-public emacs-phi-search
+  (let ((commit "9a089b8271cb1cff9640848850298c9ec855286c")
+        (revision "1"))
+    (package
+      (name "emacs-phi-search")
+      (version (git-version "20160630" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/zk-phi/phi-search.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1gr5plcbrfdc4pglfj905s89hf8x0kc083h30wcnd81bnw9jwz1x"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/zk-phi/phi-search")
+      (synopsis "Interactive search compatible with @code{multiple-cursors}")
+      (description "This package can be used with @code{multiple-cursors} to
+provide an incremental search that moves all fake cursors in sync.")
+      (license license:gpl2+))))
+
+(define-public emacs-phi-search-mc
+  (let ((commit "7aa671910f766437089aec26c3aa7814222d1356")
+        (revision "1"))
+    (package
+      (name "emacs-phi-search-mc")
+      (version (git-version "2.2.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/knu/phi-search-mc.el.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0wr86ad0yl52im6b9z0b9pzmhcn39qg5m9878yfv1nbxliw40lcd"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-phi-search" ,emacs-phi-search)
+         ("emacs-multiple-cursors" ,emacs-multiple-cursors)))
+      (home-page "https://github.com/knu/phi-search-mc.el")
+      (synopsis "Extend @code{phi-search} with additional
+@code{multiple-cursors} functionality")
+      (description "This package provides further integration between
+@code{multiple-cursors} and @code{phi-search}, a package that allows for
+interactive searches to move multiple fake cursors.")
+      (license license:bsd-2))))
+
 (define-public emacs-multiple-cursors
   (package
     (name "emacs-multiple-cursors")
@@ -4487,6 +4609,29 @@ regardless of @code{highlight-symbol-idle-delay}.
 @code{highlight-symbol-query-replace} can be used to replace the symbol. ")
       (license license:gpl2+))))
 
+(define-public emacs-symbol-overlay
+  (let ((commit "e40a7c407f24158c45eaa5f54ed41f5e416a51dc")
+        (revision "1"))
+    (package
+      (name "emacs-symbol-overlay")
+      (version (git-version "4.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/wolray/symbol-overlay.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0ibz3392d3jw1l8006h9kf8s7bg6vl7jc92bmqc031a433009ic7"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/wolray/symbol-overlay")
+      (synopsis "Highlight symbols and perform various search operations on them")
+      (description
+       "This package provides functions for highlighting and navigating
+between symbols.")
+      (license license:gpl3+))))
+
 (define-public emacs-hl-todo
   (package
     (name "emacs-hl-todo")
@@ -6409,6 +6554,33 @@ used for reverse direction.")
 end of a line and increment or decrement it.")
       (license license:gpl3+))))
 
+(define-public emacs-evil-owl
+  (let ((commit "36a5fe057f44d48e377e3ef4f04b4eb30e1af309")
+        (revision "1"))
+    (package
+      (name "emacs-evil-owl")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/mamapanda/evil-owl")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "07a6n0gqss1qx9a50dqzqqq0gj6n7a4ykbcv1a0c9qd4fnfnm90m"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-evil" ,emacs-evil)
+         ("emacs-posframe" ,emacs-posframe)))
+      (home-page "https://github.com/mamapanda/evil-owl")
+      (synopsis "Preview candidates when using Evil registers and marks")
+      (description
+       "This package supplements Evil's register- and mark-based commands with
+a popup window for previewing candidates.")
+      (license license:gpl3+))))
+
 (define-public emacs-evil-exchange
   (let ((commit "47691537815150715e64e6f6ec79be7746c96120")
         (version "0.41")
@@ -7133,6 +7305,60 @@ Additionally it can display the number of unread emails in the
 mode-line.")
     (license license:gpl3+)))
 
+(define-public emacs-mu4e-jump-to-list
+  (let ((commit "358bba003543b49ffa266e503e54aebd0ebe614b")
+        (revision "1"))
+    (package
+      (name "emacs-mu4e-jump-to-list")
+      (version (git-version "1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.com/wavexx/mu4e-jump-to-list.el.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "00y9nap61q1z2cdql4k9g7fgi2gdgd9iy5s5lzrd9a4agbx6r7sv"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("mu" ,mu)))
+      (home-page "https://gitlab.com/wavexx/mu4e-jump-to-list.el")
+      (synopsis "Select and view mailing lists in mu4e")
+      (description
+        "@code{mu4e-jump-to-list} allows you to select and view mailing lists
+automatically using existing List-ID headers in your mu database.  Just press
+\"l\" in the headers view and any mailing list you've subscribed to will be
+automatically discovered and presented in recency order.")
+      (license license:gpl3+))))
+
+(define-public emacs-mu4e-patch
+  (let ((commit "522da46c1653b1cacc79cde91d6534da7ae9517d")
+        (revision "1"))
+    (package
+      (name "emacs-mu4e-patch")
+      (version (git-version "0.1.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/seanfarley/mu4e-patch")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "10lzf3b70pk6rzdrgx0ww0gc94v0ydh9zj1gbsa20xw27ds7hmfn"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("mu" ,mu)))
+      (home-page "https://github.com/seanfarley/mu4e-patch")
+      (synopsis "Colorize patch-like emails in mu4e")
+      (description
+        "Extension for mu4e to colorize patch-like emails with diff-mode.
+This is based on Frank Terbeck's @code{gnus-article-treat-patch.el} but has
+been adapted to work with mu4e.")
+      (license license:gpl3+))))
+
 (define-public emacs-pretty-mode
   (package
     (name "emacs-pretty-mode")
@@ -7302,7 +7528,7 @@ above over the network.")
 (define-public emacs-helm-org-rifle
   (package
     (name "emacs-helm-org-rifle")
-    (version "1.6.1")
+    (version "1.7.0")
     (source
      (origin
        (method git-fetch)
@@ -7312,12 +7538,13 @@ above over the network.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1r38xhwvgbv6kn5x159phz3xgss7f1rc7icq27rnr4d8aj91wm6k"))))
+         "058zvh7cdall7dl3xay9ibcjvs13fbqp8fli3lz980pinmsds3r2"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-dash" ,emacs-dash)
        ("emacs-f" ,emacs-f)
        ("emacs-helm" ,emacs-helm)
+       ("emacs-org" ,emacs-org)
        ("emacs-s" ,emacs-s)))
     (home-page "https://github.com/alphapapa/helm-org-rifle")
     (synopsis "Rifle through Org files")
@@ -9633,7 +9860,7 @@ Feautures:
 (define-public emacs-evil-matchit
   (package
     (name "emacs-evil-matchit")
-    (version "2.3.0")
+    (version "2.3.3")
     (source
      (origin
        (method git-fetch)
@@ -9642,7 +9869,7 @@ Feautures:
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0y6q42hml7jgf060d83m7hf270h01858g5kxw12na9n4r4jjpdg1"))))
+        (base32 "04kllxd7vvziwqiff3vx60a0r6805wynsla73j8xkcz4yzk8q91r"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-evil" ,emacs-evil)))
@@ -10051,6 +10278,61 @@ environment variables to be retrieved from the shell, so that Emacs will see
 the same values you get in a terminal.")
     (license license:gpl3+)))
 
+(define-public emacs-frog-menu
+  (let ((commit "740bbc88b8535d31f783f3b2043a2a6683afbf31")
+        (revision "1"))
+    (package
+      (name "emacs-frog-menu")
+      (version (git-version "0.2.9" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/clemera/frog-menu")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1g77424jwq62qj06rvld44s5hp0dw8rw2pwmmag6gd536zf65xrj"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-posframe" ,emacs-posframe)
+         ("emacs-avy" ,emacs-avy)))
+      (home-page "https://github.com/clemera/frog-menu")
+      (synopsis "Quickly pick items from ad hoc menus")
+      (description
+       "This package provides a popup offering a preview of a list of
+candidates on which user-defined dispatch actions can act.")
+      (license license:gpl3+))))
+
+(define-public emacs-frog-jump-buffer
+  (let ((commit "2d7b342785ae27d45f5d252272df6eb773c78e20")
+        (revision "1"))
+    (package
+      (name "emacs-frog-jump-buffer")
+      (version (git-version "0.1.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/waymondo/frog-jump-buffer")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1z00by8hiss1r2lwmzrl8pnz6jykia2849dqqm4l3z5rf6lwvc0f"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)
+         ("emacs-frog-menu" ,emacs-frog-menu)
+         ("emacs-avy" ,emacs-avy)))
+      (home-page "https://github.com/waymondo/frog-jump-buffer")
+      (synopsis "Jump to any Emacs buffer with minimal keystrokes")
+      (description
+       "This package provides a preview window of buffers that can be switched
+to with quicklink-style selections.")
+      (license license:gpl3+))))
+
 (define-public emacs-deft
   (package
     (name "emacs-deft")
@@ -10724,6 +11006,31 @@ tables of contents.")
 files, allowing for actions to be performed based on search criteria.")
     (license license:gpl3+)))
 
+(define-public emacs-org-auto-expand
+  (let ((commit "4938d5f6460e2f8f051ba9ac000b291bfa43ef62")
+        (revision "1"))
+    (package
+      (name "emacs-org-auto-expand")
+      (version (git-version "0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/alphapapa/org-auto-expand")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1my0c6xmkh37lwi6l472lz9d86lf20h6xcllzlxm1lxa24rhva6v"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-org" ,emacs-org)
+         ("emacs-dash" ,emacs-dash)))
+      (home-page "https://github.com/alphapapa/org-auto-expand")
+      (synopsis "Automatically expand certain Org headings")
+      (description "This package allows a customizable set of headings in Org
+files to be expanded upon opening them.")
+      (license license:gpl3+))))
+
 (define-public emacs-parsebib
   (package
     (name "emacs-parsebib")
@@ -12421,12 +12728,11 @@ perform regression test for packages that provide font-lock rules.")
       (license license:gpl3+))))
 
 (define-public emacs-racket-mode
-  (let ((commit "b977873e6128f8399432dcd60cc39f6a6f803d9c")
-        (revision "2"))
+  (let ((commit "5300aa004f08535c3fac99f1af78462f129aca81")
+        (revision "3"))
     (package
       (name "emacs-racket-mode")
-      (version (string-append "0.0.2" "-" revision "."
-                              (string-take commit 7)))
+      (version (git-version "0.0.2" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -12436,7 +12742,7 @@ perform regression test for packages that provide font-lock rules.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0vp4bbbplqvmnhjpl6ajrlydmrhqzil56cfbs18m5c5fddx0zlh7"))))
+           "1gkpm4fl1ybsm9qqgrkwyjbd9znddy438x266k27fs90lkxrfray"))))
       (build-system emacs-build-system)
       (arguments
        `(#:include '("\\.el$" "\\.rkt$")))
@@ -14385,7 +14691,7 @@ buffers – other modes on the TODO list).
 (define-public emacs-magit-todos
   (package
     (name "emacs-magit-todos")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
        (method git-fetch)
@@ -14395,7 +14701,7 @@ buffers – other modes on the TODO list).
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0gfm6wn2a4v5i9lfsvvin0kwpr9n96ddm3z4yf50jd3kg2igzry1"))))
+         "09pjb4k409gc0h51vb5az1shx02c1hx8cnvhi529n7dm4maildg5"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -14771,7 +15077,7 @@ correctly.")
 (define-public emacs-helm-slime
   (package
     (name "emacs-helm-slime")
-    (version "0.3.0")
+    (version "0.4.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -14780,7 +15086,7 @@ correctly.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1qhb9446rpj17pm0hi3miy5gs5k3ld43bq29kzy0y26bf7ivfcjv"))))
+                "0mrpjhpijdrq353fnfvdj9l9xfsz390qlcvifcair9732ma7i8l0"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-helm" ,emacs-helm)
@@ -14905,7 +15211,7 @@ RPC channels with users and other software.")
 (define-public emacs-sesman
   (package
     (name "emacs-sesman")
-    (version "0.3.3")
+    (version "0.3.4")
     (source
      (origin
        (method git-fetch)
@@ -14915,10 +15221,18 @@ RPC channels with users and other software.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0r32f8ma9ddczxrrdz0nadp14j3zmk10q1ch02gb82synkx3xdra"))))
+         "0z5jb4vpbjsi63w3wjy6d2lgz33qdfvrgfb3bszv4hcf6a96y7fc"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:tests? #t
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-shell
+           ;; Setting the SHELL environment variable is required for the tests
+           ;; to find sh.
+           (lambda _
+             (setenv "SHELL" (which "sh"))
+             #t)))
+       #:tests? #t
        #:test-command '("make" "test")))
     (home-page "https://github.com/vspinu/sesman")
     (synopsis "Session manager for Emacs based IDEs")
@@ -16432,7 +16746,7 @@ previewed by scrolling up and down within a @code{dired} buffer.")
 (define-public emacs-counsel-etags
   (package
     (name "emacs-counsel-etags")
-    (version "1.8.7")
+    (version "1.8.9")
     (source
      (origin
        (method git-fetch)
@@ -16442,7 +16756,7 @@ previewed by scrolling up and down within a @code{dired} buffer.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0vjcjspfrz1csnmfi6r7p7f070a496adxkqnsxwx1gx8cpylwp1g"))))
+         "0rmdl93kgyydwa96yclds9vwly41bpk8v18cbqc1x266w6v77dr9"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-ivy" ,emacs-ivy)))
@@ -17241,3 +17555,165 @@ federated microblogging social network.")
 Emacs.  It's a re-write of the Insidious Big Brother Database (BBDB) using
 Emacs Lisp's (relatively new) EIEIO object oriented libraries.")
       (license license:gpl3+))))
+
+(define-public emacs-refactor
+  (package
+    (name "emacs-refactor")
+    (version "0.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Wilfred/emacs-refactor.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1yky7vlv91501xb43xk19rr8mxlvrsxhawsc98jivf64nad5dqay"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-s" ,emacs-s)
+       ("emacs-popup" ,emacs-popup)
+       ("emacs-list-utils" ,emacs-list-utils)
+       ("emacs-iedit" ,emacs-iedit)))
+    (home-page "https://github.com/Wilfred/emacs-refactor/")
+    (synopsis "Language-specific refactoring in Emacs")
+    (description "Emacs Refactor (EMR) is a framework for providing
+language-specific refactoring in Emacs.  It includes refactoring commands for
+a variety of languages, including elisp itself.")
+    (license license:gpl3+)))
+
+(define-public emacs-flyspell-correct
+  (package
+    (name "emacs-flyspell-correct")
+    (version "0.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/d12frosted/flyspell-correct.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1r9hmz7sihhy7npv6nxp04sy57glzmfax5d67mwn96fdnc0yhlnd"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-helm" ,emacs-helm)
+       ("emacs-ivy" ,emacs-ivy)
+       ("emacs-popup" ,emacs-popup)))
+    (home-page
+     "https://github.com/d12frosted/flyspell-correct")
+    (synopsis
+     "Correcting words with flyspell via custom interfaces")
+    (description
+     "This package provides functionality for correcting words via custom
+interfaces.  Several interfaces are supported beside the classic ido: popup,
+helm and ivy.")
+    (license license:gpl3+)))
+
+(define-public emacs-org-emms
+  (let ((commit "07a8917f3d628c32e5de1dbd118ac08203772533")
+        (revision "1"))
+    (package
+      (name "emacs-org-emms")
+      (version
+       (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.com/jagrg/org-emms.git")
+               (commit commit)))
+         (file-name (git-file-name name commit))
+         (sha256
+          (base32
+           "1sqsm5sv311xfdk4f4rsnvprdf2v2vm7l1b3vqi7pc0g8adlnw1d"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emms" ,emacs-emms)
+         ("emacs-org" ,emacs-org)))
+      (home-page "https://gitlab.com/jagrg/org-emms")
+      (synopsis "Play multimedia files from org-mode")
+      (description
+       "This package provides a new org link type for playing back multimedia
+files from org-mode using EMMS, The Emacs Multimedia System.  If the link
+contains a track position, playback will start at the specified position.")
+      (license license:gpl3+))))
+
+(define-public emacs-org-jira
+  (package
+   (name "emacs-org-jira")
+   (version "4.3.1")
+   (source
+    (origin
+     (method git-fetch)
+     (uri (git-reference
+           (url "https://github.com/ahungry/org-jira.git")
+           (commit version)))
+     (file-name (git-file-name name version))
+     (sha256
+      (base32
+       "1l80r2a9zzbfk2c78i40h0ww79vm9v4j6xi2h5i4w9kqh10rs6h2"))))
+   (build-system emacs-build-system)
+   (propagated-inputs
+    `(("emacs-request" ,emacs-request)
+      ("emacs-s" ,emacs-s)
+      ("emacs-dash" ,emacs-dash)
+      ("emacs-org" ,emacs-org)))
+   (home-page "https://github.com/ahungry/org-jira")
+   (synopsis "Syncing between Jira and Org-mode")
+   (description
+    "This package provides an extension to org-mode for syncing issues with
+JIRA issue servers.")
+   (license license:gpl3+)))
+
+(define-public emacs-systemd-mode
+  (package
+    (name "emacs-systemd-mode")
+    (version "1.6")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/holomorph/systemd-mode.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ylgnvpfindg4cxccbqy02ic7p0i9rygf1w16dm1filwhbqvjplq"))))
+    (build-system emacs-build-system)
+    (arguments '(#:include '("\\.el$" "\\.txt$")))
+    (home-page "https://github.com/holomorph/systemd-mode")
+    (synopsis
+     "Major mode for editing systemd units")
+    (description
+     "Major mode for editing systemd units in GNU Emacs.")
+    (license license:gpl3+)))
+
+(define-public emacs-ssh-config-mode
+  (let ((commit "4c1dfa57d452cb5654453bf186c8ff63e1e71b56")
+        (revision "1"))
+    (package
+      (name "emacs-ssh-config-mode")
+      (version (git-version "8.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/jhgorrell/ssh-config-mode-el.git")
+           (commit commit)))
+         (file-name (git-file-name name commit))
+         (sha256
+          (base32
+           "0crglfdazzckizbwzmgl2rn6j85avfzkr1q7ijxd17rp2anvr9bd"))))
+      (build-system emacs-build-system)
+      (arguments '(#:include '("\\.el$" "\\.txt$")))
+      (home-page
+       "https://github.com/jhgorrell/ssh-config-mode-el")
+      (synopsis
+       "Mode for fontification of ~/.ssh/config")
+      (description
+       "This packages fontifies the ssh config keywords and creates
+keybindings for skipping from host section to host section.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index fa2bf786c2..f581b2a38a 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -980,8 +980,8 @@ Z64 video plugin.")
                (string-append "COREDIR=" m64p "/lib/")))
        ;; There are no tests.
        #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus SDL input plugin")
+    (home-page "https://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus command line user interface")
     (description
      "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
 which is capable of accurately playing many games.  This package contains the
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 87775c68fe..e8c4e6bc9d 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -448,7 +448,7 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
   ;; the system's dynamically linked library.
   (package
     (name "monero")
-    (version "0.14.1.0")
+    (version "0.14.1.2")
     (source
      (origin
        (method git-fetch)
@@ -469,7 +469,7 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
            #t))
        (sha256
         (base32
-         "1asa197fad81jfv12qgaa7y7pdr1r1pda96m9pvivkh4v30cx0nh"))))
+         "00zl883c7lcd9z7g4y3vv7rxmr7ppzrxdblnhk32r9l3qzyw55r6"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("doxygen" ,doxygen)
@@ -511,6 +511,11 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
                (("return \\(")
                 "return ((std::string(getenv(\"HOME\"))) / "))
              #t))
+         (add-after 'change-log-path 'fix-file-permissions-for-tests
+           (lambda _
+             (for-each make-file-writable
+                       (find-files "tests/data/" "wallet_9svHk1.*"))
+             #t))
          ;; Only try tests that don't need access to network or system
          (replace 'check
            (lambda _
@@ -525,11 +530,6 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
                        "DNSResolver.DNSSECSuccess"
                        "DNSResolver.DNSSECFailure"
                        "DNSResolver.GetTXTRecord"
-                       ;; TODO: Find why portability_wallet test fails
-                       ;; Maybe the Boost version used to create the test
-                       ;; wallet and the current Boost version are not
-                       ;; completely compatible?
-                       "Serialization.portability_wallet"
                        "is_hdd.linux_os_root")
                      ":")))
                (invoke "tests/unit_tests/unit_tests"
@@ -1114,3 +1114,31 @@ information.")
     (description "This allows a Trezor hardware wallet to communicate to the
 Trezor wallet.")
     (license license:lgpl3+)))
+
+(define-public bitcoin-abc
+  (package
+    (inherit bitcoin-core)
+    (name "bitcoin-abc")
+    (version "0.19.8")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://download.bitcoinabc.org/"
+                                  version "/linux/src/bitcoin-abc-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0ndvkxv5m8346bdhfqzgdiz1k9wyjycj05jp7daf9pml3cw79sz5"))))
+    (home-page "https://www.bitcoinabc.org/")
+    (synopsis "Bitcoin ABC peer-to-peer full node for the Bitcoin Cash protocol")
+    (description
+     "Bitcoin Cash brings sound money to the world, fulfilling the original
+promise of Bitcoin as Peer-to-Peer Electronic Cash.  Merchants and users are
+empowered with low fees and reliable confirmations is a digital currency that
+enables instant payments to anyone anywhere in the world.  It uses
+peer-to-peer technology to operate without central authority: managing
+transactions and issuing money are carried out collectively by the network.
+As a fork it implemented changes lowering the time between blocks and now
+offers confimations after less than 5 seconds and have significantly lower
+fees that BTC.  Bitcoin ABC is the reference implementation of the Bitcoin
+Cash protocol.  This package provides the Bitcoin Cash command line client and
+a client based on Qt.  This is a fork of Bitcoin Core.")))
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index c4f82cde19..03bfa43014 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -26,6 +26,7 @@
 ;;; Copyright © 2019 Jens Mølgaard <jens@zete.tk>
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Baptiste Strazzulla <bstrazzull@hotmail.fr>
+;;; Copyright © 2019 Alva <alva@skogen.is>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -66,7 +67,7 @@
 (define-public font-ibm-plex
   (package
     (name "font-ibm-plex")
-    (version "1.0.1")
+    (version "2.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -74,7 +75,7 @@
                     "v" version "/OpenType.zip"))
               (sha256
                (base32
-                "0nzxw9z6waixslam248yr26ci3fbk83c7jf6m90hncnaj6zxx795"))))
+                "1lv65z3qnqgh2w36daf5wyz0ma9rg1qj9s9lzlnva8l7q3h8c9b8"))))
     (build-system font-build-system)
     (home-page "https://github.com/IBM/plex")
     (synopsis "IBM Plex typeface")
diff --git a/gnu/packages/freeipmi.scm b/gnu/packages/freeipmi.scm
index 5f1931e7fe..57fe527cbe 100644
--- a/gnu/packages/freeipmi.scm
+++ b/gnu/packages/freeipmi.scm
@@ -28,14 +28,14 @@
 (define-public freeipmi
   (package
     (name "freeipmi")
-    (version "1.6.3")
+    (version "1.6.4")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/freeipmi/freeipmi-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "1sg12ycig2g5yv9l3vx25wsjmz7ybnrsvji0vs51yjmclwsygm5a"))))
+               "0g0s4iwx0ng4rv7hp5cc3kkx4drahsc89981gwjblf04lfavppv5"))))
     (build-system gnu-build-system)
     (inputs
      `(("libgcrypt" ,libgcrypt)))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 1aa2f92c02..3dc3c72551 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -1386,7 +1386,7 @@ that beneath its ruins lay buried an ancient evil.")
 (define-public angband
   (package
     (name "angband")
-    (version "4.1.3")
+    (version "4.2.0")
     (source
      (origin
        (method url-fetch)
@@ -1395,7 +1395,7 @@ that beneath its ruins lay buried an ancient evil.")
                            "/angband-" version ".tar.gz"))
        (sha256
         (base32
-         "0vs0314lbdc6rzxn4jnb7zp6n1p1cdb8r53savadn7k9vbwc80ll"))
+         "0vdm1ymm28wawp94nl1p5q3lhc0k7cnn2kkvvrkfx962gif4kqfk"))
        (modules '((guix build utils)))
        (snippet
         ;; So, some of the sounds/graphics/tilesets are under different
@@ -1409,7 +1409,7 @@ that beneath its ruins lay buried an ancient evil.")
                          (delete-file-recursively lib-subdir)))
                      '("fonts" "icons" "sounds" "tiles"))
            (substitute* "lib/Makefile"
-             ;; And don't try to invoke makefiles in the directories we removed
+             ;; And don't try to invoke makefiles in the directories we removed.
              (("gamedata customize help screens fonts tiles sounds icons user")
               "gamedata customize help screens user"))
            #t))))
@@ -2340,15 +2340,15 @@ on the screen and keyboard to display letters.")
 (define-public manaplus
   (package
     (name "manaplus")
-    (version "1.7.6.10")
+    (version "1.9.3.23")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "http://repo.manaplus.org/manaplus/download/"
+                    "https://repo.manaplus.org/manaplus/download/"
                     version "/manaplus-" version ".tar.xz"))
               (sha256
                (base32
-                "0l7swvpzq20am4w2rsjpp6fsvbjv07il6wbfy45a7h9zsdihmqhl"))))
+                "1ky182p4svwdqm6cf7jbns85hidkhkhq4s17cs2p381f0klapfjz"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -2363,7 +2363,7 @@ on the screen and keyboard to display letters.")
        ("libxml2" ,libxml2)
        ("mesa" ,mesa)
        ("sdl-union" ,(sdl-union))))
-    (home-page "http://manaplus.org")
+    (home-page "https://manaplus.org")
     (synopsis "Client for 'The Mana World' and similar games")
     (description
      "ManaPlus is a 2D MMORPG client for game servers.  It is the only
@@ -2828,7 +2828,7 @@ players.")
     (version "2.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://http.debian.net/debian/pool/main/e/"
+              (uri (string-append "mirror://debian/pool/main/e/"
                                   "einstein/einstein_2.0.dfsg.2.orig.tar.gz"))
               (sha256
                (base32
diff --git a/gnu/packages/genealogy.scm b/gnu/packages/genealogy.scm
index 2db3fdb918..ec9d99400f 100644
--- a/gnu/packages/genealogy.scm
+++ b/gnu/packages/genealogy.scm
@@ -38,7 +38,7 @@
 (define-public gramps
   (package
     (name "gramps")
-    (version "5.0.1")
+    (version "5.0.2")
     (source
      (origin
        (method git-fetch)
@@ -48,7 +48,7 @@
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1jz1fbjj6byndvir7qxzhd2ryirrd5h2kwndxpp53xdc05z1i8g7"))))
+         "0wg743q8ixy5dmwricgkl4zck4109vq5ppmkyi18qjmna9m0aq7r"))))
     (build-system python-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index e295725c51..ca00bb0ffd 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -5962,7 +5962,10 @@ devices using the GNOME desktop.")
     (arguments
      '(#:glib-or-gtk? #t
        #:configure-flags
-       (list "-Dcheese=false")
+       (list "-Dcheese=false"
+             (string-append "-Dgnome_session_libexecdir="
+                            (assoc-ref %build-inputs "gnome-session")
+                            "/libexec"))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-paths
@@ -5970,7 +5973,8 @@ devices using the GNOME desktop.")
              (let ((libc   (assoc-ref inputs "libc"))
                    (tzdata (assoc-ref inputs "tzdata"))
                    (libgnomekbd (assoc-ref inputs "libgnomekbd"))
-                   (nm-applet   (assoc-ref inputs "network-manager-applet")))
+                   (nm-applet   (assoc-ref inputs "network-manager-applet"))
+                   (gnome-desktop (assoc-ref inputs "gnome-desktop")))
                (substitute* "panels/datetime/tz.h"
                  (("/usr/share/zoneinfo/zone.tab")
                   (string-append tzdata "/share/zoneinfo/zone.tab")))
@@ -5990,6 +5994,10 @@ devices using the GNOME desktop.")
                (substitute* '("panels/user-accounts/run-passwd.c")
                  (("/usr/bin/passwd")
                   "/run/setuid-programs/passwd"))
+               (substitute* "panels/info/cc-info-overview-panel.c"
+                 (("DATADIR \"/gnome/gnome-version.xml\"")
+                  (string-append "\"" gnome-desktop
+                                 "/share/gnome/gnome-version.xml\"")))
                #t))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
@@ -6009,6 +6017,7 @@ devices using the GNOME desktop.")
        ("gnome-desktop" ,gnome-desktop)
        ("gnome-online-accounts" ,gnome-online-accounts)
        ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
+       ("gnome-session" ,gnome-session)
        ("gnome-settings-daemon" ,gnome-settings-daemon)
        ("grilo" ,grilo)
        ("ibus" ,ibus)
@@ -8306,3 +8315,35 @@ advanced image management tool")
     (description "The aim of the handy library is to help with developing user
 intefaces for mobile devices using GTK+.")
     (license license:lgpl2.1+)))
+
+(define-public libgit2-glib
+  (package
+    (name "libgit2-glib")
+    (version "0.28.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0a0g7aw66rfgnqr4z7fgbk5zzcjq66m4rp8v4val3a212941h0g7"))))
+    (build-system meson-build-system)
+    (native-inputs
+     `(("glib:bin" ,glib "bin") ;; For glib-mkenums
+       ("gobject-introspection" ,gobject-introspection)
+       ("intltool" ,intltool)
+       ("libssh2" ,libssh2)
+       ("pkg-config" ,pkg-config)
+       ("python-pygobject" ,python-pygobject)
+       ("python-wrapper" ,python-wrapper)
+       ("vala" ,vala)))
+    (inputs
+     `(("glib" ,glib)
+       ("libgit2" ,libgit2)))
+    (synopsis "GLib wrapper around the libgit2 Git access library")
+    (description "libgit2-glib is a GLib wrapper library around the libgit2 Git
+access library.  It only implements the core plumbing functions, not really the
+higher level porcelain stuff.")
+    (home-page "https://wiki.gnome.org/Projects/Libgit2-glib")
+    (license license:gpl2+)))
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 1eedcfec7b..10b4ad57ad 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2018 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2019 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2019 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -104,6 +105,7 @@
                "-DWITH_INSTALL_PORTABLE=OFF"
                "-DWITH_JACK=ON"
                "-DWITH_MOD_OCEANSIM=ON"
+               "-DWITH_OPENSUBDIV=ON"
                "-DWITH_PYTHON_INSTALL=OFF"
                (string-append "-DPYTHON_LIBRARY=python" ,python-version "m")
                (string-append "-DPYTHON_LIBPATH=" (assoc-ref %build-inputs "python")
@@ -139,6 +141,7 @@
        ("libx11" ,libx11)
        ("openimageio" ,openimageio)
        ("openexr" ,openexr)
+       ("opensubdiv" ,opensubdiv)
        ("ilmbase" ,ilmbase)
        ("openjpeg" ,openjpeg)
        ("libjpeg" ,libjpeg)
@@ -972,3 +975,47 @@ your terminal.  It comes bundled with predefined styles:
 look.  The result can be uploaded on any web server without additional
 requirements.")
     (license license:gpl2+)))
+
+(define-public opensubdiv
+  (package
+    (name "opensubdiv")
+    (version "3_4_0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/PixarAnimationStudios/OpenSubdiv")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0cippg6aqc5dlya1cmh3908pwssrg52fwgyylnvz5343yrxmgk12"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-before 'configure 'set-glew-location
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (setenv "GLEW_LOCATION" (assoc-ref inputs "glew"))
+                      #t))
+                  (add-before 'check 'start-xorg-server
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      ;; The test suite requires a running X server.
+                      (system (string-append (assoc-ref inputs "xorg-server")
+                                             "/bin/Xvfb :1 &"))
+                      (setenv "DISPLAY" ":1")
+                      #t)))))
+    (native-inputs
+     `(("xorg-server" ,xorg-server)))
+    (inputs
+     `(("glew" ,glew)
+       ("libxrandr" ,libxrandr)
+       ("libxcursor" ,libxcursor)
+       ("libxinerama" ,libxinerama)
+       ("libxi" ,libxi)
+       ("zlib" ,zlib)
+       ("glfw" ,glfw)))
+    (home-page "http://graphics.pixar.com/opensubdiv/")
+    (synopsis "High performance subdivision surface evaluation")
+    (description "OpenSubdiv is a set of libraries that implement high
+performance subdivision surface (subdiv) evaluation on massively parallel CPU
+and GPU architectures.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 8c36658361..16e30b9de7 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -916,7 +916,7 @@ tracker's SOAP service, such as @url{https://bugs.gnu.org}.")
              version ".tar.lz"))
        (sha256
         (base32
-         "05pm0rwdxhjdlpmvhn0kyfslph6j5m1gv76givs0hshb30nirl2x"))))
+         "0zgvh2329zrclxfb1lh7dnqrq46jj77l0lx7j9y6y3xgbhd2d9l0"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 8787f10789..b544190895 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -8361,7 +8361,7 @@ generated SQL and optimize it for your backend.")
 (define-public shellcheck
   (package
     (name "shellcheck")
-    (version "0.5.0")
+    (version "0.7.0")
     (source
      (origin
        (method url-fetch)
@@ -8369,12 +8369,12 @@ generated SQL and optimize it for your backend.")
              "https://hackage.haskell.org/package/ShellCheck/ShellCheck-"
              version ".tar.gz"))
        (sha256
-        (base32
-         "0z1hscbr11hwkq8k1v0vaa947hb9m6k4cm831jk1gpj8dxrk151b"))
+        (base32 "1vx895cp5k5h0680xfwj74lk97m9y627n965x6srds0gfnbkzy9s"))
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system haskell-build-system)
     (inputs
      `(("ghc-aeson" ,ghc-aeson)
+       ("ghc-diff" ,ghc-diff)
        ("ghc-quickcheck" ,ghc-quickcheck)
        ("ghc-regex-tdfa" ,ghc-regex-tdfa)))
     (home-page "https://github.com/koalaman/shellcheck")
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index e708e1366c..b3972a2b76 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
@@ -36,10 +36,13 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages geo)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
@@ -58,13 +61,16 @@
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages serialization)
+  #:use-module (gnu packages tbb)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages video)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
-  #:use-module (ice-9 match))
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1))
 
 (define-public dcmtk
   (package
@@ -212,6 +218,22 @@ a suite of 3D interaction widgets, supports parallel processing, and
 integrates with various databases on GUI toolkits such as Qt and Tk.")
     (license license:bsd-3)))
 
+;; itksnap needs an older variant of VTK.
+(define-public vtk-6
+  (package (inherit vtk)
+    (version "6.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://vtk.org/files/release/"
+                                  (version-major+minor version)
+                                  "/VTK-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0pla1r5mvkgl4sl213gfdhzrypdgai0h3z5mfgm6p9jz9hsr794j"))))
+    (inputs
+     `(("jsoncpp" ,jsoncpp-for-tensorflow)
+       ,@(alist-delete "jsoncpp" (package-inputs vtk))))))
+
 (define-public opencv
   (package
     (name "opencv")
@@ -517,3 +539,305 @@ the VIPS image processing library.  It's a little like a spreadsheet: you
 create a set of formula connecting your objects together, and on a change nip2
 recalculates.")
     (license license:gpl2+)))
+
+(define-public vxl
+  (package
+    (name "vxl")
+    (version "2.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/vxl/vxl.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0949hw57szq8943f1whwqaz591xjmb19kj803hcv74hdai2b0ycg"))
+       (modules '((guix build utils)))
+       ;; TODO: vxl includes an old version of dcmtk.  It won't build with
+       ;; version 3.6.x.
+       (snippet
+        '(begin
+           (for-each delete-file-recursively
+                     '("v3p/bzlib/"
+                       "v3p/geotiff/"
+                       "v3p/jpeg/"
+                       "v3p/png/"
+                       "v3p/tiff/"
+                       "v3p/zlib/"))
+           (substitute* "v3p/CMakeLists.txt"
+             (("add_subdirectory\\((tiff|png|jpeg|zlib|bzlib|geotiff)\\)")
+              ""))
+           #t))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("libgeotiff" ,libgeotiff)
+       ("libtiff" ,libtiff)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("zlib" ,zlib)))
+    (home-page "https://github.com/vxl/vxl/")
+    (synopsis "Collection of C++ libraries for computer vision")
+    (description "VXL (the Vision-something-Libraries) is a collection of C++
+libraries designed for computer vision research and implementation.")
+    (license license:bsd-3)))
+
+(define-public vxl-1
+  (package (inherit vxl)
+    (name "vxl")
+    (version "1.18.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/vxl/vxl.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1g4mr2cc58jwm0vasscbd4y5380wj3ahkvq121z4gs83fhavvxgz"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (for-each delete-file-recursively
+                     '("v3p/bzlib/"
+                       "v3p/geotiff/"
+                       "v3p/png/"
+                       "v3p/tiff/"
+                       "v3p/zlib/"))
+           (substitute* "v3p/CMakeLists.txt"
+             (("add_subdirectory\\((tiff|png|jpeg|zlib|bzlib|geotiff)\\)")
+              ""))
+           #t))))
+    (arguments
+     `(#:configure-flags
+       ;; Needed for itk-snap
+       (list "-DVNL_CONFIG_LEGACY_METHODS=ON")))))
+
+(define-public insight-toolkit
+  (package
+    (name "insight-toolkit")
+    (version "5.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/InsightSoftwareConsortium/ITK/"
+                           "releases/download/v" version "/InsightToolkit-"
+                           version ".tar.xz"))
+       (sha256
+        (base32 "0bs63mk4q8jmx38f031jy5w5n9yy5ng9x8ijwinvjyvas8cichqi"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f            ; tests require network access and external data
+       #:configure-flags
+       '("-DITK_USE_GPU=ON"
+         "-DITK_USE_SYSTEM_LIBRARIES=ON"
+         "-DITK_USE_SYSTEM_GOOGLETEST=ON"
+         "-DITK_BUILD_SHARED=ON"
+         ;; This prevents "GTest::GTest" from being added to the ITK_LIBRARIES
+         ;; variable in the installed CMake files.  This is necessary as other
+         ;; packages using insight-toolkit could not be configured otherwise.
+         "-DGTEST_ROOT=gtest")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'do-not-tune
+           (lambda _
+             (substitute* "CMake/ITKSetStandardCompilerFlags.cmake"
+               (("-mute=native") ""))
+             #t)))))
+    (inputs
+     `(("eigen" ,eigen)
+       ("expat" ,expat)
+       ("fftw" ,fftw)
+       ("fftwf" ,fftwf)
+       ("hdf5" ,hdf5)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)
+       ("mesa" ,mesa-opencl)
+       ("perl" ,perl)
+       ("python" ,python)
+       ("tbb" ,tbb)
+       ("vxl" ,vxl-1)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("googletest" ,googletest)
+       ("pkg-config" ,pkg-config)))
+    (home-page "https://github.com/InsightSoftwareConsortium/ITK/")
+    (synopsis "Scientific image processing, segmentation and registration")
+    (description "The Insight Toolkit (ITK) is a toolkit for N-dimensional
+scientific image processing, segmentation, and registration.  Segmentation is
+the process of identifying and classifying data found in a digitally sampled
+representation.  Typically the sampled representation is an image acquired
+from such medical instrumentation as CT or MRI scanners.  Registration is the
+task of aligning or developing correspondences between data.  For example, in
+the medical environment, a CT scan may be aligned with a MRI scan in order to
+combine the information contained in both.")
+    (license license:asl2.0)))
+
+(define-public insight-toolkit-4
+  (package (inherit insight-toolkit)
+    (version "4.13.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/InsightSoftwareConsortium/ITK/"
+                           "releases/download/v" version "/InsightToolkit-"
+                           version ".tar.xz"))
+       (sha256
+        (base32 "19cgfpd63gqrvc3m27m394gy2d7w79g5y6lvznb5qqr49lihbgns"))))
+    (arguments
+     `(#:tests? #f            ; tests require network access and external data
+       #:configure-flags
+       '("-DITKV3_COMPATIBILITY=ON"     ; needed for itk-snap
+         "-DITK_USE_GPU=ON"
+         "-DITK_USE_SYSTEM_LIBRARIES=ON"
+         "-DITK_USE_SYSTEM_GOOGLETEST=ON"
+         "-DITK_USE_SYSTEM_VXL=ON")))))
+
+(define-public insight-toolkit-4.12
+  (package (inherit insight-toolkit-4)
+    (version "4.12.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/itk/itk/4.12/"
+                           "InsightToolkit-" version ".tar.xz"))
+       (sha256
+        (base32 "1qw9mxbh083siljygahl4gdfv91xvfd8hfl7ghwii19f60xrvn2w"))))))
+
+(define-public itk-snap
+  (package
+    (name "itk-snap")
+    (version "3.8.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.code.sf.net/p/itk-snap/src")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "15i5ixpryfrbf3vrrb5rici8fb585f25k0v1ljds16bp1f1msr4q"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "-DSNAP_VERSION_GIT_SHA1=release"
+             "-DSNAP_VERSION_GIT_BRANCH=release"
+             "-DSNAP_VERSION_GIT_TIMESTAMP=0"
+             "-DSNAP_PACKAGE_QT_PLUGINS=OFF"
+             "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
+             "-DCMAKE_CXX_FLAGS=-std=gnu++11 -fpermissive")
+       #:phases
+       (modify-phases %standard-phases
+         ;; During the installation phase all libraries provided by all
+         ;; dependencies will be copied to the lib directory.  That's insane,
+         ;; so we disable this.
+         (add-after 'unpack 'do-not-copy-dependencies
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("install_qt5_executable\
+\\(\\$\\{SNAP_MAIN_INSTALL_DIR\\}/\\$\\{SNAP_EXE\\}\\)")
+                ""))
+             #t))
+         (add-after 'unpack 'disable-gui-tests
+           (lambda _
+             ;; The GUI tests just time out.
+             (substitute* "CMakeLists.txt"
+               (("  (Workspace|DiffSpace|ProbeIntensity|RegionCompetition\
+|RandomForest|RandomForestBailOut)")
+                ""))
+             #t))
+         (add-after 'unpack 'make-reproducible
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("TODAY\\(SNAP_VERSION_COMPILE_DATE\\)")
+                "SET(SNAP_VERSION_COMPILE_DATE \"(removed for reproducibility)\")"))
+             #t))
+         (add-after 'unpack 'prepare-submodules
+           (lambda* (#:key inputs #:allow-other-keys)
+             (rmdir "Submodules/c3d")
+             (copy-recursively (assoc-ref inputs "c3d-src")
+                               "Submodules/c3d")
+             (substitute* '("Submodules/c3d/adapters/BiasFieldCorrectionN4.cxx"
+                            "Submodules/c3d/adapters/ApplyMetric.cxx")
+               (("vcl_") "std::"))
+             (rmdir "Submodules/greedy")
+             (symlink (assoc-ref inputs "greedy-src")
+                      "Submodules/greedy")
+             #t))
+         (add-after 'unpack 'fix-includes
+           (lambda _
+             (substitute* "GUI/Model/RegistrationModel.cxx"
+               (("<vnl_symmetric_eigensystem.h>")
+                "<vnl/algo/vnl_symmetric_eigensystem.h>"))
+             #t))
+         (add-before 'check 'prepare-tests
+           (lambda _
+             ;; Needed by at least one test.
+             (setenv "HOME" "/tmp")
+             #t))
+         (add-after 'install 'wrap-executable
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-program (string-append out "/bin/itksnap")
+                 `("QT_PLUGIN_PATH" ":" prefix
+                   ,(map (lambda (label)
+                           (string-append (assoc-ref inputs label)
+                                          "/lib/qt5/plugins"))
+                         '("qtbase" "qtdeclarative"))))
+               #t))))))
+    (inputs
+     `(("curl" ,curl)
+       ("fftw" ,fftw)
+       ("fftwf" ,fftwf)
+       ("glu" ,glu)
+       ("hdf5" ,hdf5)
+       ("mesa" ,mesa-opencl)
+       ;; This package does not build with either insight-toolkit 5.0.0 and
+       ;; not with 4.13.  It really needs to be 4.12.
+       ("itk" ,insight-toolkit-4.12)
+       ("vtk" ,vtk-6)
+       ("qtbase" ,qtbase)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qttools" ,qttools)
+       ("vxl" ,vxl-1)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("googletest" ,googletest)
+       ("pkg-config" ,pkg-config)
+       ("c3d-src"
+        ,(let* ((commit "f521358db26e00002c911cc47bf463b043942ad3")
+                (revision "1")
+                (version (git-version "0" revision commit)))
+           (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/pyushkevich/c3d.git")
+                   (commit commit)))
+             (file-name (git-file-name "c3d" version))
+             (sha256
+              (base32
+               "0kyv3rxrxwr8c3sa9zv01lsnhk95b27gx1s870k3yi8qp52h7bx3")))))
+       ;; We are using an arbitrary commit from 2017 because the latest
+       ;; version breaks the build...
+       ("greedy-src"
+        ,(let* ((commit "97e340f7e8e66597599144947775e6039e79a0d3")
+                (revision "1")
+                (version (git-version "0" revision commit)))
+           (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/pyushkevich/greedy.git")
+                   (commit commit)))
+             (file-name (git-file-name "greedy" version))
+             (sha256
+              (base32
+               "0k5bc9za4jrc8z9dj08z1rkcp5xf0gnd1d2jmi1w9ny4vxh2q2ab")))))))
+    (home-page "https://sourceforge.net/p/itk-snap/")
+    (synopsis "Medical image segmentation")
+    (description "ITK-SNAP is a tool for segmenting anatomical structures in
+medical images.  It provides an automatic active contour segmentation
+pipeline, along with supporting a manual segmentation toolbox.  ITK-SNAP has a
+full-featured UI aimed at clinical researchers.")
+    ;; This includes the submodules greedy and c3d.
+    (license license:gpl3+)))
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index d33a9857c9..51062df7a3 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
@@ -131,6 +131,11 @@ actions.")
        `( ;; Enable support for a "map" pane using GPS data.
          #:configure-flags '("--enable-map")
 
+         ;; Parallel builds fail with something like:
+         ;;   image-load.c:143:9: error: ‘gq_marshal_VOID__INT_INT_INT_INT’ undeclared
+         ;; due to unexpressed makefile dependencies.
+         #:parallel-build? #f
+
          #:phases
          (modify-phases %standard-phases
            (add-before 'bootstrap 'pre-bootstrap
@@ -496,14 +501,14 @@ preloading.")
 (define-public chafa
   (package
     (name "chafa")
-    (version "1.0.1")
+    (version "1.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hpjansson.org/chafa/releases/chafa-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "00cf2z52az0z6bzc3hfm4l8infipy5ck410wqmbaybd2csjr3m29"))))
+                "1hj4vdyczby8h52ff23qxl8ng18p5jy549idngpiddwszf5s4drz"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 8a5d5724a8..48dcaaa76e 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -339,8 +339,8 @@ as Alfresco or Nuxeo.")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "https://dev-www.libreoffice.org/src/" name "/"
-                          name "-" version ".tar.xz"))
+      (uri (string-append "https://dev-www.libreoffice.org/src/libabw/"
+                          "libabw-" version ".tar.xz"))
       (sha256 (base32
                "11949iscdb99f2jplxjd39282jxcrf2fw0sqbh5dl7gqb96r8whb"))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index f2e36ee7b4..f15715ee40 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -349,26 +349,26 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                         "linux-" version ".tar.xz"))
     (sha256 hash)))
 
-(define-public linux-libre-5.2-version "5.2.8")
+(define-public linux-libre-5.2-version "5.2.9")
 (define-public linux-libre-5.2-pristine-source
   (let ((version linux-libre-5.2-version)
-        (hash (base32 "0dv91zfjkil29lp2l35lswkrhrqbc4kjh965ciaqwih1rh3cs9x1")))
+        (hash (base32 "1rnlnphw9rih4qhdld9ic5lnj5jh4vy5nqbj9lqwv9bc615jmw5n")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.2)))
 
-(define-public linux-libre-4.19-version "4.19.66")
+(define-public linux-libre-4.19-version "4.19.67")
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "0r6vzarmi77fhivd1n6f667sgcw8zd54ykmhmp6rd52bbkhsp0f9")))
+        (hash (base32 "00m5k0nfcvgff70686rbhn3w8c9wc3jxqvyddw40lylaqdh3s72s")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.138")
+(define-public linux-libre-4.14-version "4.14.139")
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "0yw39cqpk6g42q0xcv2aq8yyzsi0kzx9nvlfbw0iyg58wcfvsl7j")))
+        (hash (base32 "0hkhwcbxg6bry13w9kspx48b10274w6pgv200wh91fjd8jax8qlc")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
@@ -3928,6 +3928,49 @@ repair and easy administration.")
 from the btrfs-progs package.  It is meant to be used in initrds.")
     (license (package-license btrfs-progs))))
 
+(define-public compsize
+  (package
+    (name "compsize")
+    (version "1.3")
+    (home-page "https://github.com/kilobyte/compsize")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32 "1c69whla844nwis30jxbj00zkpiw3ccndhkmzjii8av5358mjn43"))
+              (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("btrfs-progs" ,btrfs-progs)))
+    (arguments
+     `(#:tests? #f                      ; No tests.
+       #:make-flags (list "CC=gcc")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (install-file "compsize" (string-append out "/bin"))
+               (install-file "compsize.8" (string-append out "/share/man/man8"))))))))
+    (synopsis "Find compression type/ratio on Btrfs files")
+    (description "@command{compsize} takes a list of files (given as
+arguments) on a Btrfs file system and measures used compression types and
+effective compression ratio, producing a report.
+
+A directory has no extents but has a (recursive) list of files.  A non-regular
+file is silently ignored.
+
+As it makes no sense to talk about compression ratio of a partial extent,
+every referenced extent is counted whole, exactly once -- no matter if you use
+only a few bytes of a 1GB extent or reflink it a thousand times.  Thus, the
+uncompressed size will not match the number given by @command{tar} or
+@command{du}.  On the other hand, the space used should be accurate (although
+obviously it can be shared with files outside our set).")
+    (license license:gpl2+)))
+
 (define-public f2fs-tools-1.7
   (package
     (name "f2fs-tools")
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index d2bed231bd..a42369ba06 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -5319,7 +5319,7 @@ port within a range.")
 (define-public txr
   (package
     (name "txr")
-    (version "216")
+    (version "223")
     (source
      (origin
        (method url-fetch)
@@ -5329,7 +5329,7 @@ port within a range.")
        (patches (search-patches "txr-shell.patch"))
        (sha256
         (base32
-         "07cxdpc9zsqd0c2668g00dqjpd6zc4mfdn74aarr6d2hpzdhh937"))))
+         "0109q8idqggba3kx58dpm5ccfpdrki68npkcxm18p5ga24611fcv"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("cc=gcc")
@@ -5343,7 +5343,7 @@ port within a range.")
                       #t))
                   (replace 'check
                     (lambda _
-                      (zero? (system* "make" "tests")))))))
+                      (invoke "make" "tests"))))))
     (native-inputs
      `(("bison" ,bison)
        ("flex" ,flex)))
diff --git a/gnu/packages/lxqt.scm b/gnu/packages/lxqt.scm
index a8699b3d09..e72f5b82d9 100644
--- a/gnu/packages/lxqt.scm
+++ b/gnu/packages/lxqt.scm
@@ -1245,6 +1245,39 @@ easily publishing them on internet image hosting services.")
     (license license:gpl2+)))
 
 
+(define-public lxqt-archiver
+  (package
+    (name "lxqt-archiver")
+    (version "0.0.96")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url (string-append "https://github.com/lxqt/" name ".git"))
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "09rw774vxj96wcpxxncz6nr9bmw7l4l0kwylmz1saq6rpa2yvn2i"))))
+    (build-system cmake-build-system)
+    (inputs
+      `(("glib" ,glib)
+        ("json-glib" ,json-glib)
+        ("libfm-qt" ,libfm-qt)
+        ("qtbase" ,qtbase)
+        ("qtx11extras" ,qtx11extras)))
+    (native-inputs
+      `(("pkg-config" ,pkg-config)
+        ("lxqt-build-tools" ,lxqt-build-tools)
+        ("qttools" ,qttools)))
+    (arguments
+      '(#:tests? #f))
+    (home-page "https://lxqt.org/")
+    (synopsis "Simple & lightweight desktop-agnostic Qt file archiver")
+    (description
+     "This package provides a Qt graphical interface to archiving programs
+like @command{tar} and @command{zip}.")
+    (license license:gpl2+)))
+
 ;; The LXQt Desktop Environment
 
 (define-public lxqt
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index b81b15d80c..bb3bf2bfb5 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -998,18 +998,17 @@ and search library.")
 (define-public getmail
   (package
     (name "getmail")
-    (version "5.6")
+    (version "5.14")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://pyropus.ca/software/getmail/old-versions/"
-                           name "-" version ".tar.gz"))
+                           "getmail-" version ".tar.gz"))
        (sha256
-        (base32
-         "16nmvj80szr6yvcxxgmxn2lxqpjqqj4xg5a0b66zhvck6j42q3a6"))))
+        (base32 "1hcrd9h4g12f5gvl1djsbchcjry02ghq4icdr897s8v48pkrzagk"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f ; no tests
+     `(#:tests? #f                      ; no tests
        #:python ,python-2))
     (home-page "http://pyropus.ca/software/getmail/")
     (synopsis "Mail retriever")
@@ -2270,14 +2269,14 @@ e-mails with other systems speaking the SMTP protocol.")
 (define-public opensmtpd-next
   (package
     (name "opensmtpd-next")
-    (version "6.4.1p2")
+    (version "6.4.2p1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.opensmtpd.org/archives/"
                            "opensmtpd-" version ".tar.gz"))
        (sha256
-        (base32 "0cppqlx4fk6l8rbim5symh2fm1kzshf421256g596j6c9f9q96xn"))))
+        (base32 "0pgv080ai7d98l9340jadp9wjiaqj2qvgpqhilcz0kps2mdiawbd"))))
     (build-system gnu-build-system)
     (inputs
      `(("bdb" ,bdb)
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index d6005c1bd3..42e1918597 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -224,6 +224,18 @@ Linux kernel and C library interfaces employed by user-space programs.")
 automatically.")
     (license gpl3+)))
 
+(define-public help2man/latest
+  (package
+    (inherit help2man)
+    (version "1.47.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/help2man/help2man-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "123vsimgx8zq1h077sbyh3bd0hbmlc3wih2231wwh133z1bv51ar"))))))
+
 (define-public scdoc
   (package
    (name "scdoc")
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 7ece795d60..7a04aa979e 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -2967,7 +2967,7 @@ point numbers.")
 (define-public wxmaxima
   (package
     (name "wxmaxima")
-    (version "19.05.7")
+    (version "19.08.0")
     (source
      (origin
        (method git-fetch)
@@ -2977,7 +2977,7 @@ point numbers.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0zaz71fh156b9inrxf86scnix247al5pl9v18cxhjxcm0lanqxdp"))))
+         "028g4g2081vsgslbdliskfy5q2wknvknw89lk3zp89py6wranxas"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)))
diff --git a/gnu/packages/mingw.scm b/gnu/packages/mingw.scm
index 3e96f2c475..017f9453ab 100644
--- a/gnu/packages/mingw.scm
+++ b/gnu/packages/mingw.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Carl Dong <contact@carldong.me>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,56 +32,56 @@
   #:use-module (guix utils)
   #:use-module (ice-9 match))
 
-(define %mingw-triplet
-  "i686-w64-mingw32")
-
-(define-public mingw-w64
-  (package
-    (name "mingw-w64")
-    (version "5.0.4")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://sourceforge.net/projects/mingw-w64/files/mingw-w64/"
-                    "mingw-w64-release/mingw-w64-v" version ".tar.bz2"))
-              (sha256
-               (base32 "00zq3z1hbzd5yzmskskjg79xrzwsqx7ihyprfaxy4hb897vf29sm"))
-              (patches (search-patches "mingw-w64-5.0rc2-gcc-4.9.3.patch"))))
-    (native-inputs `(("xgcc-core" ,(cross-gcc %mingw-triplet))
-                     ("xbinutils" ,(cross-binutils %mingw-triplet))))
-    (build-system gnu-build-system)
-    (search-paths
-     (list (search-path-specification
-            (variable "CROSS_C_INCLUDE_PATH")
-            (files '("include" "i686-w64-mingw32/include")))
-           (search-path-specification
-            (variable "CROSS_LIBRARY_PATH")
-            (files
-             '("lib" "lib64" "i686-w64-mingw32/lib" "i686-w64-mingw32/lib64")))))
-    (arguments
-     `(#:configure-flags '("--host=i686-w64-mingw32")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'setenv
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((xgcc-core (assoc-ref inputs "xgcc-core"))
-                   (mingw-headers (string-append (getcwd) "/mingw-w64-headers")))
-               (setenv "CPP"
-                       (string-append xgcc-core "/bin/i686-w64-mingw32-cpp"))
-               (setenv "CROSS_C_INCLUDE_PATH"
-                       (string-append
-                        mingw-headers
-                        ":" mingw-headers "/include"
-                        ":" mingw-headers "/crt"
-                        ":" mingw-headers "/defaults/include"
-                        ":" mingw-headers "/direct-x/include"))))))
-       #:make-flags (list "DEFS=-DHAVE_CONFIG_H -D__MINGW_HAS_DXSDK=1")
-       #:tests? #f ; compiles and includes glibc headers
-       #:strip-binaries? #f))
-    (home-page "https://mingw-w64.org")
-    (synopsis "Minimalist GNU for Windows")
-    (description
-     "Minimalist GNU for Windows (@dfn{MinGW}) is a complete software
+(define-public (make-mingw-w64 machine)
+  (let ((triplet (string-append machine "-" "w64-mingw32")))
+    (package
+      (name (string-append "mingw-w64" "-" machine))
+      (version "5.0.4")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append
+                      "https://sourceforge.net/projects/mingw-w64/files/mingw-w64/"
+                      "mingw-w64-release/mingw-w64-v" version ".tar.bz2"))
+                (sha256
+                 (base32 "00zq3z1hbzd5yzmskskjg79xrzwsqx7ihyprfaxy4hb897vf29sm"))
+                (patches (search-patches "mingw-w64-5.0rc2-gcc-4.9.3.patch"))))
+      (native-inputs `(("xgcc-core" ,(cross-gcc triplet))
+                       ("xbinutils" ,(cross-binutils triplet))))
+      (build-system gnu-build-system)
+      (search-paths
+       (list (search-path-specification
+              (variable "CROSS_C_INCLUDE_PATH")
+              (files `("include" ,(string-append triplet "/include"))))
+             (search-path-specification
+              (variable "CROSS_LIBRARY_PATH")
+              (files
+               `("lib" "lib64"
+                 ,(string-append triplet "/lib")
+                 ,(string-append triplet "/lib64"))))))
+      (arguments
+       `(#:configure-flags '(,(string-append "--host=" triplet))
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'configure 'setenv
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((xgcc-core (assoc-ref inputs "xgcc-core"))
+                     (mingw-headers (string-append (getcwd) "/mingw-w64-headers")))
+                 (setenv "CPP"
+                         (string-append xgcc-core ,(string-append "/bin/" triplet "-cpp")))
+                 (setenv "CROSS_C_INCLUDE_PATH"
+                         (string-append
+                          mingw-headers
+                          ":" mingw-headers "/include"
+                          ":" mingw-headers "/crt"
+                          ":" mingw-headers "/defaults/include"
+                          ":" mingw-headers "/direct-x/include"))))))
+         #:make-flags (list "DEFS=-DHAVE_CONFIG_H -D__MINGW_HAS_DXSDK=1")
+         #:tests? #f ; compiles and includes glibc headers
+         #:strip-binaries? #f))
+      (home-page "https://mingw-w64.org")
+      (synopsis "Minimalist GNU for Windows")
+      (description
+       "Minimalist GNU for Windows (@dfn{MinGW}) is a complete software
 development environment for creating native Microsoft Windows applications.
 
 It includes a set of Windows-specific header files and static import libraries
@@ -89,4 +90,12 @@ runtime dynamic-link libraries (@dfn{DLL}s).
 
 Mingw-w64 is an advancement of the original mingw.org project and provides
 several new APIs such as DirectX and DDK, and 64-bit support.")
-    (license license:fdl1.3+)))
+      (license license:fdl1.3+))))
+
+(define-public mingw-w64-i686
+  (make-mingw-w64 "i686"))
+
+(define-public mingw-w64-x86_64
+  (make-mingw-w64 "x86_64"))
+
+(define-public mingw-w64 mingw-w64-i686)
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index e8070451c1..9758675b66 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -90,7 +90,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
 (define-public mpd
   (package
     (name "mpd")
-    (version "0.21.13")
+    (version "0.21.14")
     (source (origin
               (method url-fetch)
               (uri
@@ -99,7 +99,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
                               "/mpd-" version ".tar.xz"))
               (sha256
                (base32
-                "1sjyhmq50nlccwmd8xn7m0bk8xvyixvfyr24v9dy3g86hhk0pdwm"))))
+                "0iknnm9xvwfgk8h82hjwrmbijpk9l0dgap0794c2nyg8i66qlb0y"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Ddocumentation=true"))) ;the default is 'false'...
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 23a6f3b57e..b6d09d14d7 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -1535,7 +1535,7 @@ reverb effects.")
 (define-public setbfree
   (package
     (name "setbfree")
-    (version "0.8.8")
+    (version "0.8.9")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1544,7 +1544,7 @@ reverb effects.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "15dr1nyj69wc9jnjq5z8ril90a3c0mcrii4zjyz0z3h7dhia3382"))))
+                "1lpsa64xvwa9xbbp8zcwxy5w0daffc7fziny2pizabqh7m9xqjl2"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no "check" target
@@ -1782,7 +1782,7 @@ export.")
 (define-public pd
   (package
     (name "pd")
-    (version "0.49-0")
+    (version "0.50-0")
     (source (origin
               (method url-fetch)
               (uri
@@ -1790,10 +1790,10 @@ export.")
                               version ".src.tar.gz"))
               (sha256
                (base32
-                "18rzqbpgnnvyslap7k0ly87aw1bbxkb0rk5agpr423ibs9slxq6j"))))
+                "0hg4n5b55f650qsc0mjx559072dp7vfza7w0pvk6rk2l831cvsps"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; no "check" target
+     `(#:tests? #f                      ; no "check" target
        #:configure-flags
        (list
         "--enable-jack"
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 813bbb8c81..ee7d65fc06 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -29,6 +29,7 @@
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -549,15 +550,14 @@ and up to 1 Mbit/s downstream.")
 (define-public whois
   (package
     (name "whois")
-    (version "5.5.0")
+    (version "5.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://debian/pool/main/w/whois/"
-                           name "_" version ".tar.xz"))
+                           "whois_" version ".tar.xz"))
        (sha256
-        (base32
-         "0gbg9fis05zf2fl4264jplbphy75l50k3g92cz6mkmbsklrn7v34"))))
+        (base32 "10mc7iqhdnvd1kk8gnnhihd5ga2rw3sz69n3nd6x8fb65qpq13gf"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no test suite
@@ -945,6 +945,82 @@ attacking, testing, and cracking.  All tools are command-line driven, which
 allows for heavy scripting.")
     (license (list license:gpl2+ license:bsd-3))))
 
+(define-public pixiewps
+  (package
+    (name "pixiewps")
+    (version "1.4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/wiire-a/pixiewps/releases/"
+                    "download/v" version "/" name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "07nym6bqml0k9v29vnj003nrgnwrywgjvnljb7cdpsvnwilhbp64"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags
+       (list "CC=gcc"
+             (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)) ; no configure script
+       #:tests? #f)) ; there are no tests
+    (home-page "https://github.com/wiire-a/pixiewps/")
+    (synopsis "Offline brute-force tool for Wi-Fi Protected Setup")
+    (description "Pixiewps implements the pixie-dust attack to brute
+force the Wi-Fi Protected Setup (WPS) PIN by exploiting the low or
+non-existing entropy of some access points.")
+    (license license:gpl3+)))
+
+(define-public reaver
+  (package
+    (name "reaver")
+    (version "1.6.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/t6x/reaver-wps-fork-t6x/releases/"
+                    "download/v" version "/" name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0sva3g0kwgv143n9l3lg4qp5iiqz7nk76nr0hwivsnglbhk9sbil"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       ;; Save session files to current directory instead of /var.
+       (list "--enable-savetocurrent"
+             "--localstatedir=/tmp/dummy") ; prevent creating /var during install
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'change-directory
+           (lambda _
+             (chdir "src")
+             #t))
+         (add-after 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (chdir "../docs")
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (string-append out "/share/doc/" ,name "-" ,version))
+                    (man1 (string-append out "/share/man/man1")))
+               (for-each (lambda (file) (install-file file doc))
+                         (find-files "." "README.*"))
+               (install-file "reaver.1" man1)
+               #t))))
+       #:tests? #f)) ; there are no tests
+    (inputs
+     `(("libpcap" ,libpcap)))
+    (propagated-inputs
+     `(("aircrack-ng" ,aircrack-ng)
+       ("pixiewps" ,pixiewps)))
+    (home-page "https://github.com/t6x/reaver-wps-fork-t6x/")
+    (synopsis "Attack tool for Wi-Fi Protected Setup")
+    (description "Reaver performs a brute force attack against an access
+point's Wi-Fi Protected Setup (WPS) PIN.  Once the PIN is found, the WPA
+passphrase can be recovered and the AP's wireless settings can be
+reconfigured.")
+    (license license:gpl2+)))
+
 (define-public perl-danga-socket
   (package
     (name "perl-danga-socket")
@@ -2287,7 +2363,7 @@ Ethernet and TAP interfaces is supported.  Packet capture is also supported.")
 (define-public hcxtools
   (package
     (name "hcxtools")
-    (version "5.1.6")
+    (version "5.2.0")
     (source
      (origin
        (method git-fetch)
@@ -2295,7 +2371,7 @@ Ethernet and TAP interfaces is supported.  Packet capture is also supported.")
              (url "https://github.com/ZerBea/hcxtools.git")
              (commit version)))
        (sha256
-        (base32 "05sjbmv2wq3nlmammrwxqc62c4sagjjgczzddr1jcqkf6kywzkl8"))
+        (base32 "0k2qlq9hz5zc21nyc6yrnfqzga7hydn5mm0x3rpl2fhkwl81lxcn"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
@@ -2329,7 +2405,7 @@ packets from wireless devices for use with hashcat or John the Ripper.")
 (define-public hcxdumptool
   (package
     (name "hcxdumptool")
-    (version "5.1.5")
+    (version "5.2.0")
     (source
      (origin
        (method git-fetch)
@@ -2337,7 +2413,7 @@ packets from wireless devices for use with hashcat or John the Ripper.")
              (url "https://github.com/ZerBea/hcxdumptool.git")
              (commit version)))
        (sha256
-        (base32 "0xkzdvwpi6dq9wsrn882f2ljb7d5v2bvarq8gs6jm8znfx3y8hi2"))
+        (base32 "0pg1pvg029gm4rj0fj5kcsjb32hixgn4cxsgiir7spkmacf1qm4q"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 546806f284..fce0d0f84d 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -110,8 +110,8 @@
   ;; Note: the 'update-guix-package.scm' script expects this definition to
   ;; start precisely like this.
   (let ((version "1.0.1")
-        (commit "4a54ed774913480c0f8dad3caf0cd627e4fa8ebf")
-        (revision 3))
+        (commit "c902458863d1d341ffd74970b75e69c2bb848183")
+        (revision 4))
     (package
       (name "guix")
 
@@ -127,7 +127,7 @@
                       (commit commit)))
                 (sha256
                  (base32
-                  "14m4a4bn0d5hav6mrks5d7r223knx9dpswgbsc875wgr2921na2h"))
+                  "0w93qjgy9n0qqyij12s7hm7fl4wb6h99bmfril4cqf4ynckpdvbb"))
                 (file-name (string-append "guix-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -292,7 +292,7 @@
       (propagated-inputs
        `(("gnutls" ,gnutls)
          ("guile-gcrypt" ,guile-gcrypt)
-         ("guile-json" ,guile-json-1)
+         ("guile-json" ,guile-json-3)
          ("guile-sqlite3" ,guile-sqlite3)
          ("guile-ssh" ,guile-ssh)
          ("guile-git" ,guile-git)))
@@ -324,7 +324,7 @@ the Nix package manager.")
     (inputs
      `(("gnutls" ,gnutls)
        ("guile-git" ,guile-git)
-       ("guile-json" ,guile-json-1)
+       ("guile-json" ,guile-json-3)
        ("guile-gcrypt" ,guile-gcrypt)
        ,@(fold alist-delete (package-inputs guix)
                '("boot-guile" "boot-guile/i686" "util-linux"))))
diff --git a/gnu/packages/patches/elm-compiler-disable-reactor.patch b/gnu/packages/patches/elm-compiler-disable-reactor.patch
new file mode 100644
index 0000000000..9871b55e8d
--- /dev/null
+++ b/gnu/packages/patches/elm-compiler-disable-reactor.patch
@@ -0,0 +1,71 @@
+commit 20d80e2323b565a36751c9455e535d8f73fa32f7
+Author: Robert Vollmert <rob@vllmrt.net>
+Date:   Fri Jun 14 16:05:47 2019 +0200
+
+    disable reactor
+
+diff --git a/elm.cabal b/elm.cabal
+index c75f9689..ece63c46 100644
+--- a/elm.cabal
++++ b/elm.cabal
+@@ -45,9 +45,6 @@ Executable elm
+         builder/src
+         ui/terminal/src
+ 
+-    other-extensions:
+-        TemplateHaskell
+-
+     Main-Is:
+         Main.hs
+ 
+@@ -56,8 +53,6 @@ Executable elm
+         Develop
+         Develop.Generate.Help
+         Develop.Generate.Index
+-        Develop.StaticFiles
+-        Develop.StaticFiles.Build
+         Diff
+         Init
+         Install
+diff --git a/ui/terminal/src/Develop.hs b/ui/terminal/src/Develop.hs
+index 4b2252e1..7ed7716e 100644
+--- a/ui/terminal/src/Develop.hs
++++ b/ui/terminal/src/Develop.hs
+@@ -23,7 +23,6 @@ import Snap.Util.FileServe
+ import qualified Elm.Project as Project
+ import qualified Develop.Generate.Help as Generate
+ import qualified Develop.Generate.Index as Index
+-import qualified Develop.StaticFiles as StaticFiles
+ import qualified Generate.Output as Output
+ import qualified Json.Encode as Encode
+ import qualified Reporting.Exit as Exit
+@@ -219,16 +218,7 @@ compileToHtmlBuilder mode file =
+ 
+ 
+ serveAssets :: Snap ()
+-serveAssets =
+-  do  file <- getSafePath
+-      case StaticFiles.lookup file of
+-        Nothing ->
+-          pass
+-
+-        Just (content, mimeType) ->
+-          do  modifyResponse (setContentType (mimeType <> ";charset=utf-8"))
+-              writeBS content
+-
++serveAssets = pass
+ 
+ 
+ -- MIME TYPES
+diff --git a/ui/terminal/src/Main.hs b/terminal/src/Main.hs
+index 7000f3ca..2c76965a 100644
+--- a/ui/terminal/src/Main.hs
++++ b/ui/terminal/src/Main.hs
+@@ -39,7 +39,6 @@ main =
+       complex intro outro
+         [ repl
+         , init
+-        , reactor
+         , make
+         , install
+         , bump
diff --git a/gnu/packages/patches/elm-compiler-fix-map-key.patch b/gnu/packages/patches/elm-compiler-fix-map-key.patch
new file mode 100644
index 0000000000..4f05ded530
--- /dev/null
+++ b/gnu/packages/patches/elm-compiler-fix-map-key.patch
@@ -0,0 +1,38 @@
+commit e3512d887df41a8162c3e361171c04beca08415b
+Author: Tom Stejskal <tom.stejskal@gmail.com>
+Date:   Mon Nov 19 20:09:43 2018 +0100
+
+    Fix Map.!: given key is not an element in the map
+
+diff --git a/compiler/src/Elm/Compiler/Type/Extract.hs b/compiler/src/Elm/Compiler/Type/Extract.hs
+index 1aafe1d4..99763392 100644
+--- a/compiler/src/Elm/Compiler/Type/Extract.hs
++++ b/compiler/src/Elm/Compiler/Type/Extract.hs
+@@ -10,6 +10,7 @@ module Elm.Compiler.Type.Extract
+ 
+ 
+ import Data.Map ((!))
++import qualified Data.Map as Map
+ import qualified Data.Maybe as Maybe
+ import qualified Data.Set as Set
+ 
+@@ -134,11 +135,15 @@ extractUnion interfaces (Opt.Global home name) =
+     else
+       let
+         pname = toPublicName home name
+-        unions = I._unions (interfaces ! home)
++        maybeUnions = I._unions <$> Map.lookup home interfaces
+       in
+-      case I.toUnionInternals (unions ! name) of
+-        Can.Union vars ctors _ _ ->
+-          T.Union pname vars <$> traverse extractCtor ctors
++      case Map.lookup name =<< maybeUnions of
++        Just union ->
++          case I.toUnionInternals union of
++            Can.Union vars ctors _ _ ->
++              T.Union pname vars <$> traverse extractCtor ctors
++        Nothing ->
++          return $ T.Union pname [] []
+ 
+ 
+ extractCtor :: Can.Ctor -> Extractor (N.Name, [T.Type])
diff --git a/gnu/packages/patches/elm-compiler-relax-glsl-bound.patch b/gnu/packages/patches/elm-compiler-relax-glsl-bound.patch
new file mode 100644
index 0000000000..3f8be810c2
--- /dev/null
+++ b/gnu/packages/patches/elm-compiler-relax-glsl-bound.patch
@@ -0,0 +1,19 @@
+commit 4c649a5a270aba15cc6a3913c3ad51a293047f40
+Author: Rémi Lefèvre <rlefevre@gmail.com>
+Date:   Mon Sep 3 19:18:54 2018 +0200
+
+    update language-glsl maximum version
+
+diff --git a/elm.cabal b/elm.cabal
+index 48aa84f0..464fe9d5 100644
+--- a/elm.cabal
++++ b/elm.cabal
+@@ -246,7 +246,7 @@ Executable elm
+         http-client >= 0.5 && < 0.6,
+         http-client-tls >= 0.3 && < 0.4,
+         http-types >= 0.9 && < 1.0,
+-        language-glsl >= 0.0.2 && < 0.3,
++        language-glsl >= 0.0.2 && < 0.4,
+         logict,
+         mtl >= 2.2.1 && < 3,
+         network >= 2.4 && < 2.7,
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 496b56f0a2..d87eb9f561 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -24,7 +24,7 @@
 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2017 Mark Meyer <mark@ofosos.org>
 ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
-;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Vagrant Cascadian <vagrant@debian.org>
@@ -1808,13 +1808,13 @@ Python.")
 (define-public python-responses
   (package
     (name "python-responses")
-    (version "0.5.1")
+    (version "0.10.6")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "responses" version))
               (sha256
                (base32
-                "1spcfxixyk9k7pk82jm6zqkwk031s95lh8q0mz7539jrb7269bcc"))))
+                "147pacwkkqy3qf3hr33fnl1xbzgw0zsm3qppvvy9qhq8h069qbah"))))
     (build-system python-build-system)
     (arguments
      `(;; Test suite is not distributed:
@@ -3248,3 +3248,26 @@ Python.")
     (description "This package provides a @command{slufigy} command and
 library to create slugs from unicode strings while keeping it DRY.")
     (license license:expat)))
+
+(define-public python-branca
+  (package
+    (name "python-branca")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "branca" version))
+       (sha256
+        (base32
+         "0pmigd521j2228xf8x34vbx0niwvms7xl7za0lymywj0vydjqxiy"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-jinja2" ,python-jinja2)
+       ("python-six" ,python-six)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/python-visualization/branca")
+    (synopsis "Generate complex HTML+JS pages with Python")
+    (description "Generate complex HTML+JS pages with Python")
+    (license license:expat)))
+
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index c8db4c95ce..4c3ba68851 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -16057,3 +16057,34 @@ one-off scripts.")
 time-or-computationally-expensive properties quick and easy and works in Python
 2 or 3.")
     (license license:bsd-3)))
+
+(define-public python-folium
+  (package
+    (name "python-folium")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "folium" version))
+       (sha256
+        (base32
+         "18fzxijsgrb95r0a8anc9ba5ijyw3nlnv3rpavfbkqa5v878x84f"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-branca" ,python-branca)
+       ("python-jinja2" ,python-jinja2)
+       ("python-numpy" ,python-numpy)
+       ("python-requests" ,python-requests)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/python-visualization/folium")
+    (synopsis "Make beautiful maps with Leaflet.js & Python")
+    (description "@code{folium} makes it easy to visualize data that’s been
+manipulated in Python on an interactive leaflet map.  It enables both the
+binding of data to a map for @code{choropleth} visualizations as well as
+passing rich vector/raster/HTML visualizations as markers on the map.
+
+The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
+Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys.  It
+supports Image, Video, GeoJSON and TopoJSON overlays.")
+    (license license:expat)))
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 1efd2925f1..33a42a2da2 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2019 Mikhail Kirillov <w96k.ru@gmail.com>
+;;; Copyright © 2019 Jelle Licht <jlicht@fsfe.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -8737,3 +8738,72 @@ then check out http://127.0.0.1:1080 to see the mail.")
      "This package provides a pure Ruby library for event-driven IO.")
     (home-page "https://github.com/castwide/backport")
     (license license:expat)))
+
+(define-public ruby-json-schema
+  (package
+    (name "ruby-json-schema")
+    (version "2.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "json-schema" version))
+       (sha256
+        (base32
+         "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             (invoke "gem" "build" ".gemspec"))))))
+    (propagated-inputs
+     `(("ruby-addressable" ,ruby-addressable)))
+    (synopsis "Ruby JSON Schema Validator")
+    (description "This library provides Ruby with an interface for validating
+JSON objects against a JSON schema conforming to JSON Schema Draft 4.  Legacy
+support for JSON Schema Draft 3, JSON Schema Draft 2, and JSON Schema Draft 1
+is also included.")
+    (home-page "https://github.com/ruby-json-schema/json-schema")
+    (license license:expat)))
+
+(define-public swagger-diff
+  (package
+    (name "swagger-diff")
+    (version "1.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "swagger-diff" version))
+       (sha256
+        (base32
+         "1hxx50nga1bqn254iqjcdwkc9c72364ks9lyjyw10ajz0l0ly7sn"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         ;; Don't run or require rubocop, the code linting tool, as this is a
+         ;; bit unnecessary.
+         (add-after 'unpack 'dont-run-rubocop
+           (lambda _
+             (substitute* "Rakefile"
+               ((".*rubocop.*") "")
+               ((".*RuboCop.*") ""))
+             #t)))))
+    (propagated-inputs
+     `(("ruby-json-schema" ,ruby-json-schema)))
+    (native-inputs
+     `(("bundler" ,bundler)
+       ("ruby-rspec-core" ,ruby-rspec-core)
+       ("ruby-rspec-expectations" ,ruby-rspec-expectations)))
+    (synopsis
+     "Compare Open API Initiative specification files")
+    (description
+     "Swagger::Diff is a utility for comparing two different Open API
+Initiative (OAI) specifications (formerly known as Swagger specifications).
+It is intended to determine whether a newer API specification is
+backwards-compatible with an older API specification.")
+    (home-page "https://github.com/civisanalytics/swagger-diff")
+    (license license:bsd-3)))
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index 1c80b7978e..ccebe40e9d 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -183,8 +183,20 @@ their folder.
        #:test-target "tests"
        #:phases
        (modify-phases %standard-phases
-         ;; No install target.
+         (add-after 'unpack 'search-$PATH-for-binaries
+           ;; lsyncd requires and hard-codes absolute file names to binaries.
+           ;; Make it fall back to searching $PATH for relative file names.
+           (lambda _
+             (substitute* "lsyncd.c"
+               (("execv\\(") "execvp("))
+             (substitute* (list "lsyncd.lua"
+                                "default-direct.lua"
+                                "default-rsync.lua"
+                                "default-rsyncssh.lua")
+               (("(|/usr)/bin/") ""))
+             #t))
          (replace 'install
+           ;; No install target.
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
diff --git a/gnu/packages/tmux.scm b/gnu/packages/tmux.scm
index 730cb421de..6f1ef45ae1 100644
--- a/gnu/packages/tmux.scm
+++ b/gnu/packages/tmux.scm
@@ -38,7 +38,7 @@
 (define-public tmux
   (package
     (name "tmux")
-    (version "2.9")
+    (version "2.9a")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -46,12 +46,12 @@
                     version "/tmux-" version ".tar.gz"))
              (sha256
               (base32
-               "10195hp5ydkwwmpcr7188fgx9daqwrslb1lylgrrkzc6yhr1541l"))))
+               "099vn8mg2nnizbqqc87a5mxm8c46kadfhx30dgxbz9hp8mx1d7c3"))))
     (build-system gnu-build-system)
     (inputs
      `(("libevent" ,libevent)
        ("ncurses" ,ncurses)))
-    (home-page "http://tmux.github.io/")
+    (home-page "https://tmux.github.io/")
     (synopsis "Terminal multiplexer")
     (description
      "tmux is a terminal multiplexer: it enables a number of terminals (or
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index 8b5e8032ad..2e8e48c8e2 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017, 2018 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2017, 2018, 2019 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
@@ -39,6 +39,7 @@
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
@@ -49,14 +50,14 @@
 (define-public tor
   (package
     (name "tor")
-    (version "0.4.0.5")
+    (version "0.4.1.5")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://dist.torproject.org/tor-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0vk9j3ybz5dwwbmqrdj1bjcsxy76pc8frmfvflkdzwfkvkqcp8mm"))))
+               "0984jb6hdcc10f7aq8xzl7l4jf93skp45wkv2v63z4zv0nvf0r58"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -157,7 +158,7 @@ networks.")
 (define-public onionshare
   (package
     (name "onionshare")
-    (version "1.3.2")
+    (version "2.1")
     (source
       (origin
         (method git-fetch)
@@ -166,7 +167,7 @@ networks.")
               (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "19zrz9kh7k4pdk4lh3cm0kv02ngdqkrggwma1xdskrrmp2rjkgz7"))))
+         (base32 "1lx21p12888qnbhsyin4lrnn4xizb39ldk77r71y53hn8mfxi54z"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -184,20 +185,21 @@ networks.")
                  (("/usr") out))
                #t)))
          (delete 'check)
-         (add-before 'strip 'tests
+         (add-before 'strip 'check
            ;; After all the patching we run the tests after installing.
-           ;; This is also a known issue:
-           ;; https://github.com/micahflee/onionshare/issues/284
            (lambda _
-             (invoke "pytest" "test")
+             (setenv "HOME" "/tmp")     ; Some tests need a writable homedir
+             (invoke "pytest" "tests/")
              #t)))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (inputs
-     `(("python-flask" ,python-flask)
+     `(("python-pycrypto" ,python-pycrypto)
+       ("python-flask" ,python-flask)
        ("python-nautilus" ,python-nautilus)
        ("python-sip" ,python-sip)
        ("python-stem" ,python-stem)
+       ("python-pysocks" ,python-pysocks)
        ("python-pyqt" ,python-pyqt)))
     (home-page "https://onionshare.org/")
     (synopsis "Securely and anonymously share files")
@@ -209,8 +211,7 @@ using a third party filesharing service.  You host the file on your own computer
 and use a Tor hidden service to make it temporarily accessible over the
 internet.  The other user just needs to use Tor Browser to download the file
 from you.")
-    (license (list license:gpl3+
-                   license:bsd-3))))    ; onionshare/socks.py
+    (license license:gpl3+)))
 
 (define-public nyx
   (package
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index e83b1d95e3..573fa6f8cc 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -146,14 +146,14 @@ as well as the classic centralized workflow.")
    (name "git")
    ;; XXX When updating Git, check if the special 'git-source' input to cgit
    ;; needs to be updated as well.
-   (version "2.22.1")
+   (version "2.23.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "093qjgagha937w96izkpsjkhxf5drsa7rvk5snlyjivqnwxgkqac"))))
+              "0rv0y45gcd3h191isppn77acih695v4pipdj031jvs9rd1ds0kr3"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -166,7 +166,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "17vpqv9g8li58njx7z5124b3c2zb2n63z4dalh5gw9iys7qb8446"))))
+            "0sllhyl0w29v4n303hqfmcc3apafnwk4sk78anyjjhpzd0zl6n4m"))))
       ;; For subtree documentation.
       ("asciidoc" ,asciidoc)
       ("docbook-xsl" ,docbook-xsl)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 7225e9e5da..2376f8bda1 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -1052,7 +1052,7 @@ videoformats depend on the configuration flags of ffmpeg.")
 (define-public vlc
   (package
     (name "vlc")
-    (version "3.0.7.1")
+    (version "3.0.8")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1061,7 +1061,7 @@ videoformats depend on the configuration flags of ffmpeg.")
                    "/vlc-" version ".tar.xz"))
              (sha256
               (base32
-               "1xb4c8n0hkwijzfdlbwadhxnx9z8rlhmrdq4c7q74rq9f51q0m86"))))
+               "1xmxjpyzdhabchwncz6lvx3kzvl7fz9c42bkv3nbj68albs9w570"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("flex" ,flex)
@@ -3378,30 +3378,32 @@ online.")
     (license license:expat)))
 
 (define-public vidstab
-  (package
-    (name "vidstab")
-    (version "1.1.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/georgmartius/vid.stab.git")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0a3frpm2kdbx7vszhg64p3alisag73bcspl7fp3a2f1kgq7rbh38"))))
-    (build-system cmake-build-system)
-    (arguments
-     '(#:tests? #f)) ; tests are not run as part of standard build process
-    (home-page "http://public.hronopik.de/vid.stab/")
-    (synopsis "Video stabilization library")
-    (description "Vidstab is a video stabilization library which can be used
+  (let ((commit "aeabc8daa7904f9edf7441a11f293965a5ef53b8")
+        (revision "0"))
+    (package
+      (name "vidstab")
+      (version (git-version "1.1.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/georgmartius/vid.stab.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "042iy0f3khwzr68djzvqgn301sy21ljvkf52rnc2c73q7ircnzzn"))))
+      (build-system cmake-build-system)
+      (arguments
+       '(#:tests? #f)) ; tests are not run as part of standard build process
+      (home-page "http://public.hronopik.de/vid.stab/")
+      (synopsis "Video stabilization library")
+      (description "Vidstab is a video stabilization library which can be used
 with FFmpeg.  A video acquired using a hand-held camera or a camera mounted on a
 vehicle typically suffers from undesirable shakes and jitters.  Activities such
 as surfing, skiing, riding and walking while shooting videos are especially
 prone to erratic camera shakes.  Vidstab targets these video contents to help
 create smoother and stable videos.")
-    (license license:gpl2+)))
+      (license license:gpl2+))))
 
 (define-public libopenshot
   (package
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 9f80c404d4..065700465e 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -133,14 +133,14 @@
 (define-public httpd
   (package
     (name "httpd")
-    (version "2.4.39")
+    (version "2.4.41")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://apache/httpd/httpd-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "18ngvsjq65qxk3biggnkhkq8jlll9dsg9n3csra9p99sfw2rvjml"))))
+               "0h7a31yxwyh7h521frnmlppl0h7sh9icc3ka6vlmlcg5iwllhg8k"))))
     (build-system gnu-build-system)
     (native-inputs `(("pcre" ,pcre "bin")))       ;for 'pcre-config'
     (inputs `(("apr" ,apr)
@@ -5362,14 +5362,8 @@ command-line arguments or read from stdin.")
     (description "@code{ia} is a command-line tool for using
 @url{archive.org} from the command-line.  It also emplements the
 internetarchive python module for programmatic access to archive.org.")
-    (properties
-     `((python2-variant . ,(delay python2-internetarchive))))
     (license license:agpl3+)))
 
-(define-public python2-internetarchive
-  (package-with-python2
-   (strip-python2-variant python-internetarchive)))
-
 (define-public python-clf
   (let ((commit-test-clf "d01d25923c599d3261910f79fb948825b4270d07")) ; 0.5.7
     (package
@@ -5426,7 +5420,7 @@ snippets on @url{https://commandlinefu.com}.")
 (define-public rss-bridge
   (package
     (name "rss-bridge")
-    (version "2019-01-13")
+    (version "2019-07-06")
     (source
      (origin
        (method git-fetch)
@@ -5436,7 +5430,7 @@ snippets on @url{https://commandlinefu.com}.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1m0dq491954f0d7k4508ddlywk09whcz9j21rc4yk3lbwpf0nd4c"))))
+         "0zd0c9xzvpx55mvj8xrafakfkvafnwkkvhw9b1j0bf897xdkfsyb"))))
     (build-system trivial-build-system)
     (arguments
      '(#:modules ((guix build utils))
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index 43dae3cf7c..b8a2264153 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -318,7 +318,7 @@ integrate Windows applications into your desktop.")
 (define-public wine-staging-patchset-data
   (package
     (name "wine-staging-patchset-data")
-    (version "4.13")
+    (version "4.14")
     (source
      (origin
        (method git-fetch)
@@ -328,7 +328,7 @@ integrate Windows applications into your desktop.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0bbwsd2qpjilxpjscqbp78p0gl0awj1yj62g0wvybh4x89fzy8zj"))))
+         "1s17hcrp1aa0v99y5iav2s0lxdx2rzgm7z0c4zhxyydqxj399f5j"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("bash" ,bash)
@@ -374,7 +374,7 @@ integrate Windows applications into your desktop.")
               (file-name (string-append name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0rqx8g394aj5q913cd18zsi60sldvxarrp178w6ja0y4rd8l25vr"))))
+                "1rl1a3k5sr0hyxc61d68kwandhxcnxwv6b77vh7x2rkl1h4nxmfs"))))
     (inputs `(("autoconf" ,autoconf) ; for autoreconf
               ("faudio" ,faudio)
               ("ffmpeg" ,ffmpeg)
@@ -499,7 +499,6 @@ integrated into the main branch.")
                     (script (string-append (assoc-ref %build-inputs
                             "wine-staging-patchset-data")
                             "/share/wine-staging/patches/patchinstall.sh")))
-               ;; Exclude specific patches that conflict with FAudio.
                (invoke script (string-append "DESTDIR=" ".") "--all")
                #t)))
          (add-after 'install 'copy-wine32-binaries
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index b2df24b52a..ae399803f3 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -716,18 +716,18 @@ shows it again when the mouse cursor moves or a mouse button is pressed.")
 (define-public xlockmore
   (package
     (name "xlockmore")
-    (version "5.57")
+    (version "5.58")
     (source (origin
              (method url-fetch)
              (uri (list (string-append "http://sillycycle.com/xlock/"
-                                       name "-" version ".tar.xz")
+                                       "xlockmore-" version ".tar.xz")
                         ;; Previous releases are moved to a subdirectory.
                         (string-append "http://sillycycle.com/xlock/"
                                        "recent-releases/"
-                                       name "-" version ".tar.xz")))
+                                       "xlockmore-" version ".tar.xz")))
              (sha256
               (base32
-               "18r8rh8fzdn9miicbpc3qbdd4mm2g1jpsbcvj29sr66pxydzkb7r"))))
+               "1va11sbv5lbkxkp0i0msz5md3n2n82nzppk27rzdrw7y79vq37zw"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list (string-append "--enable-appdefaultdir="
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index e4848b7bee..b3d9fd3cb7 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -1805,7 +1805,7 @@ used with other display managers such as gdm or kdm.")
 (define-public setxkbmap
   (package
     (name "setxkbmap")
-    (version "1.3.1")
+    (version "1.3.2")
     (source
       (origin
         (method url-fetch)
@@ -1815,7 +1815,7 @@ used with other display managers such as gdm or kdm.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1qfk097vjysqb72pq89h0la3462kbb2dh1d11qzs2fr67ybb7pd9"))))
+            "1xdrxs65v7d0rw1yaz0vsz55w4hxym99216p085ya9978j379wlg"))))
     (build-system gnu-build-system)
     (inputs
       `(("libxkbfile" ,libxkbfile)
@@ -4167,16 +4167,16 @@ an X server.")
 (define-public xrandr
   (package
     (name "xrandr")
-    (version "1.5.0")
+    (version "1.5.1")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xrandr-"
-               version ".tar.bz2"))
+               version ".tar.xz"))
         (sha256
           (base32
-            "1kaih7rmzxr1vp5a5zzjhm5x7dn9mckya088sqqw026pskhx9ky1"))))
+            "0ql75s1n3dm2m3g1ilb9l6hqh15r0v709bgghpwazy3jknpnvivv"))))
     (build-system gnu-build-system)
     (inputs
       `(("libxrender" ,libxrender)
diff --git a/gnu/services.scm b/gnu/services.scm
index 7de78105ff..6ee05d4580 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -430,34 +430,34 @@ ACTIVATION-SCRIPT-TYPE."
 (define (activation-script gexps)
   "Return the system's activation script, which evaluates GEXPS."
   (define actions
-    (map (cut scheme-file "activate-service" <>) gexps))
-
-  (scheme-file "activate"
-               (with-imported-modules (source-module-closure
-                                       '((gnu build activation)
-                                         (guix build utils)))
-                 #~(begin
-                     (use-modules (gnu build activation)
-                                  (guix build utils))
-
-                     ;; Make sure the user accounting database exists.  If it
-                     ;; does not exist, 'setutxent' does not create it and
-                     ;; thus there is no accounting at all.
-                     (close-port (open-file "/var/run/utmpx" "a0"))
-
-                     ;; Same for 'wtmp', which is populated by mingetty et
-                     ;; al.
-                     (mkdir-p "/var/log")
-                     (close-port (open-file "/var/log/wtmp" "a0"))
-
-                     ;; Set up /run/current-system.  Among other things this
-                     ;; sets up locales, which the activation snippets
-                     ;; executed below may expect.
-                     (activate-current-system)
-
-                     ;; Run the services' activation snippets.
-                     ;; TODO: Use 'load-compiled'.
-                     (for-each primitive-load '#$actions)))))
+    (map (cut program-file "activate-service.scm" <>) gexps))
+
+  (program-file "activate.scm"
+                (with-imported-modules (source-module-closure
+                                        '((gnu build activation)
+                                          (guix build utils)))
+                  #~(begin
+                      (use-modules (gnu build activation)
+                                   (guix build utils))
+
+                      ;; Make sure the user accounting database exists.  If it
+                      ;; does not exist, 'setutxent' does not create it and
+                      ;; thus there is no accounting at all.
+                      (close-port (open-file "/var/run/utmpx" "a0"))
+
+                      ;; Same for 'wtmp', which is populated by mingetty et
+                      ;; al.
+                      (mkdir-p "/var/log")
+                      (close-port (open-file "/var/log/wtmp" "a0"))
+
+                      ;; Set up /run/current-system.  Among other things this
+                      ;; sets up locales, which the activation snippets
+                      ;; executed below may expect.
+                      (activate-current-system)
+
+                      ;; Run the services' activation snippets.
+                      ;; TODO: Use 'load-compiled'.
+                      (for-each primitive-load '#$actions)))))
 
 (define (gexps->activation-gexp gexps)
   "Return a gexp that runs the activation script containing GEXPS."
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 537d30add5..dcb7278f0f 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019 John Soo <jsoo1@asu.edu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -801,10 +802,14 @@ to add @var{device} to the kernel's entropy pool.  The service will fail if
                 (description
                  "Install the given fonts on the specified ttys (fonts are per
 virtual console on GNU/Linux).  The value of this service is a list of
-tty/font pairs like:
+tty/font pairs.  The font can be the name of a font provided by the @code{kbd}
+package or any valid argument to @command{setfont}, as in this example:
 
 @example
-'((\"tty1\" . \"LatGrkCyr-8x16\"))
+'((\"tty1\" . \"LatGrkCyr-8x16\")
+  (\"tty2\" . (file-append
+                font-tamzen
+                \"/share/kbd/consolefonts/TamzenForPowerline10x20.psf\")))
 @end example\n")))
 
 (define* (console-font-service tty #:optional (font "LatGrkCyr-8x16"))
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index c90b87c023..7e9563b923 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -133,7 +133,10 @@ MODULES and taken from LINUX."
                       (copy-file module
                                  (string-append #$output "/"
                                                 (basename module))))
-                    (delete-duplicates modules)))))
+                    (delete-duplicates modules))
+
+          ;; Hyphen or underscore?  This database tells us.
+          (write-module-name-database #$output))))
 
   (computed-file "linux-modules" build-exp))
 
diff --git a/guix/build-system/r.scm b/guix/build-system/r.scm
index e7214155be..dd2a9fe8de 100644
--- a/guix/build-system/r.scm
+++ b/guix/build-system/r.scm
@@ -47,14 +47,22 @@ available via the first URI, the second URI points to the archived version."
         (string-append "mirror://cran/src/contrib/Archive/"
                        name "/" name "_" version ".tar.gz")))
 
-(define (bioconductor-uri name version)
+(define* (bioconductor-uri name version #:optional type)
   "Return a URI string for the R package archive on Bioconductor for the
 release corresponding to NAME and VERSION."
-  (list (string-append "https://bioconductor.org/packages/release/bioc/src/contrib/"
-                       name "_" version ".tar.gz")
-        ;; TODO: use %bioconductor-version from (guix import cran)
-        (string-append "https://bioconductor.org/packages/3.9/bioc/src/contrib/Archive/"
-                       name "_" version ".tar.gz")))
+  (let ((type-url-part (match type
+                         ('annotation "/data/annotation")
+                         ('experiment "/data/experiment")
+                         (_ "/bioc"))))
+    (list (string-append "https://bioconductor.org/packages/release"
+                         type-url-part
+                         "/src/contrib/"
+                         name "_" version ".tar.gz")
+          ;; TODO: use %bioconductor-version from (guix import cran)
+          (string-append "https://bioconductor.org/packages/3.9"
+                         type-url-part
+                         "/src/contrib/Archive/"
+                         name "_" version ".tar.gz"))))
 
 (define %r-build-system-modules
   ;; Build-side modules imported by default.
diff --git a/guix/channels.scm b/guix/channels.scm
index 415246cbd1..ebb2cacbc7 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -65,7 +65,9 @@
             latest-channel-derivation
             channel-instances->manifest
             %channel-profile-hooks
-            channel-instances->derivation))
+            channel-instances->derivation
+
+            profile-channels))
 
 ;;; Commentary:
 ;;;
@@ -534,3 +536,27 @@ channel instances."
 latest instances of CHANNELS."
   (mlet %store-monad ((instances (latest-channel-instances* channels)))
     (channel-instances->derivation instances)))
+
+(define (profile-channels profile)
+  "Return the list of channels corresponding to entries in PROFILE.  If
+PROFILE is not a profile created by 'guix pull', return the empty list."
+  (filter-map (lambda (entry)
+                (match (assq 'source (manifest-entry-properties entry))
+                  (('source ('repository ('version 0)
+                                         ('url url)
+                                         ('branch branch)
+                                         ('commit commit)
+                                         _ ...))
+                   (channel (name (string->symbol
+                                   (manifest-entry-name entry)))
+                            (url url)
+                            (commit commit)))
+
+                  ;; No channel information for this manifest entry.
+                  ;; XXX: Pre-0.15.0 Guix did not provide that information,
+                  ;; but there's not much we can do in that case.
+                  (_ #f)))
+
+              ;; Show most recently installed packages last.
+              (reverse
+               (manifest-entries (profile-manifest profile)))))
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 92d50503ce..e1073ea39b 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -376,8 +376,8 @@ of SUBSTITUTABLES."
                                  (substitution-oracle
                                   store inputs #:mode mode)))
   "Given INPUTS, a list of derivation-inputs, return two values: the list of
-derivation to build, and the list of substitutable items that, together,
-allows INPUTS to be realized.
+derivations to build, and the list of substitutable items that, together,
+allow INPUTS to be realized.
 
 SUBSTITUTABLE-INFO must be a one-argument procedure similar to that returned
 by 'substitution-oracle'."
@@ -685,7 +685,7 @@ name of each input with that input's hash."
                              (make-derivation-input hash sub-drvs))))
                         inputs)))
        (make-derivation outputs
-                        (sort inputs
+                        (sort (delete-duplicates inputs)
                               (lambda (drv1 drv2)
                                 (string<? (derivation-input-derivation drv1)
                                           (derivation-input-derivation drv2))))
diff --git a/guix/import/cran.scm b/guix/import/cran.scm
index 3240094444..9c964701b1 100644
--- a/guix/import/cran.scm
+++ b/guix/import/cran.scm
@@ -132,14 +132,19 @@ package definition."
 ;; updated together.
 (define %bioconductor-version "3.9")
 
-(define %bioconductor-packages-list-url
+(define* (bioconductor-packages-list-url #:optional type)
   (string-append "https://bioconductor.org/packages/"
-                 %bioconductor-version "/bioc/src/contrib/PACKAGES"))
-
-(define (bioconductor-packages-list)
+                 %bioconductor-version
+                 (match type
+                   ('annotation "/data/annotation")
+                   ('experiment "/data/experiment")
+                   (_ "/bioc"))
+                 "/src/contrib/PACKAGES"))
+
+(define* (bioconductor-packages-list #:optional type)
   "Return the latest version of package NAME for the current bioconductor
 release."
-  (let ((url (string->uri %bioconductor-packages-list-url)))
+  (let ((url (string->uri (bioconductor-packages-list-url type))))
     (guard (c ((http-get-error? c)
                (format (current-error-port)
                        "error: failed to retrieve list of packages from ~s: ~a (~s)~%"
@@ -153,12 +158,12 @@ release."
              (description->alist (string-join chunk "\n")))
            (chunk-lines (read-lines (http-fetch/cached url)))))))
 
-(define (latest-bioconductor-package-version name)
+(define* (latest-bioconductor-package-version name #:optional type)
   "Return the version string corresponding to the latest release of the
 bioconductor package NAME, or #F if the package is unknown."
   (and=> (find (lambda (meta)
                  (string=? (assoc-ref meta "Package") name))
-               (bioconductor-packages-list))
+               (bioconductor-packages-list type))
          (cut assoc-ref <> "Version")))
 
 ;; Little helper to download URLs only once.
@@ -187,8 +192,12 @@ from ~s: ~a (~s)~%"
      ;; Currently, the bioconductor project does not offer a way to access a
      ;; package's DESCRIPTION file over HTTP, so we determine the version,
      ;; download the source tarball, and then extract the DESCRIPTION file.
-     (and-let* ((version (latest-bioconductor-package-version name))
-                (url     (car (bioconductor-uri name version)))
+     (and-let* ((type    (or
+                          (and (latest-bioconductor-package-version name) #t)
+                          (and (latest-bioconductor-package-version name 'annotation) 'annotation)
+                          (and (latest-bioconductor-package-version name 'experiment) 'experiment)))
+                (version (latest-bioconductor-package-version name type))
+                (url     (car (bioconductor-uri name version type)))
                 (tarball (download url)))
        (call-with-temporary-directory
         (lambda (dir)
@@ -198,8 +207,11 @@ from ~s: ~a (~s)~%"
                                  "--strip-components=1"
                                  "-C" dir
                                  "-f" tarball "*/DESCRIPTION"))
-                 (description->alist (with-input-from-file
-                                         (string-append dir "/DESCRIPTION") read-string))))))))))
+                 (and=> (description->alist (with-input-from-file
+                                                (string-append dir "/DESCRIPTION") read-string))
+                        (lambda (meta)
+                          (if (boolean? type) meta
+                              (cons `(bioconductor-type . ,type) meta))))))))))))
 
 (define (listify meta field)
   "Look up FIELD in the alist META.  If FIELD contains a comma-separated
@@ -306,7 +318,11 @@ from the alist META, which was derived from the R package's DESCRIPTION file."
          (home-page  (match (listify meta "URL")
                        ((url rest ...) url)
                        (_ (string-append base-url name))))
-         (source-url (match (uri-helper name version)
+         (source-url (match (apply uri-helper name version
+                                   (case repository
+                                     ((bioconductor)
+                                      (list (assoc-ref meta 'bioconductor-type)))
+                                     (else '())))
                        ((url rest ...) url)
                        ((? string? url) url)
                        (_ #f)))
@@ -330,7 +346,11 @@ from the alist META, which was derived from the R package's DESCRIPTION file."
         (version ,version)
         (source (origin
                   (method url-fetch)
-                  (uri (,(procedure-name uri-helper) ,name version))
+                  (uri (,(procedure-name uri-helper) ,name version
+                        ,@(or (and=> (assoc-ref meta 'bioconductor-type)
+                                     (lambda (type)
+                                       (list (list 'quote type))))
+                              '())))
                   (sha256
                    (base32
                     ,(bytevector->nix-base32-string (file-sha256 tarball))))))
diff --git a/guix/import/gnome.scm b/guix/import/gnome.scm
index 1ade63e1af..436ec88ef9 100644
--- a/guix/import/gnome.scm
+++ b/guix/import/gnome.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -46,7 +46,7 @@ source for metadata."
       (package name)
       (version version)
       (urls (filter-map (lambda (extension)
-                          (match (hash-ref dictionary extension)
+                          (match (assoc-ref dictionary extension)
                             (#f
                              #f)
                             ((? string? relative-url)
@@ -86,21 +86,22 @@ not be determined."
            (json (json->scm port)))
       (close-port port)
       (match json
-        ((4 (? hash-table? releases) _ ...)
-         (let* ((releases (hash-ref releases upstream-name))
-                (latest   (hash-fold (lambda (key value result)
-                                       (cond ((even-minor-version? key)
-                                              (match result
-                                                (#f
-                                                 (cons key value))
-                                                ((newest . _)
-                                                 (if (version>? key newest)
-                                                     (cons key value)
-                                                     result))))
-                                             (else
-                                              result)))
-                                     #f
-                                     releases)))
+        (#(4 releases _ ...)
+         (let* ((releases (assoc-ref releases upstream-name))
+                (latest   (fold (match-lambda*
+                                  (((key . value) result)
+                                   (cond ((even-minor-version? key)
+                                          (match result
+                                            (#f
+                                             (cons key value))
+                                            ((newest . _)
+                                             (if (version>? key newest)
+                                                 (cons key value)
+                                                 result))))
+                                         (else
+                                          result))))
+                                #f
+                                releases)))
            (and latest
                 (jsonish->upstream-source upstream-name latest))))))))
 
diff --git a/guix/remote.scm b/guix/remote.scm
index 5fecd954e9..d0c3d04a25 100644
--- a/guix/remote.scm
+++ b/guix/remote.scm
@@ -19,13 +19,17 @@
 (define-module (guix remote)
   #:use-module (guix ssh)
   #:use-module (guix gexp)
+  #:use-module (guix i18n)
   #:use-module (guix inferior)
   #:use-module (guix store)
   #:use-module (guix monads)
   #:use-module (guix modules)
   #:use-module (guix derivations)
+  #:use-module (guix utils)
   #:use-module (ssh popen)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
   #:use-module (ice-9 match)
   #:export (remote-eval))
 
@@ -40,29 +44,41 @@
 ;;;
 ;;; Code:
 
-(define (remote-pipe-for-gexp lowered session)
-  "Return a remote pipe for the given SESSION to evaluate LOWERED."
+(define* (remote-pipe-for-gexp lowered session #:optional become-command)
+  "Return a remote pipe for the given SESSION to evaluate LOWERED.  If
+BECOME-COMMAND is given, use that to invoke the remote Guile REPL."
   (define shell-quote
     (compose object->string object->string))
 
-  (apply open-remote-pipe* session OPEN_READ
-         (string-append (derivation-input-output-path
-                         (lowered-gexp-guile lowered))
-                        "/bin/guile")
-         "--no-auto-compile"
-         (append (append-map (lambda (directory)
-                               `("-L" ,directory))
-                             (lowered-gexp-load-path lowered))
-                 (append-map (lambda (directory)
-                               `("-C" ,directory))
-                             (lowered-gexp-load-path lowered))
-                 `("-c"
-                   ,(shell-quote (lowered-gexp-sexp lowered))))))
+  (define repl-command
+    (append (or become-command '())
+            (list
+             (string-append (derivation-input-output-path
+                             (lowered-gexp-guile lowered))
+                            "/bin/guile")
+             "--no-auto-compile")
+            (append-map (lambda (directory)
+                          `("-L" ,directory))
+                        (lowered-gexp-load-path lowered))
+            (append-map (lambda (directory)
+                          `("-C" ,directory))
+                        (lowered-gexp-load-path lowered))
+            `("-c"
+              ,(shell-quote (lowered-gexp-sexp lowered)))))
 
-(define (%remote-eval lowered session)
+  (let ((pipe (apply open-remote-pipe* session OPEN_READ repl-command)))
+    (when (eof-object? (peek-char pipe))
+      (raise (condition
+              (&message
+               (message (format #f (G_ "failed to run '~{~a~^ ~}'")
+                                repl-command))))))
+    pipe))
+
+(define* (%remote-eval lowered session #:optional become-command)
   "Evaluate LOWERED, a lowered gexp, in SESSION.  This assumes that all the
-prerequisites of EXP are already available on the host at SESSION."
-  (let* ((pipe   (remote-pipe-for-gexp lowered session))
+prerequisites of EXP are already available on the host at SESSION.  If
+BECOME-COMMAND is given, use that to invoke the remote Guile REPL."
+  (let* ((pipe   (remote-pipe-for-gexp lowered session become-command))
          (result (read-repl-response pipe)))
     (close-port pipe)
     result))
@@ -71,7 +87,7 @@ prerequisites of EXP are already available on the host at SESSION."
   "Return a \"trampoline\" gexp that evaluates EXP and writes the evaluation
 result to the current output port using the (guix repl) protocol."
   (define program
-    (scheme-file "remote-exp.scm" exp))
+    (program-file "remote-exp.scm" exp))
 
   (with-imported-modules (source-module-closure '((guix repl)))
     #~(begin
@@ -89,17 +105,21 @@ result to the current output port using the (guix repl) protocol."
 (define* (remote-eval exp session
                       #:key
                       (build-locally? #t)
+                      (system (%current-system))
                       (module-path %load-path)
-                      (socket-name "/var/guix/daemon-socket/socket"))
+                      (socket-name (%daemon-socket-uri))
+                      (become-command #f))
   "Evaluate EXP, a gexp, on the host at SESSION, an SSH session.  Ensure that
 all the elements EXP refers to are built and deployed to SESSION beforehand.
 When BUILD-LOCALLY? is true, said dependencies are built locally and sent to
 the remote store afterwards; otherwise, dependencies are built directly on the
 remote store."
-  (mlet %store-monad ((lowered (lower-gexp (trampoline exp)
-                                           #:module-path %load-path))
-                      (remote -> (connect-to-remote-daemon session
-                                                           socket-name)))
+  (mlet* %store-monad ((lowered (lower-gexp (trampoline exp)
+                                            #:system system
+                                            #:guile-for-build #f
+                                            #:module-path %load-path))
+                       (remote -> (connect-to-remote-daemon session
+                                                            socket-name)))
     (define inputs
       (cons (lowered-gexp-guile lowered)
             (lowered-gexp-inputs lowered)))
@@ -115,7 +135,7 @@ remote store."
             (built-derivations inputs)
             ((store-lift send-files) to-send remote #:recursive? #t)
             (return (close-connection remote))
-            (return (%remote-eval lowered session))))
+            (return (%remote-eval lowered session become-command))))
         (let ((to-send (append (map (compose derivation-file-name
                                              derivation-input-derivation)
                                     inputs)
@@ -124,4 +144,4 @@ remote store."
             ((store-lift send-files) to-send remote #:recursive? #t)
             (return (build-derivations remote inputs))
             (return (close-connection remote))
-            (return (%remote-eval lowered session)))))))
+            (return (%remote-eval lowered session become-command)))))))
diff --git a/guix/scripts/deploy.scm b/guix/scripts/deploy.scm
index ebc99e52cc..6a67985c8b 100644
--- a/guix/scripts/deploy.scm
+++ b/guix/scripts/deploy.scm
@@ -28,6 +28,8 @@
   #:use-module (guix grafts)
   #:use-module (ice-9 format)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
   #:use-module (srfi srfi-37)
   #:export (guix-deploy))
 
@@ -43,8 +45,6 @@
 (define (show-help)
   (display (G_ "Usage: guix deploy [OPTION] FILE...
 Perform the deployment specified by FILE.\n"))
-  (display (G_ "
-  -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""))
   (show-build-options-help)
   (newline)
   (display (G_ "
@@ -66,8 +66,7 @@ Perform the deployment specified by FILE.\n"))
          %standard-build-options))
 
 (define %default-options
-  `((system . ,(%current-system))
-    (substitutes? . #t)
+  `((substitutes? . #t)
     (build-hook? . #t)
     (graft? . #t)
     (debug . 0)
@@ -91,8 +90,18 @@ Perform the deployment specified by FILE.\n"))
     (with-store store
       (set-build-options-from-command-line store opts)
       (for-each (lambda (machine)
-                  (info (G_ "deploying to ~a...") (machine-display-name machine))
-                  (parameterize ((%current-system (assq-ref opts 'system))
-                                 (%graft? (assq-ref opts 'graft?)))
-                    (run-with-store store (deploy-machine machine))))
+                  (info (G_ "deploying to ~a...~%")
+                        (machine-display-name machine))
+                  (parameterize ((%graft? (assq-ref opts 'graft?)))
+                    (guard (c ((message-condition? c)
+                               (report-error (G_ "failed to deploy ~a: '~a'~%")
+                                             (machine-display-name machine)
+                                             (condition-message c)))
+                              ((deploy-error? c)
+                               (when (deploy-error-should-roll-back c)
+                                 (info (G_ "rolling back ~a...~%")
+                                       (machine-display-name machine))
+                                 (run-with-store store (roll-back-machine machine)))
+                               (apply throw (deploy-error-captured-args c))))
+                      (run-with-store store (deploy-machine machine)))))
                 machines))))
diff --git a/guix/scripts/describe.scm b/guix/scripts/describe.scm
index fa6b6cae37..99a88c50fa 100644
--- a/guix/scripts/describe.scm
+++ b/guix/scripts/describe.scm
@@ -153,30 +153,9 @@ in the format specified by FMT."
     (generation-number profile))
 
   (define channels
-    (map (lambda (entry)
-           (match (assq 'source (manifest-entry-properties entry))
-             (('source ('repository ('version 0)
-                                    ('url url)
-                                    ('branch branch)
-                                    ('commit commit)
-                                    _ ...))
-              (channel (name (string->symbol (manifest-entry-name entry)))
-                       (url url)
-                       (commit commit)))
-
-             ;; Pre-0.15.0 Guix does not provide that information,
-             ;; so there's not much we can do in that case.
-             (_ (channel (name 'guix)
-                         (url "?")
-                         (commit "?")))))
-
-         ;; Show most recently installed packages last.
-         (reverse
-          (manifest-entries
-           (profile-manifest
-            (if (zero? number)
-                profile
-                (generation-file-name profile number)))))))
+    (profile-channels (if (zero? number)
+                          profile
+                          (generation-file-name profile number))))
 
   (match fmt
     ('human
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index dd7026a6a4..4591d0f308 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -285,10 +285,9 @@ update would trigger a complete rebuild."
   (exit 0))
 
 (define (warn-no-updater package)
-  (format (current-error-port)
-          (G_ "~a: warning: no updater for ~a~%")
-          (location->string (package-location package))
-          (package-name package)))
+  (warning (package-location package)
+           (G_ "no updater for ~a~%")
+           (package-name package)))
 
 (define* (update-package store package updaters
                          #:key (key-download 'interactive) warn?)
@@ -306,11 +305,10 @@ warn about packages that have no matching updater."
         (when version
           (if (and=> tarball file-exists?)
               (begin
-                (format (current-error-port)
-                        (G_ "~a: ~a: updating from version ~a to version ~a...~%")
-                        (location->string loc)
-                        (package-name package)
-                        (package-version package) version)
+                (info loc
+                      (G_ "~a: updating from version ~a to version ~a...~%")
+                      (package-name package)
+                      (package-version package) version)
                 (for-each
                  (lambda (change)
                    (format (current-error-port)
@@ -350,27 +348,24 @@ WARN? is true and no updater exists for PACKAGE, print a warning."
        (case (version-compare (upstream-source-version source)
                               (package-version package))
          ((>)
-          (format (current-error-port)
-                  (G_ "~a: ~a would be upgraded from ~a to ~a~%")
-                  (location->string loc)
-                  (package-name package) (package-version package)
-                  (upstream-source-version source)))
+          (info loc
+                (G_ "~a would be upgraded from ~a to ~a~%")
+                (package-name package) (package-version package)
+                (upstream-source-version source)))
          ((=)
           (when warn?
-            (format (current-error-port)
-                    (G_ "~a: info: ~a is already the latest version of ~a~%")
-                    (location->string loc)
-                    (package-version package)
-                    (package-name package))))
+            (info loc
+                  (G_ "~a is already the latest version of ~a~%")
+                  (package-version package)
+                  (package-name package))))
          (else
           (when warn?
-            (format (current-error-port)
-                    (G_ "~a: warning: ~a is greater than \
+            (warning loc
+                     (G_ "~a is greater than \
 the latest known version of ~a (~a)~%")
-                    (location->string loc)
-                    (package-version package)
-                    (package-name package)
-                    (upstream-source-version source)))))))
+                     (package-version package)
+                     (package-name package)
+                     (upstream-source-version source)))))))
     (#f
      (when warn?
        (warn-no-updater package)))))
diff --git a/guix/ssh.scm b/guix/ssh.scm
index ede00133c8..7bc499a2fe 100644
--- a/guix/ssh.scm
+++ b/guix/ssh.scm
@@ -21,6 +21,7 @@
   #:use-module (guix inferior)
   #:use-module (guix i18n)
   #:use-module ((guix utils) #:select (&fix-hint))
+  #:use-module (gcrypt pk-crypto)
   #:use-module (ssh session)
   #:use-module (ssh auth)
   #:use-module (ssh key)
@@ -39,6 +40,8 @@
             remote-inferior
             remote-daemon-channel
             connect-to-remote-daemon
+            remote-system
+            remote-authorize-signing-key
             send-files
             retrieve-files
             retrieve-files*
@@ -97,16 +100,27 @@ specifies; otherwise use them.  Throw an error on failure."
                 (message (format #f (G_ "SSH connection to '~a' failed: ~a~%")
                                  host (get-error session))))))))))
 
-(define (remote-inferior session)
-  "Return a remote inferior for the given SESSION."
-  (let ((pipe (open-remote-pipe* session OPEN_BOTH
-                                 "guix" "repl" "-t" "machine")))
+(define* (remote-inferior session #:optional become-command)
+  "Return a remote inferior for the given SESSION.  If BECOME-COMMAND is
+given, use that to invoke the remote Guile REPL."
+  (let* ((repl-command (append (or become-command '())
+                               '("guix" "repl" "-t" "machine")))
+         (pipe (apply open-remote-pipe* session OPEN_BOTH repl-command)))
+    ;; XXX: 'channel-get-exit-status' would be better here, but hangs if the
+    ;; process does succeed. This doesn't reflect the documentation, so it's
+    ;; possible that it's a bug in guile-ssh.
+    (when (eof-object? (peek-char pipe))
+      (raise (condition
+              (&message
+               (message (format #f (G_ "failed to run '~{~a~^ ~}'")
+                                repl-command))))))
     (port->inferior pipe)))
 
-(define (inferior-remote-eval exp session)
+(define* (inferior-remote-eval exp session #:optional become-command)
   "Evaluate EXP in a new inferior running in SESSION, and close the inferior
-right away."
-  (let ((inferior (remote-inferior session)))
+right away.  If BECOME-COMMAND is given, use that to invoke the remote Guile
+REPL."
+  (let ((inferior (remote-inferior session become-command)))
     (dynamic-wind
       (const #t)
       (lambda ()
@@ -282,6 +296,34 @@ be read.  When RECURSIVE? is true, the closure of FILES is exported."
                              ,(object->string
                                (object->string export))))))
 
+(define (remote-system session)
+  "Return the system type as expected by Nix, usually ARCHITECTURE-KERNEL, of
+the machine on the other end of SESSION."
+  (inferior-remote-eval '(begin (use-modules (guix utils)) (%current-system))
+                        session))
+
+(define* (remote-authorize-signing-key key session #:optional become-command)
+  "Send KEY, a canonical sexp containing a public key, over SESSION and add it
+to the system ACL file if it has not yet been authorized."
+  (inferior-remote-eval
+   `(begin
+      (use-modules (guix build utils)
+                   (guix pki)
+                   (guix utils)
+                   (gcrypt pk-crypto)
+                   (srfi srfi-26))
+
+      (define acl (current-acl))
+      (define key (string->canonical-sexp ,(canonical-sexp->string key)))
+
+      (unless (authorized-key? key)
+        (let ((acl (public-keys->acl (cons key (acl->public-keys acl)))))
+          (mkdir-p (dirname %acl-file))
+          (with-atomic-file-output %acl-file
+            (cut write-acl acl <>)))))
+   session
+   become-command))
+
 (define* (send-files local files remote
                      #:key
                      recursive?
diff --git a/guix/upstream.scm b/guix/upstream.scm
index 1326b3db95..d4f9c5bb45 100644
--- a/guix/upstream.scm
+++ b/guix/upstream.scm
@@ -362,6 +362,7 @@ SOURCE, an <upstream-source>."
                       (_
                        "gz")))
                    ((url signature-url)
+                    ;; Try to find a URL that matches ARCHIVE-TYPE.
                     (find2 (lambda (url sig-url)
                              ;; Some URIs lack a file extension, like
                              ;; 'https://crates.io/???/0.1/download'.  In that
@@ -370,7 +371,13 @@ SOURCE, an <upstream-source>."
                                  (string-suffix? archive-type url)))
                            urls
                            (or signature-urls (circular-list #f)))))
-       (let ((tarball (download-tarball store url signature-url
+       ;; If none of URLS matches ARCHIVE-TYPE, then URL is #f; in that case,
+       ;; pick up the first element of URLS.
+       (let ((tarball (download-tarball store
+                                        (or url (first urls))
+                                        (and (pair? signature-urls)
+                                             (or signature-url
+                                                 (first signature-urls)))
                                         #:key-download key-download)))
          (values version tarball source))))))
 
diff --git a/m4/guix.m4 b/m4/guix.m4
index 716bfb08ec..8be7cca54f 100644
--- a/m4/guix.m4
+++ b/m4/guix.m4
@@ -184,9 +184,8 @@ AC_DEFUN([GUIX_CHECK_GUILE_JSON], [
     [guix_cv_have_recent_guile_json],
     [GUILE_CHECK([retval],
       [(use-modules (json) (ice-9 match))
-       (match (json-string->scm \"[[] { \\\"a\\\": 42 } []]\")
-         (#(("a" . 42)) #t)
-	 (_ #f))])
+       (match (json-string->scm \"[[ { \\\"a\\\": 42 } ]]\")
+         (#((("a" . 42))) #t))])
      if test "$retval" = 0; then
        guix_cv_have_recent_guile_json="yes"
      else
diff --git a/tests/derivations.scm b/tests/derivations.scm
index 36558fe1dd..56b2775248 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -409,6 +409,38 @@
          (equal? (derivation->output-path final1)
                  (derivation->output-path final2)))))
 
+(test-assert "derivation with duplicate fixed-output inputs"
+  ;; Here we create a derivation that has two inputs, both of which are
+  ;; fixed-output leading to the same result.  This test ensures the hash of
+  ;; that derivation is correctly computed, namely that duplicate inputs are
+  ;; coalesced.  See <https://bugs.gnu.org/36777>.
+  (let* ((builder1   (add-text-to-store %store "fixed-builder1.sh"
+                                        "echo -n hello > $out" '()))
+         (builder2   (add-text-to-store %store "fixed-builder2.sh"
+                                        "echo hey; echo -n hello > $out" '()))
+         (hash       (sha256 (string->utf8 "hello")))
+         (fixed1     (derivation %store "fixed"
+                                 %bash `(,builder1)
+                                 #:hash hash #:hash-algo 'sha256))
+         (fixed2     (derivation %store "fixed"
+                                 %bash `(,builder2)
+                                 #:hash hash #:hash-algo 'sha256))
+         (builder3   (add-text-to-store %store "builder.sh"
+                                        "echo fake builder"))
+         (final      (derivation %store "final"
+                                 %bash `(,builder3)
+                                 #:sources (list %bash builder3)
+                                 #:inputs (list (derivation-input fixed1)
+                                                (derivation-input fixed2)))))
+    (and (derivation? final)
+         (match (derivation-inputs final)
+           (((= derivation-input-derivation one)
+             (= derivation-input-derivation two))
+            (and (not (string=? (derivation-file-name one)
+                                (derivation-file-name two)))
+                 (string=? (derivation->output-path one)
+                           (derivation->output-path two))))))))
+
 (test-assert "multiple-output derivation"
   (let* ((builder    (add-text-to-store %store "my-fixed-builder.sh"
                                         "echo one > $out ; echo two > $second"
diff --git a/tests/guix-environment-container.sh b/tests/guix-environment-container.sh
index 78507f76c0..32a5ba1f97 100644
--- a/tests/guix-environment-container.sh
+++ b/tests/guix-environment-container.sh
@@ -144,6 +144,13 @@ HOME="$tmpdir" guix environment --bootstrap --container --user=foognu \
      --share="$tmpdir/umock" \
      -- guile -c "$usertest"
 
+# if not sharing CWD, chdir home
+(
+  cd "$tmpdir" \
+    && guix environment --bootstrap --container --no-cwd --user=foo  \
+            --ad-hoc guile-bootstrap --pure \
+            -- /bin/sh -c 'test $(pwd) == "/home/foo" -a ! -d '"$tmpdir"
+)
 
 # Check the exit code.
 
diff --git a/tests/guix-environment.sh b/tests/guix-environment.sh
index 067ae93822..fb1c1a022d 100644
--- a/tests/guix-environment.sh
+++ b/tests/guix-environment.sh
@@ -84,14 +84,6 @@ echo "(use-modules (guix profiles) (gnu packages bootstrap))
 guix environment --bootstrap --manifest=$tmpdir/manifest.scm --pure \
      -- "$SHELL" -c 'test -f "$GUIX_ENVIRONMENT/bin/guile"'
 
-# if not sharing CWD, chdir home
-(
-  cd "$tmpdir" \
-    && guix environment --bootstrap --container --no-cwd --user=foo  \
-            --ad-hoc guile-bootstrap --pure \
-            -- /bin/sh -c 'test $(pwd) == "/home/foo" -a ! -d '"$tmpdir"
-)
-
 # Make sure '-r' works as expected.
 rm -f "$gcroot"
 expected="`guix environment --bootstrap --ad-hoc guile-bootstrap \
diff --git a/tests/lint.scm b/tests/lint.scm
index 8a9023a7a3..db6dd6dbe1 100644
--- a/tests/lint.scm
+++ b/tests/lint.scm
@@ -74,6 +74,12 @@
     (((and (? lint-warning?) warning))
      (lint-warning-message warning))))
 
+(define (warning-contains? str warnings)
+  "Return true if WARNINGS is a singleton with a warning that contains STR."
+  (match warnings
+    (((? lint-warning? warning))
+     (string-contains (lint-warning-message warning) str))))
+
 
 (test-begin "lint")
 
@@ -366,13 +372,11 @@
     (single-lint-warning-message
      (check-home-page pkg))))
 
-(test-equal "home-page: host not found"
-  "URI http://does-not-exist domain not found: Name or service not known"
+(test-assert "home-page: host not found"
   (let ((pkg (package
                (inherit (dummy-package "x"))
                (home-page "http://does-not-exist"))))
-    (single-lint-warning-message
-     (check-home-page pkg))))
+    (warning-contains? "domain not found" (check-home-page pkg))))
 
 (test-skip (if (http-server-can-listen?) 0 1))
 (test-equal "home-page: Connection refused"