summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/build.scm10
-rw-r--r--doc/guix.texi30
-rw-r--r--gnu/build/file-systems.scm61
-rw-r--r--gnu/build/linux-boot.scm11
-rw-r--r--gnu/local.mk5
-rw-r--r--gnu/packages/audio.scm26
-rw-r--r--gnu/packages/check.scm9
-rw-r--r--gnu/packages/compression.scm4
-rw-r--r--gnu/packages/debian.scm38
-rw-r--r--gnu/packages/disk.scm61
-rw-r--r--gnu/packages/dns.scm21
-rw-r--r--gnu/packages/education.scm18
-rw-r--r--gnu/packages/emacs-xyz.scm176
-rw-r--r--gnu/packages/emulators.scm4
-rw-r--r--gnu/packages/finance.scm25
-rw-r--r--gnu/packages/games.scm8
-rw-r--r--gnu/packages/gl.scm47
-rw-r--r--gnu/packages/gnome.scm4
-rw-r--r--gnu/packages/guile-xyz.scm29
-rw-r--r--gnu/packages/hardware.scm118
-rw-r--r--gnu/packages/haskell-apps.scm4
-rw-r--r--gnu/packages/jami.scm361
-rw-r--r--gnu/packages/linux.scm31
-rw-r--r--gnu/packages/llvm.scm11
-rw-r--r--gnu/packages/lxde.scm34
-rw-r--r--gnu/packages/mail.scm10
-rw-r--r--gnu/packages/music.scm132
-rw-r--r--gnu/packages/networking.scm45
-rw-r--r--gnu/packages/patches/extempore-unbundle-external-dependencies.patch140
-rw-r--r--gnu/packages/patches/llvm-for-extempore.patch118
-rw-r--r--gnu/packages/patches/vlc-fix-test_libvlc_slaves.patch35
-rw-r--r--gnu/packages/rdf.scm4
-rw-r--r--gnu/packages/telephony.scm286
-rw-r--r--gnu/packages/text-editors.scm4
-rw-r--r--gnu/packages/upnp.scm18
-rw-r--r--gnu/packages/video.scm24
-rw-r--r--gnu/packages/web-browsers.scm4
-rw-r--r--gnu/services/base.scm18
-rw-r--r--gnu/services/dns.scm7
-rw-r--r--gnu/system.scm17
-rw-r--r--gnu/system/install.scm6
-rw-r--r--gnu/system/linux-initrd.scm1
-rw-r--r--guix/profiles.scm1
43 files changed, 1274 insertions, 742 deletions
diff --git a/doc/build.scm b/doc/build.scm
index 3907b49caf..2b6d0c4aea 100644
--- a/doc/build.scm
+++ b/doc/build.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -58,7 +59,10 @@
       "guix"))
 
 (define %languages
-  '("de" "en" "es" "fr" "ru" "zh_CN"))
+  ;; The cookbook is currently only translated into German.
+  (if (string=? %manual "guix-cookbook")
+      '("de" "en")
+      '("de" "en" "es" "fr" "ru" "zh_CN")))
 
 (define (texinfo-manual-images source)
   "Return a directory containing all the images used by the user manual, taken
@@ -451,7 +455,9 @@ its <pre class=\"lisp\"> blocks (as produced by 'makeinfo --html')."
                             (lambda (mono)
                               (let ((anchors (collect-anchors mono)))
                                 (process-html mono anchors)))
-                            (find-files #$input "^guix(\\.[a-zA-Z_-]+)?\\.html$"))
+                            (find-files
+                             #$input
+                             "^guix(-cookbook|)(\\.[a-zA-Z_-]+)?\\.html$"))
 
             ;; Next process the multi-node HTML files in two phases: (1)
             ;; collect the list of anchors, and (2) perform
diff --git a/doc/guix.texi b/doc/guix.texi
index a51c65f12f..472b70e092 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -78,6 +78,7 @@ Copyright @copyright{} 2020 Jack Hill@*
 Copyright @copyright{} 2020 Naga Malleswari@*
 Copyright @copyright{} 2020 Brice Waegeneire@*
 Copyright @copyright{} 2020 R Veera Kumar@*
+Copyright @copyright{} 2020 Pierre Langlois@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -11274,7 +11275,7 @@ possible to use the GNU@tie{}Hurd.}.
 A list of objects (usually packages) to collect loadable kernel modules
 from--e.g. @code{(list ddcci-driver-linux)}.
 
-@item @code{kernel-arguments} (default: @code{'("quiet")})
+@item @code{kernel-arguments} (default: @code{%default-kernel-arguments})
 List of strings or gexps representing additional arguments to pass on
 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
 
@@ -21874,6 +21875,25 @@ When true, don't read @var{resolv-file}.
 @item @code{servers} (default: @code{'()})
 Specify IP address of upstream servers directly.
 
+@item @code{addresses} (default: @code{'()})
+For each entry, specify an IP address to return for any host in the
+given domains.  Queries in the domains are never forwarded and always
+replied to with the specified IP address.
+
+This is useful for redirecting hosts locally, for example:
+
+@lisp
+(service dnsmasq-service-type
+         (dnsmasq-configuration
+           (addresses
+             '(; Redirect to a local web-server.
+               "/example.org/127.0.0.1"
+               ; Redirect subdomain to a specific IP.
+               "/subdomain.example.org/192.168.1.42"))))
+@end lisp
+
+Note that rules in @file{/etc/hosts} take precedence over this.
+
 @item @code{cache-size} (default: @code{150})
 Set the size of dnsmasq's cache.  Setting the cache size to zero
 disables caching.
@@ -25491,13 +25511,13 @@ Extra command line options for @code{guix-data-service-process-jobs}.
 @end deftp
 
 @node Linux Services
-@subsubheading Linux Services
+@subsection Linux Services
 
 @cindex oom
 @cindex out of memory killer
 @cindex earlyoom
 @cindex early out of memory daemon
-@subsection Early OOM Service
+@subsubheading Early OOM Service
 
 @uref{https://github.com/rfjakob/earlyoom,Early OOM}, also known as
 Earlyoom, is a minimalist out of memory (OOM) daemon that runs in user
@@ -25557,7 +25577,7 @@ notifications.
 
 @cindex modprobe
 @cindex kernel module loader
-@subsubsection Kernel Module Loader Service
+@subsubheading Kernel Module Loader Service
 
 The kernel module loader service allows one to load loadable kernel
 modules at boot.  This is especially useful for modules that don't
@@ -25733,7 +25753,7 @@ If true, this must be the name of a file to log messages to.
 @end table
 @end deftp
 
-@subsection Dictionary Services
+@subsubheading Dictionary Service
 @cindex dictionary
 The @code{(gnu services dict)} module provides the following service:
 
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index 902563b219..bbea4c766e 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -338,6 +338,58 @@ if DEVICE does not contain a JFS file system."
 
 
 ;;;
+;;; F2FS (Flash-Friendly File System)
+;;;
+
+;;; https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git/tree/include/linux/f2fs_fs.h
+;;; (but using xxd proved to be simpler)
+
+(define-syntax %f2fs-endianness
+  ;; Endianness of F2FS file systems
+  (identifier-syntax (endianness little)))
+
+;; F2FS actually stores two adjacent copies of the superblock.
+;; should we read both?
+(define (f2fs-superblock? sblock)
+  "Return #t when SBLOCK is an F2FS superblock."
+  (let ((magic (bytevector-u32-ref sblock 0 %f2fs-endianness)))
+    (= magic #xF2F52010)))
+
+(define (read-f2fs-superblock device)
+  "Return the raw contents of DEVICE's F2FS superblock as a bytevector, or #f
+if DEVICE does not contain an F2FS file system."
+  (read-superblock device
+                   ;; offset of magic in first copy
+                   #x400
+                   ;; difference between magic of second
+                   ;; and first copies
+                   (- #x1400 #x400)
+                   f2fs-superblock?))
+
+(define (f2fs-superblock-uuid sblock)
+  "Return the UUID of F2FS superblock SBLOCK as a 16-byte bytevector."
+  (sub-bytevector sblock
+                  (- (+ #x460 12)
+                     ;; subtract superblock offset
+                     #x400)
+                  16))
+
+(define (f2fs-superblock-volume-name sblock)
+  "Return the volume name of SBLOCK as a string of at most 512 characters, or
+#f if SBLOCK has no volume name."
+  (utf16->string (sub-bytevector sblock (- (+ #x470 12) #x400) 512) %f2fs-endianness))
+
+(define (check-f2fs-file-system device)
+  "Return the health of a F2FS file system on DEVICE."
+  (match (status:exit-val
+          (system* "fsck.f2fs" "-p" device))
+    ;; 0 and -1 are the only two possibilities
+    ;; (according to the manpage)
+    (0 'pass)
+    (_ 'fatal-error)))
+
+
+;;;
 ;;; LUKS encrypted devices.
 ;;;
 
@@ -472,7 +524,9 @@ partition field reader that returned a value."
         (partition-field-reader read-fat16-superblock
                                 fat16-superblock-volume-name)
         (partition-field-reader read-jfs-superblock
-                                jfs-superblock-volume-name)))
+                                jfs-superblock-volume-name)
+        (partition-field-reader read-f2fs-superblock
+                                f2fs-superblock-volume-name)))
 
 (define %partition-uuid-readers
   (list (partition-field-reader read-iso9660-superblock
@@ -486,7 +540,9 @@ partition field reader that returned a value."
         (partition-field-reader read-fat16-superblock
                                 fat16-superblock-uuid)
         (partition-field-reader read-jfs-superblock
-                                jfs-superblock-uuid)))
+                                jfs-superblock-uuid)
+        (partition-field-reader read-f2fs-superblock
+                                f2fs-superblock-uuid)))
 
 (define read-partition-label
   (cut read-partition-field <> %partition-label-readers))
@@ -582,6 +638,7 @@ were found."
      ((string-prefix? "btrfs" type) check-btrfs-file-system)
      ((string-suffix? "fat" type) check-fat-file-system)
      ((string-prefix? "jfs" type) check-jfs-file-system)
+     ((string-prefix? "f2fs" type) check-f2fs-file-system)
      ((string-prefix? "nfs" type) (const 'pass))
      (else #f)))
 
diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm
index d1c9f47f33..c6f9df5f29 100644
--- a/gnu/build/linux-boot.scm
+++ b/gnu/build/linux-boot.scm
@@ -565,10 +565,13 @@ upon error."
             ;; The "--root=SPEC" kernel command-line option always provides a
             ;; string, but the string can represent a device, a UUID, or a
             ;; label.  So check for all three.
-            (let ((root (cond ((string-prefix? "/" root) root)
-                              ((uuid root) => identity)
-                              (else (file-system-label root)))))
-              (mount-root-file-system (canonicalize-device-spec root)
+            (let ((device-spec (cond ((string-prefix? "/" root) root)
+                                     ((uuid root) => identity)
+                                     ((string-contains root ":/") #f) ; nfs
+                                     (else (file-system-label root)))))
+              (mount-root-file-system (if device-spec
+                                          (canonicalize-device-spec device-spec)
+                                          root)
                                       root-fs-type
                                       #:volatile-root? volatile-root?
                                       #:flags root-fs-flags
diff --git a/gnu/local.mk b/gnu/local.mk
index f48c6803ee..445c0cf3f9 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -33,6 +33,7 @@
 # Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 # Copyright © 2020 Felix Gruber <felgru@posteo.net>
 # Copyright © 2020 Ryan Prior <rprior@protonmail.com>
+# Copyright © 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
 #
 # This file is part of GNU Guix.
 #
@@ -278,6 +279,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/ipfs.scm			\
   %D%/packages/irc.scm  			\
   %D%/packages/iso-codes.scm			\
+  %D%/packages/jami.scm				\
   %D%/packages/java.scm				\
   %D%/packages/java-compression.scm		\
   %D%/packages/java-graphics.scm		\
@@ -889,6 +891,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/evolution-data-server-libical-compat.patch	\
   %D%/packages/patches/exiv2-CVE-2017-14860.patch		\
   %D%/packages/patches/exiv2-CVE-2017-14859-14862-14864.patch	\
+  %D%/packages/patches/extempore-unbundle-external-dependencies.patch	\
   %D%/packages/patches/extundelete-e2fsprogs-1.44.patch		\
   %D%/packages/patches/fastcap-mulGlobal.patch			\
   %D%/packages/patches/fastcap-mulSetup.patch			\
@@ -1206,7 +1209,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/lirc-localstatedir.patch			\
   %D%/packages/patches/lirc-reproducible-build.patch		\
   %D%/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch	\
-  %D%/packages/patches/llvm-for-extempore.patch			\
   %D%/packages/patches/lm-sensors-hwmon-attrs.patch		\
   %D%/packages/patches/lrcalc-includes.patch    		\
   %D%/packages/patches/lrzip-CVE-2017-8842.patch		\
@@ -1552,7 +1554,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/vinagre-newer-freerdp.patch             \
   %D%/packages/patches/vinagre-newer-rdp-parameters.patch      \
   %D%/packages/patches/virglrenderer-CVE-2017-6386.patch 	\
-  %D%/packages/patches/vlc-fix-test_libvlc_slaves.patch \
   %D%/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch		\
   %D%/packages/patches/vorbis-tools-CVE-2014-9640.patch		\
   %D%/packages/patches/vorbis-tools-CVE-2015-6749.patch		\
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index e25d0978d0..32839ab8c9 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -30,6 +30,7 @@
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020 Jonathan Frederickson <jonathan@terracrypt.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1855,6 +1856,31 @@ for headphone prolonged listening to disable superstereo fatigue without
 essential distortions.")
     (license license:expat)))
 
+(define-public ladspa-bs2b
+  (package
+    (name "ladspa-bs2b")
+    (version "0.9.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/bs2b/plugins/LADSPA%20plugin/"
+                    version "/" name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1b4aipbj1ba5k99gbc7gmgy14sywyrjd8rpyqj5l905j0mjv8jg2"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs `(("ladspa" ,ladspa)
+              ("libbs2b" ,libbs2b)))
+    (home-page "https://sourceforge.net/projects/bs2b/")
+    (synopsis "Bauer stereophonic-to-binaural DSP - LADSPA plugin")
+    (description "The Bauer stereophonic-to-binaural DSP (bs2b) library and
+plugins is designed to improve headphone listening of stereo audio records.
+Recommended for headphone prolonged listening to disable superstereo fatigue
+without essential distortions.  This package contains a LADSPA plugin for use
+with applications that support them (e.g. PulseAudio).")
+    (license license:gpl2+)))
+
 (define-public liblo
   (package
     (name "liblo")
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 2629e88323..55733ff299 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -31,6 +31,7 @@
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2506,11 +2507,10 @@ provides a simple way to achieve this.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'skip-broken-test
+         (add-after 'unpack 'fix-test
            (lambda _
              (substitute* "tests/test-umockdev.c"
-               (("/\\* sys/ in other dir")
-                (string-append "return; // ")))
+               (("/run") "/tmp"))
              #t)))))
     (native-inputs
      `(("vala" ,vala)
@@ -2523,8 +2523,7 @@ provides a simple way to achieve this.")
     (inputs
      `(("glib" ,glib)
        ("eudev" ,eudev)
-       ("libgudev" ,libgudev)
-       ("gobject-introspection" ,gobject-introspection)))
+       ("libgudev" ,libgudev)))
     (home-page "https://github.com/martinpitt/umockdev/")
     (synopsis "Mock hardware devices for creating unit tests")
     (description "umockdev mocks hardware devices for creating integration
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index fb58d25aeb..b599f3a603 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1942,7 +1942,7 @@ download times, and other distribution and storage costs.")
 (define-public quazip
   (package
     (name "quazip")
-    (version "0.8.1")
+    (version "0.9")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1951,7 +1951,7 @@ download times, and other distribution and storage costs.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1g473gnsbkvxpsv8lbsmhspn7jnq86b05zzgqh11r581v8ndvz5s"))))
+                "0psvf3d9akyyx3bckc9325nmbp97xiagf8la4vhca5xn2f430fbn"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ;no test
diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm
index ff4cccb03d..a3bbd2b907 100644
--- a/gnu/packages/debian.scm
+++ b/gnu/packages/debian.scm
@@ -27,6 +27,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages wget)
   #:use-module (gnu packages perl))
 
 (define-public debian-archive-keyring
@@ -190,3 +191,40 @@ scratch, without requiring the availability of @code{dpkg} or @code{apt}.
 It does this by downloading .deb files from a mirror site, and carefully
 unpacking them into a directory which can eventually be chrooted into.")
     (license license:gpl2)))
+
+
+(define-public apt-mirror
+  (let ((commit "e664486a5d8947c2579e16dd793d762ea3de4202")
+        (revision "1"))
+    (package
+      (name "apt-mirror")
+      (version (git-version "0.5.4" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/apt-mirror/apt-mirror/")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0qj6b7gldwcqyfs2kp6amya3ja7s4vrljs08y4zadryfzxf35nqq"))))
+      (build-system gnu-build-system)
+      (outputs '("out"))
+      (arguments
+       `(#:tests? #f
+         ;; sysconfdir is not PREFIXed in the makefile but DESTDIR is
+         ;; honored correctly; we therefore use DESTDIR for our
+         ;; needs. A more correct fix would involve patching.
+         #:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out"))
+                            "PREFIX=/")
+         #:phases (modify-phases %standard-phases (delete 'configure))))
+      (inputs
+       `(("wget" ,wget)
+         ("perl" ,perl)))
+      (home-page "http://apt-mirror.github.io/")
+      (synopsis "Script for mirroring a Debian repository")
+      (description
+       "apt-mirror is a small tool that provides the ability to
+selectively mirror Debian and Ubuntu GNU/Linux distributions or any
+other apt sources typically provided by open source developers.")
+      (license license:gpl2))))
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index 69743980e5..f8d284cf24 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -103,16 +103,34 @@
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
-       (list "--disable-systemd"
-             (string-append "--sysconfdir="
-                            (assoc-ref %outputs "out")
-                            "/etc"))
+       (list
+        "--disable-systemd"
+        (string-append "--sysconfdir="
+                       (assoc-ref %outputs "out")
+                       "/etc")
+        ;; udevil expects these programs to be run with uid set as root.
+        ;; user has to manually add these programs to setuid-programs.
+        ;; mount and umount are default setuid-programs in guix system.
+        "--with-mount-prog=/run/setuid-programs/mount"
+        "--with-umount-prog=/run/setuid-programs/umount"
+        "--with-losetup-prog=/run/setuid-programs/losetup"
+        "--with-setfacl-prog=/run/setuid-programs/setfacl")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'remove-root-reference
            (lambda _
              (substitute* "src/Makefile.in"
                (("-o root -g root") ""))
+             #t))
+         (add-after 'unpack 'patch-udevil-reference
+           ;; udevil expects itself to be run with uid set as root.
+           ;; devmon also expects udevil to be run with uid set as root.
+           ;; user has to manually add udevil to setuid-programs.
+           (lambda _
+             (substitute* "src/udevil.c"
+               (("/usr/bin/udevil") "/run/setuid-programs/udevil"))
+             (substitute* "src/devmon"
+               (("`which udevil 2>/dev/null`") "/run/setuid-programs/udevil"))
              #t)))))
     (native-inputs
      `(("intltool" ,intltool)
@@ -919,9 +937,8 @@ since they are better handled by external tools.")
      (origin
        (method url-fetch)
        (uri
-        (string-append "https://sourceforge.net/projects/xfe/files/xfe/"
-                       version
-                       "/xfe-" version ".tar.gz"))
+        (string-append "mirror://sourceforge/xfe/xfe/" version "/"
+                       "xfe-" version ".tar.gz"))
        (sha256
         (base32 "1fl51k5jm2vrfc2g66agbikzirmp0yb0lqhmsssixfb4mky3hpzs"))))
     (build-system gnu-build-system)
@@ -939,17 +956,29 @@ since they are better handled by external tools.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-xferc-path
+         (add-after 'unpack 'patch-xfe-paths
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out     (assoc-ref outputs "out"))
-                    (xferc   (string-append out "/share/xfe/xferc")))
+             (let*
+                 ((out     (assoc-ref outputs "out"))
+                  (share   (string-append out "/share"))
+                  (xferc   (string-append out "/share/xfe/xferc"))
+                  (xfe-theme   (string-append out "/share/xfe/icons/xfe-theme")))
+               ;; Correct path for xfe registry.
+               (substitute* "src/foxhacks.cpp"
+                 (("/etc:/usr/share:/usr/local/share") share))
+               ;; Correct path for xfe configuration.
                (substitute* "src/XFileExplorer.cpp"
-                 (("/usr/share/xfe/xferc") xferc))
-               #t))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out")))
-         (list (string-append "BASH_COMPLETION_DIR=" out
-                              "/share/bash-completion/completions")))))
+                 (("/usr/share/xfe/xferc") xferc)
+                 (("/usr/local/share/xfe/xferc") xferc)
+                 (("/opt/local/share/xfe/xferc") xferc))
+               ;; Correct path for xfe icons.
+               (substitute* "src/xfedefs.h"
+                 (((string-append
+                    "~/.config/xfe/icons/xfe-theme:"
+                    "/usr/local/share/xfe/icons/xfe-theme:"
+                    "/usr/share/xfe/icons/xfe-theme"))
+                  xfe-theme))
+               #t))))))
     (synopsis "File Manager for X-Based Graphical Systems")
     (description"XFE (X File Explorer) is a file manager for X.  It is based on
 the popular but discontinued, X Win Commander.  It aims to be the file manager
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 00c99d90ad..7ac1611cbf 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2020 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -878,22 +879,16 @@ System (HNS) peer-to-peer network.")
 (define-public libmicrodns
   (package
     (name "libmicrodns")
-    (version "0.0.10")
+    (version "0.1.2")
     (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/videolabs/libmicrodns")
-                    (commit version)))
-              (file-name (git-file-name name version))
+              (method url-fetch)
+              (uri (string-append "https://github.com/videolabs/libmicrodns/"
+                                  "releases/download/" version "/microdns-"
+                                  version ".tar.xz"))
               (sha256
                (base32
-                "1xvl9k49ng35wbsqmnjnyqvkyjf8dcq2ywsq3jp3wh0rgmxhq2fh"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+                "0p4va18zxgmzcdwhlbg2mmjwswlbgqy4ay5vaxrw7cxmhsflnv36"))))
+    (build-system meson-build-system)
     (home-page "https://github.com/videolabs/libmicrodns")
     (synopsis "Minimal mDNS resolver library")
     (description "@code{libmicrodns} provides a minimal implementation of a
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index a1fee29c4e..d6c2cd02c3 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -606,14 +606,14 @@ Portuguese, Spanish and Italian.")
 (define-public fet
   (package
     (name "fet")
-    (version "5.44.0")
+    (version "5.44.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.lalescu.ro/liviu/fet/download/"
                            "fet-" version ".tar.bz2"))
        (sha256
-        (base32 "13q3b0g1zz885g15gir8fbalvix8sy42v1p429h0751490wq5c3h"))))
+        (base32 "1bji4910v6adhngdh5ajz5bxam9z3yqnh8d1h1xajy6npm6qq3nx"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -632,14 +632,14 @@ Portuguese, Spanish and Italian.")
      `(("qtbase" ,qtbase)))
     (home-page "https://www.lalescu.ro/liviu/fet/")
     (synopsis "Timetabling software")
-    (description "FET is a program for automatically scheduling the
-timetable of a school, high-school or university.  It uses a fast and
-efficient timetabling algorithm.
+    (description
+     "FET is a program for automatically scheduling the timetable of a school,
+high-school or university.  It uses a fast and efficient timetabling
+algorithm.
 
-Usually, FET is able to solve a complicated timetable in maximum 5-20
-minutes.  For simpler timetables, it may take a shorter time, under
-5 minutes (in some cases, a matter of seconds).  For extremely
-difficult timetables, it may take a longer time, a matter of hours.")
+Usually, FET is able to solve a complicated timetable in maximum 5-20 minutes.
+For extremely difficult timetables, it may take a longer time, a matter of
+hours.")
     (license license:agpl3+)))
 
 (define-public klavaro
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index d09df46eb3..af62e571a5 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -1323,33 +1323,32 @@ incrementally confined in Isearch manner.")
 (define-public emacs-emms
   (package
     (name "emacs-emms")
-    (version "5.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/emms/emms-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "00hnv7jjgb2simgrf7gf2y1cyg2syk7kj1hkbac146hlgxk8ngj1"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (substitute* "Makefile"
-                    (("/usr/bin/install-info")
-                     ;; No need to use 'install-info' since it would create a
-                     ;; useless 'dir' file.
-                     "true")
-                    (("^INFODIR=.*")
-                     ;; Install Info files to $out/share/info, not $out/info.
-                     "INFODIR := $(PREFIX)/share/info\n")
-                    (("/site-lisp/emms")
-                     ;; Install directly in share/emacs/site-lisp, not in a
-                     ;; sub-directory.
-                     "/site-lisp")
-                    (("^all: (.*)\n" _ rest)
-                     ;; Build 'emms-print-metadata'.
-                     (string-append "all: " rest " emms-print-metadata\n")))
-                  #t))))
+    (version "5.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnu/emms/emms-" version ".tar.gz"))
+       (sha256
+        (base32 "1nd7sb6pva7qb1ki6w0zhd6zvqzd7742kaqi0f3v4as5jh09l6nr"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "Makefile"
+             (("/usr/bin/install-info")
+              ;; No need to use 'install-info' since it would create a
+              ;; useless 'dir' file.
+              "true")
+             (("^INFODIR=.*")
+              ;; Install Info files to $out/share/info, not $out/info.
+              "INFODIR := $(PREFIX)/share/info\n")
+             (("/site-lisp/emms")
+              ;; Install directly in share/emacs/site-lisp, not in a
+              ;; sub-directory.
+              "/site-lisp")
+             (("^all: (.*)\n" _ rest)
+              ;; Build 'emms-print-metadata'.
+              (string-append "all: " rest " emms-print-metadata\n")))
+           #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((guix build gnu-build-system)
@@ -2465,7 +2464,7 @@ work with Emacs 24 and 25.")
 
 (define-public emacs-extempore-mode
   ;; Use the latest commit at time of packaging.  There are no releases or tags.
-  (let ((commit "848ad0084f27b92d1cf98dabffbad29f959a642d")
+  (let ((commit "09518ae6650d7be33a4633a4c0f31b7130d04c6e")
         (revision "1"))
     (package
       (name "emacs-extempore-mode")
@@ -2478,7 +2477,7 @@ work with Emacs 24 and 25.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "00wr025php7nl33x541s9rjm99hj0jbdcmnw9ljx5hqpm04aqm7c"))))
+          (base32 "0hfza9lzdsz94gxhmzyp9fwviscv19rmnjgd0q613faayn11sjsp"))))
       (build-system emacs-build-system)
       (home-page "https://github.com/extemporelang/extempore-emacs-mode")
       (synopsis "Emacs major mode for Extempore source files")
@@ -7525,24 +7524,47 @@ special variables.  An interface to GitLab’s CI file linter is also provided
 via @code{gitlab-ci-lint}.")
     (license license:gpl3+)))
 
-(define-public emacs-web-mode
+(define-public emacs-gitlab-snip-helm
   (package
-    (name "emacs-web-mode")
-    (version "16")
+    (name "emacs-gitlab-snip-helm")
+    (version "0.0.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/fxbois/web-mode.git")
-                    (commit (string-append "v" version))))
+                    (url "https://gitlab.com/sasanidas/gitlab-snip-helm.git")
+                    (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "17dw6a8d0p304f2sa4f9zwd8r48w2wbkc3fvbmxwlg4w12h7cwf0"))))
+                "1c5js19zyb1z61hapvbfcl5jhrjqij46cxldgqij6al0scw44dga"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-helm" ,emacs-helm)))
+    (home-page "https://gitlab.com/sasanidas/gitlab-snip-helm/")
+    (synopsis "GitLab snippet API interaction for Emacs")
+    (description "This package provides GitLab snippet API interaction for
+Emacs.")
+    (license license:gpl3+)))
+
+(define-public emacs-web-mode
+  (package
+    (name "emacs-web-mode")
+    (version "17")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/fxbois/web-mode.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0jr5a1nzp8nbdng0k2fcaymiiv9ngrbknbrqaswgqn3akvx793jk"))))
     (build-system emacs-build-system)
     (synopsis "Major mode for editing web templates")
-    (description "Web-mode is an Emacs major mode for editing web templates
+    (description "Web mode is an Emacs major mode for editing web templates
 aka HTML files embedding parts (CSS/JavaScript) and blocks (pre rendered by
-client/server side engines).  Web-mode is compatible with many template
+client/server side engines).  Web mode is compatible with many template
 engines: PHP, JSP, ASP, Django, Twig, Jinja, Mustache, ERB, FreeMarker,
 Velocity, Cheetah, Smarty, CTemplate, Mustache, Blade, ErlyDTL, Go Template,
 Dust.js, React/JSX, Angularjs, ejs, etc.")
@@ -13262,7 +13284,7 @@ files to be expanded upon opening them.")
 (define-public emacs-parsebib
   (package
     (name "emacs-parsebib")
-    (version "2.3.1")
+    (version "2.3.3")
     (source
      (origin
        (method git-fetch)
@@ -13271,45 +13293,43 @@ files to be expanded upon opening them.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1bnqnxkb9dnl0fjrrjx0xn9jsqki2h8ygw3d5dm4bl79smah3qkh"))))
+        (base32 "0mpgyy9qfb5x4fvlmb274hgayjbwf0bgk65dxyx31zikjwpcd56p"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/joostkremers/parsebib")
-    (synopsis "Library for parsing bib files")
+    (synopsis "Library for parsing @file{.bib} files")
     (description
-     "This package provides an Emacs library for parsing bib files.")
+     "This package provides an Emacs library for parsing @file{.bib} files.")
     (license license:gpl3+)))
 
 (define-public emacs-ebib
-  (let ((commit "99bd909f47f71e024ce324981109b73a50e82fba"))
-    (package
-      (name "emacs-ebib")
-      (version "2.21")
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/joostkremers/ebib.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "131vgl4d1j9s4055x88409w19q52x2m0x08b961hylp7yb5ljzgh"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-parsebib" ,emacs-parsebib)))
-      (home-page "https://joostkremers.github.io/ebib/")
-      (synopsis "BibTeX database manager for Emacs")
-      (description
-       "Ebib is a BibTeX database manager that runs in GNU Emacs.
-With Ebib you can create, sort and manage your .bib database files,
-all within Emacs.  It supports searching, multi-line field values and
-@@String and @@Preamble definitions.  Ebib integrates with (La)TeX
-mode, Org mode and other Emacs editing modes.")
-      ;; The Ebib source files are released under a BSD license with
-      ;; the exception of org-ebib.el, which is released under the GNU
-      ;; GPL.
-      (license (list license:bsd-3
-                     license:gpl3+)))))
+  (package
+    (name "emacs-ebib")
+    (version "2.22.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/joostkremers/ebib.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0spiz5r2y4pdpyc4d3f9w228giq0j9rm8f5h5akzn5rwiq9pfkwz"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-parsebib" ,emacs-parsebib)))
+    (home-page "https://joostkremers.github.io/ebib/")
+    (synopsis "BibTeX database manager for Emacs")
+    (description
+     "Ebib is a BibTeX database manager that runs in GNU Emacs.
+With Ebib you can create, sort and manage your @file{.bib} database files, all
+within Emacs.  It supports searching, multi-line field values and
+@samp{@@String} and @samp{@@Preamble} definitions.  Ebib integrates
+with (La)TeX mode, Org mode and other Emacs editing modes.")
+    ;; The Ebib source files are released under a BSD license with
+    ;; the exception of org-ebib.el, which is released under the GNU
+    ;; GPL.
+    (license (list license:bsd-3
+                   license:gpl3+))))
 
 (define-public emacs-biblio
   (package
@@ -19529,9 +19549,9 @@ be used in @code{dired-mode}.")
       (license license:gpl3+))))
 
 (define-public emacs-exwm-edit
-  (let ((commit "961c0f3ea45766b888c73d7353da13d329538034")
+  (let ((commit "bc25ba094b383be3c650ca0b7e1534efe2bb154f")
         (version "0.0.1")
-        (revision "1"))
+        (revision "2"))
     (package
       (name "emacs-exwm-edit")
       (version (git-version version revision commit))
@@ -19544,7 +19564,7 @@ be used in @code{dired-mode}.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "087pk5ckx753qrn6xpka9khhlp7iqlz76w7861x90av2f5cgy6fw"))))
+           "1z1ya9xgknka3dy3b3x8zzfkxdx5jqsi8q5aqkvxjxa6n7mmqdwv"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-exwm" ,emacs-exwm)))
@@ -21122,14 +21142,14 @@ Emacs that integrate with major modes like Org-mode.")
 (define-public emacs-modus-operandi-theme
   (package
     (name "emacs-modus-operandi-theme")
-    (version "0.7.0")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "modus-operandi-theme-" version ".el"))
        (sha256
-        (base32 "17zvcqplbl3rk39k61v43ganzv06j49rlyickanwll5m1a3iibw2"))))
+        (base32 "09lw556jphrxrmwxkwzfgd4r7ylz99m8awxka4sfj5sa8fbjb3g8"))))
     (build-system emacs-build-system)
     (home-page "https://gitlab.com/protesilaos/modus-themes")
     (synopsis "Accessible light theme (WCAG AAA)")
@@ -21143,14 +21163,14 @@ standard.  This is the highest standard of its kind.")
 (define-public emacs-modus-vivendi-theme
   (package
     (name "emacs-modus-vivendi-theme")
-    (version "0.7.0")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "modus-vivendi-theme-" version ".el"))
        (sha256
-        (base32 "1w4vrg39dghghkvll3h4kmzykc3zpp6pbychb39gcc13z2b06v8g"))))
+        (base32 "0hwkzbx7a9scdr589sb7hw90lsm8yxcn3y5xr3bpyxf8rkr2zl4c"))))
     (build-system emacs-build-system)
     (home-page "https://gitlab.com/protesilaos/modus-themes")
     (synopsis "Accessible dark theme (WCAG AAA)")
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 58d6c73ee2..85e2016e49 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -1204,14 +1204,14 @@ multi-system game/emulator system.")
 (define-public scummvm
   (package
     (name "scummvm")
-    (version "2.1.1")
+    (version "2.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://www.scummvm.org/frs/scummvm/" version
                            "/scummvm-" version ".tar.xz"))
        (sha256
-        (base32 "1a6waf1ybp91nwva8g650cljlfb1di4l0jv13vg6yfgkas9pclsp"))))
+        (base32 "1c4fz1nfg0nqnqx9iipayhzcsiqdmfxm2i95nw9dbhshhsdnrhf4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                                 ;require "git"
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index c31b87ec19..61d807190c 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2020 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2020 Christopher Lemmer Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2020 Tom Zander <tomz@freedommail.ch>
+;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -197,7 +198,7 @@ and dynamically with report tools based on filtering and graphical charts.")
 (define-public ledger
   (package
     (name "ledger")
-    (version "3.1.3")
+    (version "3.2.0")
     (source
      (origin
        (method git-fetch)
@@ -206,16 +207,32 @@ and dynamically with report tools based on filtering and graphical charts.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0bfnrqrd6wqgsngfpqi30xh6yy86pwl25iwzrqy44q31r0zl4mm3"))))
+        (base32 "1l5c9jf2wnly6ncm9civ8i7v47xld15g1y7wpl0hqwgbfyffwjci"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags
+     `(#:modules (,@%cmake-build-system-modules
+                  ((guix build python-build-system) #:select (python-version)))
+       #:imported-modules (,@%cmake-build-system-modules
+                           (guix build python-build-system))
+       #:configure-flags
        `("-DBUILD_DOCS:BOOL=ON"
          "-DBUILD_WEB_DOCS:BOOL=ON"
          "-DUSE_PYTHON:BOOL=ON"
          "-DCMAKE_INSTALL_LIBDIR:PATH=lib")
        #:phases
-       (modify-phases %standard-phases
+       (modify-phases (@ (guix build cmake-build-system) %standard-phases)
+         (add-after 'unpack 'fix-python-installation-directory
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; By default the package attempts to install its Python bindings
+             ;; to the Python store directory, which obviously does not work.
+             ;; Passing -DPython_SITEARCH in #:configure-flags has no effect.
+             (let ((python-version (python-version (assoc-ref inputs "python")))
+                   (out (assoc-ref outputs "out")))
+               (substitute* "src/CMakeLists.txt"
+                 (("DESTINATION \\$\\{Python_SITEARCH\\}")
+                  (string-append "DESTINATION " out "/lib/python"
+                                 python-version "/site-packages")))
+               #t)))
          (add-before 'configure 'install-examples
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((examples (string-append (assoc-ref outputs "out")
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index caa1e8d37c..624bb9b78e 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -4856,7 +4856,7 @@ small robot living in the nano world, repair its maker.")
 (define-public teeworlds
   (package
     (name "teeworlds")
-    (version "0.7.4")
+    (version "0.7.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4865,7 +4865,7 @@ small robot living in the nano world, repair its maker.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1lxdb1k2cdj2421vyz1z0ximzfnpkh2y4y84zpn2gqsa1nzwbryb"))
+                "169dl83q08zl4h813az8hjs4rs3dms9yjn6bnsld4fjcj0imvvc6"))
               (modules '((guix build utils)
                          (ice-9 ftw)
                          (ice-9 regex)
@@ -6176,7 +6176,7 @@ affect gameplay).")
   (package
     (inherit chocolate-doom)
     (name "crispy-doom")
-    (version "5.7.2")
+    (version "5.8.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -6184,7 +6184,7 @@ affect gameplay).")
                     (commit (string-append "crispy-doom-" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "002aqbgsksrgzqridwdlkrjincaxh0dkvwlrbb8d2f3kwk7lj4fq"))))
+               (base32 "1b6gn0dysv631jynh769whww9xcss1gms78sz3nrn855q1dsvcb4"))))
     (native-inputs
      (append
       (package-native-inputs chocolate-doom)
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 710c602a96..941d0adcca 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -742,30 +743,34 @@ and surfaces, receiving input and events.")
     (license license:zlib)))
 
 (define-public nanovg-for-extempore
-  (package
-    (name "nanovg-for-extempore")
-    (version "0.7.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/extemporelang/nanovg/"
-                                  "archive/"  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0ivs1sagq19xiw8jxd9f8w2b39svi0n9hrbmdvckwvqg95r8701g"))))
-    (build-system cmake-build-system)
-    (arguments `(#:tests? #f)) ; no tests included
-    (inputs
-     `(("mesa" ,mesa)))
-    ;; Extempore refuses to build on architectures other than x86_64
-    (supported-systems '("x86_64-linux"))
-    (home-page "https://github.com/extemporelang/nanovg")
-    (synopsis "2D vector drawing library on top of OpenGL")
-    (description "NanoVG is small antialiased vector graphics rendering
+  (let ((version "0.7.1")
+        (revision "0")
+        (commit "3c60175fcc2e5fe305b04355cdce35d499c80310"))
+    (package
+      (name "nanovg-for-extempore")
+      (version (git-version version revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/extemporelang/nanovg.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0ddn3d3mxqn8hj9967v3pss7lz1wn08pcdnqzc118g7yjkq7hxzy"))))
+      (build-system cmake-build-system)
+      (arguments `(#:tests? #f))        ; no tests included
+      (inputs
+       `(("mesa" ,mesa)))
+      ;; Extempore refuses to build on architectures other than x86_64
+      (supported-systems '("x86_64-linux"))
+      (home-page "https://github.com/extemporelang/nanovg")
+      (synopsis "2D vector drawing library on top of OpenGL")
+      (description "NanoVG is small antialiased vector graphics rendering
 library for OpenGL.  It has lean API modeled after HTML5 canvas API.  It is
 aimed to be a practical and fun toolset for building scalable user interfaces
 and visualizations.")
-    (license license:zlib)))
+      (license license:zlib))))
 
 (define-public gl2ps
   (package
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 0a034bec2d..cd986af643 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -3776,7 +3776,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
 (define-public five-or-more
   (package
     (name "five-or-more")
-    (version "3.32.1")
+    (version "3.32.2")
     (source
      (origin
        (method url-fetch)
@@ -3784,7 +3784,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
                            (version-major+minor version) "/"
                            "five-or-more-" version ".tar.xz"))
        (sha256
-        (base32 "0xw05dd2dwi9vsph9h158b4n89s5k07xrh6bjz1icm0pdmjwhpgk"))))
+        (base32 "19pf8wzbf3ciqf2k4bj9sddvyhckfd62x86pnqr6s8h4vn9jc6ii"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 3ae7e9ff92..d97aacdf6b 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -23,7 +23,7 @@
 ;;; Copyright © 2019 swedebugia <swedebugia@riseup.net>
 ;;; Copyright © 2019, 2020 Amar Singh <nly@disroot.org>
 ;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
-;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net>
+;;; Copyright © 2019, 2020 Martin Becze <mjbecze@riseup.net>
 ;;; Copyright © 2020 Evan Straw <evan.straw99@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -1861,7 +1861,13 @@ many readers as needed).")
               ("guile" ,guile-2.2)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (arguments
-     '(#:configure-flags (list "--with-ncursesw"  ; Unicode support
+     `(#:modules ((guix build gnu-build-system)
+                  ((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  (guix build utils))
+       #:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:configure-flags (list "--with-ncursesw" ; Unicode support
                                "--with-gnu-filesystem-hierarchy")
        #:phases
        (modify-phases %standard-phases
@@ -1876,8 +1882,8 @@ many readers as needed).")
                     (files (find-files dir ".scm")))
                (substitute* files
                  (("\"libguile-ncurses\"")
-                  (format #f "\"~a/lib/guile/2.2/libguile-ncurses\""
-                          out)))
+                  (format #f "\"~a/lib/guile/~a/libguile-ncurses\""
+                          out (target-guile-effective-version))))
                #t))))))
     (home-page "https://www.gnu.org/software/guile-ncurses/")
     (synopsis "Guile bindings to ncurses")
@@ -1886,6 +1892,14 @@ many readers as needed).")
 library.")
     (license license:lgpl3+)))
 
+(define-public guile3.0-ncurses
+  (package
+    (inherit guile-ncurses)
+    (name "guile3.0-ncurses")
+    (version "3.0")
+    (inputs `(("ncurses" ,ncurses)
+              ("guile" ,guile-3.0)))))
+
 (define-public guile-ncurses/gpm
   (package
     (inherit guile-ncurses)
@@ -1893,6 +1907,13 @@ library.")
     (inputs `(("ncurses" ,ncurses/gpm)
               ("guile" ,guile-2.2)))))
 
+(define-public guile3.0-ncurses/gpm
+  (package
+    (inherit guile3.0-ncurses)
+    (name "guile3.0-ncurses-with-gpm")
+    (inputs `(("ncurses" ,ncurses/gpm)
+              ("guile" ,guile-3.0)))))
+
 (define-public guile-lib
   (package
     (name "guile-lib")
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index 114332455e..ce3f396d0a 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,15 +19,24 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages hardware)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages crypto)
+  #:use-module (gnu packages documentation)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages openldap)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages polkit)
+  #:use-module (gnu packages protobuf)
   #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
@@ -344,3 +354,111 @@ supported by the Linux kernel.")
        "Rkdeveloptool can read from and write to RockChip devices over USB, such
 as the Pinebook Pro.")
       (license license:gpl2+))))
+
+(define-public libqb
+  (package
+    (name "libqb")
+    ;; NOTE: We are using a Release Candidate version (for 2.0) here because
+    ;; of the linker issues with the previous release.
+    (version "1.9.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/ClusterLabs/libqb/releases/download/v"
+                    version "/libqb-" version ".tar.xz"))
+              (sha256
+               (base32
+                "008vvw504kh40br5v2xkqavnp9vpmjvf768faqzv1d00fd53ingn"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("xmllint" ,libxml2)))
+    (home-page "https://clusterlabs.github.io/libqb/")
+    (synopsis "Library providing high performance logging, tracing, ipc, and poll")
+    (description "Libqb is a library with the primary purpose of providing
+high-performance, reusable features for client-server architecture, such as
+logging, tracing, inter-process communication (IPC), and polling.  Libqb is
+not intended to be an all-encompassing library, but instead provide focused
+APIs that are highly tuned for maximum performance for client-server
+applications.")
+    (license license:lgpl2.1)))
+
+(define-public usbguard
+  (package
+    (name "usbguard")
+    (version "0.7.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/USBGuard/usbguard/releases/download/usbguard-"
+                    version "/usbguard-" version ".tar.gz"))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32 "0gzhs8s4aka86mkcjib36z54si939ki4bmk46p6v8kln1fixad3j"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'patch-makefile
+           (lambda _
+             ;; Do not create log directory.
+             (substitute* "Makefile" ((".*/log/usbguard.*") ""))
+             ;; Disable LDAP tests: they use 'sudo'.
+             (substitute* "src/Tests/Makefile.am"
+               (("WITH_LDAP") "FALSE"))
+             #t))
+         (add-after 'install 'delete-static-library
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; It can't be direclty disabled since it's needed for the tests.
+             (delete-file (string-append (assoc-ref outputs "out")
+                                         "/lib/libusbguard.a"))
+             #t))
+         (add-after 'install 'install-zsh-completion
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (site-functions
+                     (string-append out "/share/zsh/site-functions")))
+               (mkdir-p site-functions)
+               (copy-file "scripts/usbguard-zsh-completion"
+                          (string-append site-functions "/_usbguard"))
+               #t))))
+       #:make-flags
+       (list (string-append "BASH_COMPLETION_DIR="
+                            (assoc-ref %outputs "out")
+                            "/etc/bash_completion.d"))
+       #:configure-flags
+       (list
+        "--localstatedir=/var"
+        "--with-bundled-pegtl"
+        "--enable-systemd=no"
+        "--with-ldap"
+        "--with-dbus"
+        "--with-polkit")))
+    (inputs
+     `(("audit" ,audit)
+       ("catch" ,catch-framework)
+       ("dbus-glib" ,dbus-glib)
+       ("ldap" ,openldap)
+       ("libcap-ng" ,libcap-ng)
+       ("libseccomp" ,libseccomp)
+       ("libsodium" ,libsodium)
+       ("polkit" ,polkit)
+       ("protobuf" ,protobuf)
+       ("libqb" ,libqb)))
+    (native-inputs
+     `(("asciidoc" ,asciidoc)
+       ("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("bash-completion" ,bash-completion)
+       ("gdbus-codegen" ,glib "bin")
+       ("umockdev" ,umockdev)
+       ("xmllint" ,libxml2)
+       ("xsltproc" ,libxslt)
+       ("pkg-config" ,pkg-config)))
+    (home-page "https://usbguard.github.io")
+    (synopsis "Helps to protect your computer against rogue USB devices (a.k.a. BadUSB)")
+    (description "USBGuard is a software framework for implementing USB device
+authorization policies (what kind of USB devices are authorized) as well as
+method of use policies (how a USB device may interact with the system).
+Simply put, it is a USB device whitelisting tool.")
+    (license license:gpl2)))
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index d12d113945..4785ebaca3 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -341,14 +341,14 @@ to @code{cabal repl}).")
 (define-public git-annex
   (package
     (name "git-annex")
-    (version "8.20200330")
+    (version "8.20200501")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/"
                            "git-annex/git-annex-" version ".tar.gz"))
        (sha256
-        (base32 "0xy0ld7kr4cfdl4g4yzvrzl5r60dcj33cxm28a4qz6nqm2yhd4sv"))))
+        (base32 "19rggaymvqy7r61n2rl2nigwdi2hzq5l1afcd5l0k1vbacwgq4jl"))))
     (build-system haskell-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
new file mode 100644
index 0000000000..dda787b3cd
--- /dev/null
+++ b/gnu/packages/jami.scm
@@ -0,0 +1,361 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
+;;;
+;;; 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 jami)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages aidc)
+  #:use-module (gnu packages audio)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages crypto)
+  #:use-module (gnu packages documentation)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages hurd)
+  #:use-module (gnu packages libcanberra)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages networking)
+  #:use-module (gnu packages pcre)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pulseaudio)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages serialization)
+  #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages telephony)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages upnp)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages webkit)
+  #:use-module (gnu packages xiph)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module (guix utils))
+
+(define %jami-version "20200401.1.6f090de")
+
+(define* (jami-source #:key without-daemon)
+  (origin
+    (method url-fetch)
+    (uri (string-append "https://dl.jami.net/release/tarballs/jami_"
+                        %jami-version
+                        ".tar.gz"))
+    (modules '((guix build utils)))
+    (snippet
+     (if without-daemon
+         '(begin
+            (delete-file-recursively "daemon/contrib"))
+         #f))
+    (sha256
+     (base32
+      "0lryx9n1jn0jsw7s10pbwivqv0d5m3jdzhdhdyg5n02v72mjvkmh"))))
+
+;; Savoir-Faire Linux modifies many libraries to add features
+;; to Jami. This procedure makes applying patches to a given
+;; package easy.
+(define jami-apply-dependency-patches
+  '(lambda* (#:key inputs dep-name patches)
+     (let ((patches-directory "sfl-patches"))
+       (mkdir-p patches-directory)
+       (invoke "tar" "-xvf" (assoc-ref inputs "sfl-patches")
+               "-C" patches-directory
+               "--strip-components=5"
+               (string-append "ring-project/daemon/contrib/src/"
+                              dep-name))
+       (for-each
+        (lambda (file)
+          (invoke "patch" "--force" "-p1" "-i"
+                  (string-append patches-directory "/"
+                                 file ".patch")))
+        patches))))
+
+(define-public pjproject-jami
+  (package
+    (inherit pjproject)
+    (name "pjproject-jami")
+    (native-inputs
+     `(("sfl-patches" ,(jami-source))
+       ,@(package-native-inputs pjproject)))
+    (arguments
+     `(#:tests? #f
+       ;; See ring-project/daemon/contrib/src/pjproject/rules.mak.
+       #:configure-flags
+       (list "--disable-oss"
+             "--disable-sound"
+             "--disable-video"
+             ;; The following flag is Linux specific.
+             ,@(if (hurd-triplet? (or (%current-system)
+                                      (%current-target-system)))
+                   '()
+                   '("--enable-epoll"))
+             "--enable-ext-sound"
+             "--disable-speex-aec"
+             "--disable-g711-codec"
+             "--disable-l16-codec"
+             "--disable-gsm-codec"
+             "--disable-g722-codec"
+             "--disable-g7221-codec"
+             "--disable-speex-codec"
+             "--disable-ilbc-codec"
+             "--disable-opencore-amr"
+             "--disable-silk"
+             "--disable-sdl"
+             "--disable-ffmpeg"
+             "--disable-v4l2"
+             "--disable-openh264"
+             "--disable-resample"
+             "--disable-libwebrtc"
+             "--with-gnutls"
+             "--with-external-srtp"
+             ;; We need -fPIC or else we get the following error when linking
+             ;; against pjproject-jami:
+             ;;   relocation R_X86_64_32S against `.rodata' can not be used when
+             ;;   making a shared object;
+             "CFLAGS=-fPIC"
+             "CXXFLAGS=-fPIC")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'make-git-checkout-writable
+           (lambda _
+             (for-each make-file-writable (find-files "."))
+             #t))
+         (add-after 'unpack 'apply-patches
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((jami-apply-dependency-patches ,jami-apply-dependency-patches))
+               ;; Comes from
+               ;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
+               ;; WARNING: These amount for huge changes in pjproject.
+               (jami-apply-dependency-patches
+                #:inputs inputs
+                #:dep-name "pjproject"
+                #:patches
+                '("0001-rfc6544"
+                  "0002-rfc2466"
+                  "0003-add-tcp-keep-alive"
+                  "0004-multiple_listeners"
+                  "0005-fix_ebusy_turn"
+                  "0006-ignore_ipv6_on_transport_check"
+                  "0007-pj_ice_sess"
+                  "0008-fix_ioqueue_ipv6_sendto"
+                  "0009-add-config-site"))
+               #t)))
+         ;; TODO: We could use substitute-keyword-arguments instead of
+         ;; repeating the phases from pjproject, but somehow it does
+         ;; not work.
+         (add-before 'build 'build-dep
+           (lambda _ (invoke "make" "dep")))
+         (add-before 'patch-source-shebangs 'autoconf
+           (lambda _
+             (invoke "autoconf" "-v" "-f" "-i" "-o"
+                     "aconfigure" "aconfigure.ac")))
+         (add-before 'autoconf 'disable-some-tests
+           ;; Three of the six test programs fail due to missing network
+           ;; access.
+           (lambda _
+             (substitute* "Makefile"
+               (("selftest: pjlib-test pjlib-util-test pjnath-test pjmedia-test pjsip-test pjsua-test")
+                "selftest: pjlib-test pjlib-util-test pjmedia-test"))
+             #t)))))))
+
+(define-public libring
+  (package
+    (name "libring")
+    (version %jami-version)
+    (source (jami-source #:without-daemon #t))
+    (build-system gnu-build-system)
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("boost" ,boost)
+       ("dbus-c++" ,dbus-c++)
+       ("eudev" ,eudev)
+       ("ffmpeg" ,ffmpeg)
+       ("flac" ,flac)
+       ("gmp" ,gmp)
+       ("gsm" ,gsm)
+       ("jack" ,jack-1)
+       ("jsoncpp" ,jsoncpp)
+       ("libnatpmp" ,libnatpmp)
+       ("libogg" ,libogg)
+       ("libva" ,libva)
+       ("opendht" ,opendht)
+       ("opus" ,opus)
+       ("pcre" ,pcre)
+       ("pulseaudio" ,pulseaudio)
+       ("libsamplerate" ,libsamplerate)
+       ("libsndfile" ,libsndfile)
+       ("speex" ,speex)
+       ("speexdsp" ,speexdsp)
+       ("libupnp" ,libupnp)
+       ("libvorbis" ,libvorbis)
+       ("libx264" ,libx264)
+       ("libvdpau" ,libvdpau)
+       ("yaml-cpp" ,yaml-cpp)
+       ("zlib" ,zlib)
+       ("openssl" ,openssl)
+       ("libsecp256k1" ,libsecp256k1)
+       ("python" ,python)
+       ("python-wrapper" ,python-wrapper)
+       ("restinio" ,restinio)
+       ("libx11" ,libx11)
+       ("asio" ,asio)
+       ;; TODO: Upstream seems to rely on a custom pjproject (a.k.a. pjsip) version.
+       ;; See https://git.jami.net/savoirfairelinux/ring-daemon/issues/24.
+       ("pjproject" ,pjproject-jami)))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("which" ,which)
+       ("cppunit" ,cppunit)
+       ("perl" ,perl)))                 ; Needed for documentation.
+    (arguments
+     `(#:tests? #f         ; The tests fail to compile due to missing headers.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'change-directory
+           (lambda _
+             (chdir "daemon")
+             #t))
+         (add-before 'build 'add-lib-dir
+           (lambda _
+             (mkdir-p "src/lib")
+             #t)))))
+    (synopsis "Distributed multimedia communications platform")
+    (description "Jami (formerly GNU Ring) is a secure and distributed voice,
+video and chat communication platform that requires no centralized server and
+leaves the power of privacy in the hands of the user.  It supports the SIP and
+IAX protocols, as well as decentralized calling using P2P-DHT.
+
+This package provides a library and daemon implementing the Jami core
+functionality.")
+    (home-page "https://jami.net/")
+    (license license:gpl3+)))
+
+(define-public libringclient
+  (package
+    (inherit libring)
+    (name "libringclient")
+    (build-system cmake-build-system)
+    (propagated-inputs
+     `(("libring" ,libring)     ; For 'dring'.
+       ("qtbase" ,qtbase)       ; Qt is included in several installed headers.
+       ("qttools" ,qttools)))
+    (arguments
+     `(#:tests? #f                      ; There is no testsuite.
+       #:configure-flags
+       (list (string-append "-DRING_BUILD_DIR="
+                            (assoc-ref %build-inputs "libring") "/include"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'change-directory
+           (lambda _
+             (chdir "lrc")
+             #t))
+         (add-before 'configure 'fix-dbus-interfaces-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               (("\\$\\{CMAKE_INSTALL_PREFIX\\}(/share/dbus-1/interfaces)" _ dbus-interfaces-path-suffix)
+                (string-append (assoc-ref inputs "libring")
+                               dbus-interfaces-path-suffix))))))))
+    (synopsis "Distributed multimedia communications platform")
+    (description "Jami (formerly GNU Ring) is a secure and distributed voice,
+video and chat communication platform that requires no centralized server and
+leaves the power of privacy in the hands of the user.  It supports the SIP and
+IAX protocols, as well as decentralized calling using P2P-DHT.
+
+This package provides a library common to all Jami clients.")
+    (home-page "https://jami.net")
+    (license license:gpl3+)))
+
+(define-public jami
+  (package
+    (inherit libring)
+    (name "jami")
+    (build-system cmake-build-system)
+    (inputs
+     `(("libringclient" ,libringclient)
+       ("gtk+" ,gtk+)
+       ("qrencode" ,qrencode)
+       ("libnotify" ,libnotify)
+       ("clutter" ,clutter)
+       ("clutter-gtk" ,clutter-gtk)
+       ("libcanberra" ,libcanberra)
+       ("webkitgtk" ,webkitgtk)
+       ;; TODO: We must wrap ring-client-gnome to force using the
+       ;; `sqlite-with-column-metadata' package instead of `sqlite' or else it
+       ;; fails with:
+       ;;
+       ;;   /gnu/store/...-qtbase-5.11.2/lib/qt5/plugins/sqldrivers/libqsqlite.so:
+       ;;   undefined symbol: sqlite3_column_table_name16
+       ;;
+       ;; qtbase is built against sqlite-with-column-metadata but somehow
+       ;; jami-client-gnome ends up with both `sqlite' and
+       ;; `sqlite-with-column-metadata' as inputs and it seems that
+       ;; libqsqlite.so gets confused.
+       ("sqlite" ,sqlite-with-column-metadata)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("doxygen" ,doxygen)))
+    (propagated-inputs
+     `(("libring" ,libring) ; Contains `dring', the daemon, which is automatically by d-bus.
+       ("adwaita-icon-theme" ,adwaita-icon-theme)
+       ("evolution-data-server" ,evolution-data-server)))
+    (arguments
+     `(#:tests? #f                      ; There is no testsuite.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'change-directory
+           (lambda _
+             (chdir "client-gnome")
+             #t))
+         (add-after 'install 'wrap
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (path (string-append (assoc-ref inputs "sqlite") "/lib")))
+               (wrap-program (string-append out "/bin/jami-gnome")
+                 `("LD_LIBRARY_PATH" ":" prefix (,path))))
+             #t)))))
+    (synopsis "Distributed, privacy-respecting communication program")
+    (description "Jami (formerly GNU Ring) is a secure and distributed voice,
+video and chat communication platform that requires no centralized server and
+leaves the power of privacy in the hands of the user.  It supports the SIP and
+IAX protocols, as well as decentralized calling using P2P-DHT.
+
+This package provides the Jami client for the GNOME desktop.")
+    (home-page "https://jami.net")
+    (license license:gpl3+)))
+
+(define-public jami-client-gnome
+  (deprecated-package "jami-client-gnome" jami))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 0f424ca828..8b8945fbea 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -4666,6 +4666,37 @@ disks and SD cards.  This package provides the userland utilities.")
     (inputs
      `(("libuuid" ,util-linux "lib")))))
 
+(define-public f2fs-tools/static
+  (static-package
+   (package
+     (inherit f2fs-tools)
+     (name "f2fs-tools-static")
+     (arguments
+     `(#:configure-flags
+       (let ((libuuid-static (assoc-ref %build-inputs "libuuid:static"))
+             (libuuid (assoc-ref %build-inputs "libuuid")))
+         (list
+          (string-append "libuuid_CFLAGS=-I" libuuid "/include")
+          (string-append "libuuid_LIBS=-L" libuuid-static "/lib -luuid")
+          (string-append "libblkid_CFLAGS=-I" libuuid "/include")
+          (string-append "libblkid_LIBS=-L" libuuid-static "/lib -lblkid")))
+       #:disallowed-references (,util-linux)
+       #:phases
+       (modify-phases %standard-phases ; TODO: f2fs phases.
+         (add-after 'unpack 'make-static
+           (lambda _
+             (define (append-to-file name body)
+               (let ((file (open-file name "a")))
+                 (display body file)
+                 (close-port file)))
+             (append-to-file "mkfs/Makefile.am" "\nmkfs_f2fs_LDFLAGS = -all-static\n")
+             (append-to-file "fsck/Makefile.am" "\nfsck_f2fs_LDFLAGS = -all-static\n")
+             (append-to-file "tools/Makefile.am" "\nf2fscrypt_LDFLAGS = -all-static -luuid\n")
+             #t)))))
+     (inputs
+      `(("libuuid:static" ,util-linux "static")
+        ("libuuid" ,util-linux "lib")))))) ; for include files
+
 (define-public freefall
   (package
     (name "freefall")
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index bda002e313..15e15281a7 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2019 Arm Ltd <David.Truby@arm.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
+;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -677,12 +678,16 @@ output), and Binutils.")
                    #:patches '("clang-3.5-libc-search-path.patch")))
 
 (define-public llvm-for-extempore
-  (package (inherit llvm-3.7)
+  (package (inherit llvm-3.8)
     (name "llvm-for-extempore")
     (source
      (origin
-       (inherit (package-source llvm-3.7))
-       (patches (list (search-patch "llvm-for-extempore.patch")))))
+       (method url-fetch)
+       (uri (string-append "http://extempore.moso.com.au/extras/"
+                           "llvm-3.8.0.src-patched-for-extempore.tar.xz"))
+       (sha256
+        (base32
+         "1svdl6fxn8l01ni8mpm0bd5h856ahv3h9sdzgmymr6fayckjvqzs"))))
     ;; Extempore refuses to build on architectures other than x86_64
     (supported-systems '("x86_64-linux"))))
 
diff --git a/gnu/packages/lxde.scm b/gnu/packages/lxde.scm
index 9de96a21cb..a52e403106 100644
--- a/gnu/packages/lxde.scm
+++ b/gnu/packages/lxde.scm
@@ -27,6 +27,7 @@
 
 (define-module (gnu packages lxde)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages disk)
@@ -279,7 +280,6 @@ with freedesktop.org standard.")
      `(("bash" ,bash)
        ("cairo" ,cairo)
        ("curlftpfs" ,curlftpfs)
-       ("dbus" ,dbus)
        ("eudev" ,eudev)
        ("fakeroot" ,fakeroot)
        ("ffmpegthumbnailer" ,ffmpegthumbnailer)
@@ -288,6 +288,7 @@ with freedesktop.org standard.")
        ("gtk+" ,gtk+)
        ("ifuse" ,ifuse)
        ("jmtpfs" ,jmtpfs)
+       ("ktsuss" ,ktsuss)
        ("libx11" ,libx11)
        ("lsof" ,lsof)
        ("pango" ,pango)
@@ -297,12 +298,31 @@ with freedesktop.org standard.")
        ("util-linux" ,util-linux)
        ("wget" ,wget)))
     (arguments
-     `(#:configure-flags (list (string-append "--with-bash-path="
-                                              (assoc-ref %build-inputs "bash")
-                                              "/bin/bash")
-                               (string-append "--sysconfdir="
-                                              (assoc-ref %outputs "out")
-                                              "/etc"))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source-files
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Patch config file to load programs correctly.
+             (substitute* "etc/spacefm.conf"
+               (("#terminal_su=/bin/su")
+                "terminal_su=/run/setuid-programs/sudo")
+               (("#graphical_su=/usr/bin/gksu")
+                (string-append "graphical_su="
+                               (string-append (assoc-ref inputs "ktsuss")
+                                              "/bin/ktsuss"))))
+             ;; SpaceFM expects udevil to have uid set to root.
+             ;; User has to manually add udevil to setuid-programs.
+             (substitute* "src/settings.c"
+               (("/usr/bin/udevil")
+                "/run/setuid-programs/udevil"))
+             #t)))
+       #:configure-flags (list
+                          (string-append "--with-bash-path="
+                                         (assoc-ref %build-inputs "bash")
+                                         "/bin/bash")
+                          (string-append "--sysconfdir="
+                                         (assoc-ref %outputs "out")
+                                         "/etc"))))
     (home-page "https://ignorantguru.github.io/spacefm/")
     (synopsis "Multi-panel tabbed file manager")
     (description "SpaceFM is a graphical, multi-panel, tabbed file manager
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 589b3e8839..ef3b3eb5f6 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -23,7 +23,7 @@
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017, 2018 Rene Saavedra <pacoon@protonmail.com>
+;;; Copyright © 2017, 2018, 2020 Rene Saavedra <pacoon@protonmail.com>
 ;;; Copyright © 2018, 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
@@ -2752,14 +2752,14 @@ tools and applications:
 (define-public balsa
   (package
     (name "balsa")
-    (version "2.5.7")
+    (version "2.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://pawsa.fedorapeople.org/balsa/"
                            name "-" version ".tar.bz2"))
        (sha256
-        (base32 "0yfqhfpwm1qnwmbpr6dfn2f5w8a8xxq51pn8ypgg0fw973l1c1nx"))))
+        (base32 "0ycidvgy9npd6avxk88sf2ca609m7zb0hzrk1yajrgwb1rfqx68a"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -2777,7 +2777,7 @@ tools and applications:
      `(("cyrus-sasl" ,cyrus-sasl)
        ("enchant" ,enchant)
        ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gmime" ,gmime-2.6)
+       ("gmime" ,gmime)
        ("gnutls" ,gnutls)
        ("gpgme" ,gpgme)
        ("gtk+" ,gtk+)
@@ -2785,7 +2785,9 @@ tools and applications:
        ("gtkspell3" ,gtkspell3)
        ("libcanberra" ,libcanberra)
        ("libesmtp" ,libesmtp)
+       ("libical" ,libical)
        ("libnotify" ,libnotify)
+       ("libsecret" ,libsecret)
        ("openldap" ,openldap)
        ("sqlite" ,sqlite)
        ("webkitgtk" ,webkitgtk)))
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 03510deeda..8738c1eeeb 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -27,6 +27,7 @@
 ;;; Copyright © 2019, 2020 Alexandros Theodotou <alex@zrythm.org>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Lars-Dominik Braun <lars@6xq.net>
+;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -625,63 +626,73 @@ MusePack, Monkey's Audio, and WavPack files.")
 (define-public extempore
   (package
     (name "extempore")
-    (version "0.7.0")
+    (version "0.8.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/digego/extempore.git")
-                    (commit version)))
+                    (commit (string-append "v" version))))
               (sha256
                (base32
-                "12fsp7zkfxb9kykwq46l88kcbbici9arczrrsl4qn87m6vm5349l"))
-              (file-name (string-append name "-" version "-checkout"))))
+                "182jy23qv115dipny7kglwbn21z55dp253w1ykm0kh8n6vkgs7gp"))
+              (file-name (git-file-name name version))
+              (patches (search-patches
+                        "extempore-unbundle-external-dependencies.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Remove bundled sources.
+                  (map delete-file-recursively
+                       '("src/portaudio"
+                         "src/pcre"))
+                  #t))))
     (build-system cmake-build-system)
     (arguments
-     `(;; The default target also includes ahead-of-time compilation of the
-       ;; standard libraries.  However, during the "install" phase this would
-       ;; happen *again* for unknown reasons.  Hence we only build the
-       ;; extempore executable during the build phase.
-       #:make-flags '("extempore")
-       #:configure-flags '("-DJACK=ON"
-                           ;; We want to distribute.
-                           "-DIN_TREE=OFF"
-                           ;; Don't download any dependencies.
-                           "-DBUILD_DEPS=OFF")
+     `(#:configure-flags (list "-DJACK=ON"
+                               "-DPACKAGE=ON"
+                               "-DEXTERNAL_SHLIBS_AUDIO=OFF"
+                               "-DEXTERNAL_SHLIBS_GRAPHICS=OFF"
+                               "-DCMAKE_BUILD_TYPE=Release"
+                               (string-append "-DEXT_SHARE_DIR="
+                                              (assoc-ref %outputs "out")
+                                              "/share"))
        #:modules ((ice-9 match)
                   (guix build cmake-build-system)
                   (guix build utils))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'build 'build-aot-libs
+           (lambda _
+             (for-each (lambda (target)
+                         (invoke "make" target))
+                       '("aot_base"
+                         "aot_math"
+                         "aot_instruments"))
+             #t))
+         (add-after 'unpack 'patch-install-locations
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               (("EXT_SHARE_DIR=\"\\.\"\\)")
+                "EXT_SHARE_DIR=\"${EXT_SHARE_DIR}/extempore\")")
+               (("DESTINATION \"\\.\"\\)") "DESTINATION bin)")
+               (("DESTINATION \"\\.\"\n") "DESTINATION share/extempore\n"))
+             #t))
          (add-after 'unpack 'patch-directories
            (lambda* (#:key outputs #:allow-other-keys)
-             ;; Rewrite default path to runtime directory
-             (substitute* "src/Extempore.cpp"
-               (("runtimedir \\+= \"runtime\"")
-                (string-append "runtimedir = \""
-                               (assoc-ref outputs "out")
-                               "/lib/extempore/runtime\"")))
              (substitute* "extras/extempore.el"
                (("\\(runtime-directory \\(concat default-directory \"runtime\"\\)\\)")
                 (string-append "(runtime-directory \""
                                (assoc-ref outputs "out")
-                               "/lib/extempore/runtime"
+                               "/share/extempore/runtime"
                                "\")")))
              #t))
          (add-after 'unpack 'link-with-additional-libs
            (lambda _
              ;; The executable must be linked with libffi and zlib.
              (substitute* "CMakeLists.txt"
-               (("add_dependencies\\(aot_extended extended_deps\\)") "")
                (("target_link_libraries\\(extempore PRIVATE dl" line)
                 (string-append line " ffi z")))
              #t))
-         ;; FIXME: AOT compilation of the nanovg bindings fail with the error:
-         ;; "Compiler Error  could not bind _nvgLinearGradient"
-         (add-after 'unpack 'disable-nanovg
-           (lambda _
-             (substitute* "CMakeLists.txt"
-               (("aotcompile_lib\\(libs/external/nanovg.xtm.*") ""))
-             #t))
          ;; FIXME: All examples that are used as tests segfault for some
          ;; unknown reason.
          (add-after 'unpack 'disable-broken-tests
@@ -710,20 +721,16 @@ MusePack, Monkey's Audio, and WavPack files.")
                 ("gl/glcompat-directbind" "libGL.so" "mesa")))
              #t))
          (add-after 'unpack 'use-own-llvm
-          (lambda* (#:key inputs #:allow-other-keys)
-            (setenv "EXT_LLVM_DIR" (assoc-ref inputs "llvm"))
-            ;; Our LLVM builds shared libraries, so Extempore should use
-            ;; those.
-            (substitute* "CMakeLists.txt"
-              (("CMAKE_STATIC_LIBRARY") "CMAKE_SHARED_LIBRARY"))
-            #t))
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "EXT_LLVM_DIR" (assoc-ref inputs "llvm"))
+             ;; Our LLVM builds shared libraries, so Extempore should use
+             ;; those.
+             (substitute* "CMakeLists.txt"
+               (("CMAKE_STATIC_LIBRARY") "CMAKE_SHARED_LIBRARY"))
+             #t))
          (add-after 'unpack 'fix-aot-compilation
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "CMakeLists.txt"
-               ;; EXT_SHARE_DIR does not exist before installation, so the
-               ;; working directory should be the source directory instead.
-               (("WORKING_DIRECTORY \\$\\{EXT_SHARE_DIR\\}")
-                "WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}")
                ;; Extempore needs to be told where the runtime is to be found.
                ;; While we're at it we disable automatic tuning for a specific
                ;; CPU to make binary substitution possible.
@@ -1979,24 +1986,27 @@ using a system-independent interface.")
     (license license:expat)))
 
 (define-public portmidi-for-extempore
-  (package (inherit portmidi)
-    (name "portmidi-for-extempore")
-    (version "217")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/extemporelang/portmidi.git")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1inriyrjf7xx2b7r54x0vmf9ngyqgr7g5060c22bwkbsgg53apzv"))))
-    (build-system cmake-build-system)
-    (arguments `(#:tests? #f)) ; no tests
-    (native-inputs '())
-    ;; Extempore refuses to build on architectures other than x86_64
-    (supported-systems '("x86_64-linux"))
-    (home-page "https://github.com/extemporelang/portmidi/")))
+  (let ((version "217")
+        (revision "0")
+        (commit "8602f548f71daf5ef638b2f7d224753400cb2158"))
+    (package (inherit portmidi)
+      (name "portmidi-for-extempore")
+      (version (git-version version revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/extemporelang/portmidi.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1qidzl1s3kzhczzm96rcd2ppn27a97k2axgfh1zhvyf0s52d7m4w"))))
+      (build-system cmake-build-system)
+      (arguments `(#:tests? #f))        ; no tests
+      (native-inputs '())
+      ;; Extempore refuses to build on architectures other than x86_64
+      (supported-systems '("x86_64-linux"))
+      (home-page "https://github.com/extemporelang/portmidi/"))))
 
 (define-public python-pyportmidi
   (package
@@ -2035,7 +2045,7 @@ using a system-independent interface.")
 (define-public frescobaldi
   (package
     (name "frescobaldi")
-    (version "3.1.1")
+    (version "3.1.2")
     (source
      (origin
        (method url-fetch)
@@ -2043,7 +2053,7 @@ using a system-independent interface.")
              "https://github.com/wbsoft/frescobaldi/releases/download/v"
              version "/frescobaldi-" version ".tar.gz"))
        (sha256
-        (base32 "0kfwvgygx2ds01w8g7vzykfrajglmr2brchk9d67ahzijpgvfkj5"))))
+        (base32 "084vxzvxnxl5rrhllincnh6krsyi03c8p0452ppzmn9c52wgyb2w"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))                    ;no tests included
@@ -2056,7 +2066,7 @@ using a system-independent interface.")
        ("python-pyportmidi" ,python-pyportmidi)
        ("python-pyqt" ,python-pyqt)
        ("python-sip" ,python-sip)))
-    (home-page "http://www.frescobaldi.org/")
+    (home-page "https://www.frescobaldi.org/")
     (synopsis "LilyPond sheet music text editor")
     (description
      "Frescobaldi is a LilyPond sheet music text editor with syntax
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 0962737536..76b0fc1559 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -33,7 +33,7 @@
 ;;; Copyright © 2019 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2019 Tonton <tonton@riseup.net>
 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2019 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
+;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
 ;;; Copyright © 2019 Daniel Schaefer <git@danielschaefer.me>
 ;;; Copyright © 2019 Diego N. Barbato <dnbarbato@posteo.de>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
@@ -426,6 +426,41 @@ between different versions of ØMQ.")
 files contain direct mappings of the abstractions provided by the ØMQ C API.")
     (license license:expat)))
 
+(define-public libnatpmp
+  (package
+    (name "libnatpmp")
+    (version "20150609")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://miniupnp.free.fr/files/"
+                    name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1c1n8n7mp0amsd6vkz32n8zj3vnsckv308bb7na0dg0r8969rap1"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'check)) ; no tests
+       #:make-flags
+       (let* ((target ,(%current-target-system))
+              (gcc (if target
+                       (string-append target "-gcc")
+                       "gcc")))
+         (list
+          (string-append "CC=" gcc)
+          (string-append "INSTALLPREFIX=" (assoc-ref %outputs "out"))
+          (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib")))))
+    (home-page "http://miniupnp.free.fr/libnatpmp.html")
+    (synopsis "C library implementing NAT-PMP")
+    (description
+     "@code{libnatpmp} is a portable and asynchronous implementation of
+the Network Address Translation - Port Mapping Protocol (NAT-PMP)
+written in the C programming language.")
+    (license license:bsd-3)))
+
 (define-public librdkafka
   (package
     (name "librdkafka")
@@ -2613,7 +2648,7 @@ communication over HTTP.")
 (define-public restinio
   (package
     (name "restinio")
-    (version "0.6.0.1")
+    (version "0.6.1.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2622,7 +2657,7 @@ communication over HTTP.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1c25kpx652nng8m1sqf5an2c3c4g3k6zj85mkkaxzk88iwfzq1s8"))))
+                "141a96hx8zhcdv121g6cs91n46kb47y040v25pnvz5f54964z7f5"))))
     (build-system cmake-build-system)
     (inputs                             ; TODO: Need to force-keep references on some inputs, e.g. boost.
      `(("zlib" ,zlib)
@@ -2655,7 +2690,7 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
 (define-public opendht
   (package
     (name "opendht")
-    (version "2.0.0beta2")
+    (version "2.0.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2664,7 +2699,7 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02ix0rvvyhq22gd5djcq84qz08ji7ln93faf23b27zjzni2klzv5"))))
+                "1q1fwk8wwk9r6bp0indpr60ql668lsk16ykslacyhrh7kg97kvhr"))))
     ;; Since 2.0, the gnu-build-system does not seem to work anymore, upstream bug?
     (build-system cmake-build-system)
     (inputs
diff --git a/gnu/packages/patches/extempore-unbundle-external-dependencies.patch b/gnu/packages/patches/extempore-unbundle-external-dependencies.patch
new file mode 100644
index 0000000000..e9484f7994
--- /dev/null
+++ b/gnu/packages/patches/extempore-unbundle-external-dependencies.patch
@@ -0,0 +1,140 @@
+Remove build machinery for bundled dependencies.
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 89e6125e..c5e90750 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -36,7 +36,7 @@ endif()
+ if(PACKAGE)
+   # this needs to be set before project() is called
+   set(CMAKE_OSX_DEPLOYMENT_TARGET 10.12)
+-  set(ASSETS ON) # necessary for packaging
++  set(ASSETS OFF) # necessary for packaging
+   message(STATUS "Building Extempore for binary distribution (assets directory will be downloaded)")
+ endif()
+ 
+@@ -134,71 +134,6 @@ else()
+   message(FATAL_ERROR "Sorry, Extempore isn't supported on this platform - macOS, Linux & Windows only.")
+ endif()
+ 
+-########
+-# PCRE #
+-########
+-
+-# current in-tree PCRE version: 8.38
+-
+-add_library(pcre STATIC
+-  # headers
+-  src/pcre/config.h
+-  src/pcre/pcre.h
+-  src/pcre/ucp.h
+-  # source files
+-  src/pcre/pcre_chartables.c
+-  src/pcre/pcre_compile.c
+-  src/pcre/pcre_exec.c
+-  src/pcre/pcre_globals.c
+-  src/pcre/pcre_internal.h
+-  src/pcre/pcre_newline.c
+-  src/pcre/pcre_tables.c
+-  )
+-
+-target_compile_definitions(pcre
+-  PRIVATE -DHAVE_CONFIG_H
+-  )
+-
+-if(PACKAGE)
+-  target_compile_options(pcre
+-    PRIVATE -mtune=generic)
+-endif()
+-
+-#############
+-# portaudio #
+-#############
+-
+-add_library(portaudio STATIC
+-  src/portaudio/src/common/pa_allocation.c
+-  src/portaudio/src/common/pa_allocation.h
+-  src/portaudio/src/common/pa_converters.c
+-  src/portaudio/src/common/pa_converters.h
+-  src/portaudio/src/common/pa_cpuload.c
+-  src/portaudio/src/common/pa_cpuload.h
+-  src/portaudio/src/common/pa_debugprint.c
+-  src/portaudio/src/common/pa_debugprint.h
+-  src/portaudio/src/common/pa_dither.c
+-  src/portaudio/src/common/pa_dither.h
+-  src/portaudio/src/common/pa_endianness.h
+-  src/portaudio/src/common/pa_front.c
+-  src/portaudio/src/common/pa_hostapi.h
+-  src/portaudio/src/common/pa_memorybarrier.h
+-  src/portaudio/src/common/pa_process.c
+-  src/portaudio/src/common/pa_process.h
+-  src/portaudio/src/common/pa_ringbuffer.c
+-  src/portaudio/src/common/pa_ringbuffer.h
+-  src/portaudio/src/common/pa_stream.c
+-  src/portaudio/src/common/pa_stream.h
+-  src/portaudio/src/common/pa_trace.c
+-  src/portaudio/src/common/pa_trace.h
+-  src/portaudio/src/common/pa_types.h
+-  src/portaudio/src/common/pa_util.h
+-  )
+-
+-target_include_directories(portaudio
+-  PRIVATE src/portaudio/include
+-  PRIVATE src/portaudio/src/common)
+-
+ # platform-specific
+ 
+ if(APPLE)
+@@ -224,25 +159,8 @@ if(APPLE)
+ 
+ elseif(UNIX AND NOT APPLE)
+   # use ALSA on Linux
+-  target_sources(portaudio
+-    PRIVATE src/portaudio/src/hostapi/alsa/pa_linux_alsa.c
+-    PRIVATE src/portaudio/src/os/unix/pa_unix_hostapis.c
+-    PRIVATE src/portaudio/src/os/unix/pa_unix_util.c
+-    )
+-  target_include_directories(portaudio
+-    PRIVATE src/portaudio/src/os/unix)
+-  target_compile_definitions(portaudio
+-    PRIVATE -DPA_USE_ALSA)
+-  target_link_libraries(portaudio
+-    PRIVATE asound)
+ 
+   if(JACK)
+-    target_sources(portaudio
+-      PRIVATE src/portaudio/src/hostapi/jack/pa_jack.c)
+-    target_compile_definitions(portaudio
+-      PRIVATE -DPA_USE_JACK)
+-    target_link_libraries(portaudio
+-      PRIVATE jack)
+   endif()
+ 
+ elseif(WIN32)
+@@ -292,8 +210,6 @@ if(ASIO)
+ endif()
+ 
+ if(PACKAGE)
+-  target_compile_options(portaudio
+-    PRIVATE -mtune=generic)
+ endif()
+ 
+ ##############
+@@ -411,8 +327,6 @@ endif()
+ 
+ # dependencies
+ 
+-add_dependencies(extempore pcre portaudio)
+-
+ if(BUILD_LLVM)
+   if(WIN32)
+     add_dependencies(extempore LLVM-install)
+@@ -553,7 +467,7 @@ else()
+   install(TARGETS extempore
+     RUNTIME
+     DESTINATION ".")
+-  install(DIRECTORY assets runtime libs examples tests
++  install(DIRECTORY runtime libs examples
+     DESTINATION "."
+     PATTERN ".DS_Store" EXCLUDE)
+ endif()
diff --git a/gnu/packages/patches/llvm-for-extempore.patch b/gnu/packages/patches/llvm-for-extempore.patch
deleted file mode 100644
index 614682c6cb..0000000000
--- a/gnu/packages/patches/llvm-for-extempore.patch
+++ /dev/null
@@ -1,118 +0,0 @@
-This patch to LLVM is required by the developers of the Extempore language.
-The following explanation was posted to the extemporelang@googlegroups.com
-mailing list:
-
-"There is an assumption in the parser that all definitions occur within the
-same compilation unit - i.e. the parser has local state about what has been
-parsed in this unit of work.  Extempore obviously does lots of little units
-rather than one big unit and this causes problems for named types that were
-defined in another unit - which they always are.  The patch simply checks the
-current module to see if the type has been previously defined, and intervenes
-appropriately if it has."
-
-Message-ID: <CAOjrPOqoreXuZo4ZpDBvHE7M_tgAR_V8Txq5JFjh1HnGRn2EsA@mail.gmail.com>
-
---- llvm-3.7.1.src/include/llvm/MC/MCSectionCOFF.h	2015-04-11 12:11:45.000000000 +1000
-+++ llvm-3.7.1.src/include/llvm/MC/MCSectionCOFF.h	2015-09-14 09:22:56.000000000 +1000
-@@ -16,7 +16,6 @@
- 
- #include "llvm/ADT/StringRef.h"
- #include "llvm/MC/MCSection.h"
--#include "llvm/Support/COFF.h"
- 
- namespace llvm {
- class MCSymbol;
-
---- llvm-3.7.1.src/lib/AsmParser/LLParser.cpp	2015-07-11 20:30:36.000000000 +1000
-+++ llvm-3.7.1.src/lib/AsmParser/LLParser.cpp	2015-09-14 09:20:57.000000000 +1000
-@@ -1754,8 +1754,14 @@
-     // If the type hasn't been defined yet, create a forward definition and
-     // remember where that forward def'n was seen (in case it never is defined).
-     if (!Entry.first) {
--      Entry.first = StructType::create(Context, Lex.getStrVal());
--      Entry.second = Lex.getLoc();
-+      // this here for extempore
-+      if (M->getTypeByName(Lex.getStrVal())) {
-+        Entry.first = M->getTypeByName(Lex.getStrVal());
-+        Entry.second = SMLoc();
-+      } else {
-+        Entry.first = StructType::create(Context, Lex.getStrVal());
-+        Entry.second = Lex.getLoc();
-+      }
-     }
-     Result = Entry.first;
-     Lex.Lex();
-
---- llvm-3.7.1.src/lib/CodeGen/TargetLoweringObjectFileImpl.cpp	2015-07-01 05:10:31.000000000 +1000
-+++ llvm-3.7.1.src/lib/CodeGen/TargetLoweringObjectFileImpl.cpp	2015-09-14 09:23:40.000000000 +1000
-@@ -32,6 +32,7 @@
- #include "llvm/MC/MCStreamer.h"
- #include "llvm/MC/MCSymbolELF.h"
- #include "llvm/MC/MCValue.h"
-+#include "llvm/Support/COFF.h"
- #include "llvm/Support/Dwarf.h"
- #include "llvm/Support/ELF.h"
- #include "llvm/Support/ErrorHandling.h"
-
---- llvm-3.7.1.src/lib/ExecutionEngine/MCJIT/MCJIT.cpp	2015-07-31 02:31:16.000000000 +1000
-+++ llvm-3.7.1.src/lib/ExecutionEngine/MCJIT/MCJIT.cpp	2015-09-14 09:21:28.000000000 +1000
-@@ -524,6 +524,17 @@
-         rv.IntVal = APInt(32, PF(ArgValues[0].IntVal.getZExtValue()));
-         return rv;
-       }
-+      if (FTy->getNumParams() == 1 &&
-+          RetTy->isVoidTy() &&
-+          FTy->getParamType(0)->isPointerTy()) {
-+        GenericValue rv;
-+        //void (*PF)(char *) = (void(*)(char *))(intptr_t)FPtr;
-+        //printf("are symbols available: %d\n",isSymbolSearchingDisabled());
-+        void (*PF)(char *) = (void(*)(char *))FPtr;
-+        char* mzone = (char*) GVTOP(ArgValues[0]);
-+        PF(mzone);
-+        return rv;
-+      }      
-       break;
-     }
-   }
-
---- llvm-3.7.1.src/lib/MC/MCContext.cpp	2015-06-23 21:31:32.000000000 +1000
-+++ llvm-3.7.1.src/lib/MC/MCContext.cpp	2015-09-14 09:24:01.000000000 +1000
-@@ -23,6 +23,7 @@
- #include "llvm/MC/MCSymbolCOFF.h"
- #include "llvm/MC/MCSymbolELF.h"
- #include "llvm/MC/MCSymbolMachO.h"
-+#include "llvm/Support/COFF.h"
- #include "llvm/Support/ELF.h"
- #include "llvm/Support/ErrorHandling.h"
- #include "llvm/Support/FileSystem.h"
-
---- llvm-3.7.1.src/lib/MC/MCObjectFileInfo.cpp	2015-06-25 10:28:42.000000000 +1000
-+++ llvm-3.7.1.src/lib/MC/MCObjectFileInfo.cpp	2015-09-14 09:24:17.000000000 +1000
-@@ -16,6 +16,7 @@
- #include "llvm/MC/MCSectionCOFF.h"
- #include "llvm/MC/MCSectionELF.h"
- #include "llvm/MC/MCSectionMachO.h"
-+#include "llvm/Support/COFF.h"
- using namespace llvm;
- 
- static bool useCompactUnwind(const Triple &T) {
-
---- llvm-3.7.1.src/lib/MC/MCSectionCOFF.cpp	2015-06-09 10:31:39.000000000 +1000
-+++ llvm-3.7.1.src/lib/MC/MCSectionCOFF.cpp	2015-09-14 09:24:25.000000000 +1000
-@@ -11,6 +11,7 @@
- #include "llvm/MC/MCAsmInfo.h"
- #include "llvm/MC/MCContext.h"
- #include "llvm/MC/MCSymbol.h"
-+#include "llvm/Support/COFF.h"
- #include "llvm/Support/raw_ostream.h"
- using namespace llvm;
- 
---- llvm-3.7.1.src/lib/Target/X86/X86TargetObjectFile.cpp	2015-06-27 04:55:48.000000000 +1000
-+++ llvm-3.7.1.src/lib/Target/X86/X86TargetObjectFile.cpp	2015-09-14 09:25:03.000000000 +1000
-@@ -16,6 +16,7 @@
- #include "llvm/MC/MCSectionCOFF.h"
- #include "llvm/MC/MCSectionELF.h"
- #include "llvm/MC/MCValue.h"
-+#include "llvm/Support/COFF.h"
- #include "llvm/Support/Dwarf.h"
- #include "llvm/Target/TargetLowering.h"
diff --git a/gnu/packages/patches/vlc-fix-test_libvlc_slaves.patch b/gnu/packages/patches/vlc-fix-test_libvlc_slaves.patch
deleted file mode 100644
index 9bc6d35f18..0000000000
--- a/gnu/packages/patches/vlc-fix-test_libvlc_slaves.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 4186c94104ee528abd6860611b49515f3e6ec644 Mon Sep 17 00:00:00 2001
-From: Thomas Guillem <thomas@gllm.fr>
-Date: Fri, 18 Oct 2019 10:34:07 +0200
-Subject: [PATCH] input/item: sort before attaching slaves
-
-The order of readdir() is completely filesystem dependent.
-
-Slaves should be attached using the same order across multiple OSses/access
-modules.
-
-This fixes the test_libvlc_slaves on some system when the entry order from
-readdir() is different.
-
-This patch need to be backported to VLC 3.0.
----
- src/input/item.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/input/item.c b/src/input/item.c
-index e8db39ca28..fbd74cc95f 100644
---- a/src/input/item.c
-+++ b/src/input/item.c
-@@ -1809,8 +1809,8 @@ void vlc_readdir_helper_finish(struct vlc_readdir_helper *p_rdh, bool b_success)
- {
-     if (b_success)
-     {
--        rdh_attach_slaves(p_rdh, p_rdh->p_node);
-         rdh_sort(p_rdh->p_node);
-+        rdh_attach_slaves(p_rdh, p_rdh->p_node);
-     }
-     free(p_rdh->psz_ignored_exts);
- 
--- 
-2.20.1
-
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index dec93ed97a..999c1e10f0 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -267,14 +267,14 @@ and triple stores.")
 (define-public serd
   (package
     (name "serd")
-    (version "0.30.2")
+    (version "0.30.4")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.drobilla.net/serd-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "00kjjgs5a8r72khgpya14scvl3n58wqwl5927y14z03j25q04ccx"))))
+               "168rn3m32c59qbar120f83ibcnnd987ij9p053kybgl7cmm6358c"))))
     (build-system waf-build-system)
     (arguments
      `(#:tests? #f ; no check target
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index 7de36a105f..56a2ecb73f 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -651,13 +651,17 @@ calls and messages")
 (define-public pjproject
   (package
     (name "pjproject")
-    (version "2.9")
+    (version "2.10")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/pjsip/pjproject.git")
-             (commit "5dfa75be7d69047387f9b0436dd9492bbbf03fe4")))
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1aklicpgwc88578k03i5d5cm5h8mfm7hmx8vfprchbmaa2p8f4z0"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -686,11 +690,7 @@ calls and messages")
               (lambda (dirs)
                 (substitute* "third_party/build/os-linux.mak"
                   (((string-append "DIRS += " dirs)) "")))
-              third-party-dirs))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1ayj6n7zd5wvd1nzj2k9s57fb4ckc2fv92k5sjvhd87yg69k3393"))))
+              third-party-dirs))))))
     (build-system gnu-build-system)
     (inputs
      `(("portaudio" ,portaudio)))
@@ -734,278 +734,6 @@ calls and messages")
 Initiation Protocol (SIP) and a multimedia framework.")
     (license license:gpl2+)))
 
-(define %jami-version "20191101.3.67671e7")
-
-(define* (jami-source #:key without-daemon)
-  (origin
-    (method url-fetch)
-    (uri (string-append "https://dl.jami.net/ring-release/tarballs/ring_"
-                        %jami-version
-                        ".tar.gz"))
-    (modules '((guix build utils)))
-    (snippet
-     (if without-daemon
-       '(begin
-          (delete-file-recursively "daemon/contrib"))
-       #f))
-    (sha256
-     (base32
-      "0kw172w2ccyz438kf5xqw14nhfm4xk6a2libnzib9j2wvhlpf4q0"))))
-
-(define-public pjproject-jami
-  (package
-    (inherit pjproject)
-    (name "pjproject-jami")
-    (native-inputs
-     `(("savoir-faire-linux-patches" ,(jami-source))
-       ,@(package-native-inputs pjproject)))
-    (arguments
-     `(#:tests? #f
-       ;; See ring-project/daemon/contrib/src/pjproject/rules.mak.
-       #:configure-flags
-       (list "--disable-oss"
-             "--disable-sound"
-             "--disable-video"
-             "--enable-ext-sound"
-             "--disable-speex-aec"
-             "--disable-g711-codec"
-             "--disable-l16-codec"
-             "--disable-gsm-codec"
-             "--disable-g722-codec"
-             "--disable-g7221-codec"
-             "--disable-speex-codec"
-             "--disable-ilbc-codec"
-             "--disable-opencore-amr"
-             "--disable-silk"
-             "--disable-sdl"
-             "--disable-ffmpeg"
-             "--disable-v4l2"
-             "--disable-openh264"
-             "--disable-resample"
-             "--disable-libwebrtc"
-             "--with-gnutls"
-             "--with-external-srtp"
-             ;; We need -fPIC or else we get the following error when linking
-             ;; against pjproject-jami:
-             ;;   relocation R_X86_64_32S against `.rodata' can not be used when
-             ;;   making a shared object;
-             "CFLAGS=-fPIC"
-             "CXXFLAGS=-fPIC")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'make-git-checkout-writable
-           (lambda _
-             (for-each make-file-writable (find-files "."))
-             #t))
-         (add-after 'unpack 'apply-patches
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((savoir-faire-linux-patches-directory "Savoir-faire Linux patches")
-                   ;; Comes from
-                   ;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
-                   ;; WARNING: These amount for huge changes in pjproject.
-                   (savoir-faire-linux-patches
-                    '("fix_turn_alloc_failure"
-                      "rfc2466"
-                      "ipv6"
-                      "multiple_listeners"
-                      "pj_ice_sess"
-                      "fix_turn_fallback"
-                      "fix_ioqueue_ipv6_sendto"
-                      "add_dtls_transport"
-                      "rfc6544"
-                      "ice_config"
-                      "sip_config"
-                      "fix_first_packet_turn_tcp"
-                      "fix_ebusy_turn"
-                      "ignore_ipv6_on_transport_check"
-                      "fix_turn_connection_failure"
-                      ;; "uwp_vs" ; for windows
-                      "disable_local_resolution")))
-               (mkdir-p savoir-faire-linux-patches-directory)
-               (invoke "tar" "-xvf" (assoc-ref inputs "savoir-faire-linux-patches")
-                       "-C" savoir-faire-linux-patches-directory
-                       "--strip-components=5"
-                       "ring-project/daemon/contrib/src/pjproject")
-               (for-each
-                (lambda (file)
-                  (invoke "patch" "--force" "-p1" "-i"
-                          (string-append savoir-faire-linux-patches-directory "/"
-                                         file ".patch")))
-                savoir-faire-linux-patches))
-             #t))
-         ;; TODO: We could use substitute-keyword-arguments instead of
-         ;; repeating the phases from pjproject, but somehow it does
-         ;; not work.
-         (add-before 'build 'build-dep
-           (lambda _ (invoke "make" "dep")))
-         (add-before 'patch-source-shebangs 'autoconf
-           (lambda _
-             (invoke "autoconf" "-v" "-f" "-i" "-o"
-                     "aconfigure" "aconfigure.ac")))
-         (add-before 'autoconf 'disable-some-tests
-           ;; Three of the six test programs fail due to missing network
-           ;; access.
-           (lambda _
-             (substitute* "Makefile"
-               (("selftest: pjlib-test pjlib-util-test pjnath-test pjmedia-test pjsip-test pjsua-test")
-                "selftest: pjlib-test pjlib-util-test pjmedia-test"))
-             #t)))))))
-
-(define-public libring
-  (package
-    (name "libring")
-    (version %jami-version)
-    (source (jami-source #:without-daemon #t))
-    (build-system gnu-build-system)
-    (inputs
-     ;; Missing (optional?) dep: libnatpmp.
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("dbus-c++" ,dbus-c++)
-       ("eudev" ,eudev)
-       ("ffmpeg" ,ffmpeg)
-       ("flac" ,flac)
-       ("gmp" ,gmp)
-       ("gsm" ,gsm)
-       ("jack" ,jack-1)
-       ("jsoncpp" ,jsoncpp)
-       ("libogg" ,libogg)
-       ("libva" ,libva)
-       ("opendht" ,opendht)
-       ("opus" ,opus)
-       ("pcre" ,pcre)
-       ("pulseaudio" ,pulseaudio)
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("speex" ,speex)
-       ("speexdsp" ,speexdsp)
-       ("libupnp" ,libupnp)
-       ("libvorbis" ,libvorbis)
-       ("libx264" ,libx264)
-       ("libvdpau" ,libvdpau)
-       ("yaml-cpp" ,yaml-cpp)
-       ("zlib" ,zlib)
-       ("openssl" ,openssl)
-       ("libsecp256k1" ,libsecp256k1)
-       ("python" ,python)
-       ("python-wrapper" ,python-wrapper)
-       ("restinio" ,restinio)
-       ("libx11" ,libx11)
-       ("asio" ,asio)
-       ;; TODO: Upstream seems to rely on a custom pjproject (a.k.a. pjsip) version.
-       ;; See https://git.jami.net/savoirfairelinux/ring-daemon/issues/24.
-       ("pjproject" ,pjproject-jami)))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)
-       ("cppunit" ,cppunit)
-       ("perl" ,perl)))                 ; Needed for documentation.
-    (arguments
-     `(#:tests? #f         ; The tests fail to compile due to missing headers.
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'change-directory
-           (lambda _
-             (chdir "daemon")
-             #t))
-         (add-before 'build 'add-lib-dir
-           (lambda _
-             (mkdir-p "src/lib")
-             #t)))))
-    (synopsis "Distributed multimedia communications platform")
-    (description "Jami (formerly GNU Ring) is a secure and distributed voice,
-video and chat communication platform that requires no centralized server and
-leaves the power of privacy in the hands of the user.  It supports the SIP and
-IAX protocols, as well as decentralized calling using P2P-DHT.
-
-This package provides a library and daemon implementing the Jami core
-functionality.")
-    (home-page "https://jami.net/")
-    (license license:gpl3+)))
-
-(define-public libringclient
-  (package
-    (inherit libring)
-    (name "libringclient")
-    (build-system cmake-build-system)
-    (propagated-inputs
-     `(("libring" ,libring)     ; For 'dring'.
-       ("qtbase" ,qtbase)       ; Qt is included in several installed headers.
-       ("qttools" ,qttools)))
-    (arguments
-     `(#:tests? #f                      ; There is no testsuite.
-       #:configure-flags
-       (list (string-append "-DRING_BUILD_DIR="
-                            (assoc-ref %build-inputs "libring") "/include"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'change-directory
-           (lambda _
-             (chdir "lrc")
-             #t))
-         (add-before 'configure 'fix-dbus-interfaces-path
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "CMakeLists.txt"
-               (("\\$\\{CMAKE_INSTALL_PREFIX\\}(/share/dbus-1/interfaces)" _ dbus-interfaces-path-suffix)
-                (string-append (assoc-ref inputs "libring")
-                               dbus-interfaces-path-suffix))))))))
-    (synopsis "Distributed multimedia communications platform")
-    (description "Jami (formerly GNU Ring) is a secure and distributed voice,
-video and chat communication platform that requires no centralized server and
-leaves the power of privacy in the hands of the user.  It supports the SIP and
-IAX protocols, as well as decentralized calling using P2P-DHT.
-
-This package provides a library common to all Jami clients.")
-    (home-page "https://jami.net")
-    (license license:gpl3+)))
-
-(define-public jami
-  (package
-    (inherit libring)
-    (name "jami")
-    (build-system cmake-build-system)
-    (inputs
-     `(("libringclient" ,libringclient)
-       ("gtk+" ,gtk+)
-       ("qrencode" ,qrencode)
-       ("libnotify" ,libnotify)
-       ("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("libcanberra" ,libcanberra)
-       ("webkitgtk" ,webkitgtk)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("doxygen" ,doxygen)))
-    (propagated-inputs
-     `(("libring" ,libring) ; Contains `dring', the daemon, which is automatically by d-bus.
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("evolution-data-server" ,evolution-data-server)))
-    (arguments
-     `(#:tests? #f                      ; There is no testsuite.
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'change-directory
-           (lambda _
-             (chdir "client-gnome")
-             #t)))))
-    (synopsis "Distributed, privacy-respecting communication program")
-    (description "Jami (formerly GNU Ring) is a secure and distributed voice,
-video and chat communication platform that requires no centralized server and
-leaves the power of privacy in the hands of the user.  It supports the SIP and
-IAX protocols, as well as decentralized calling using P2P-DHT.
-
-This package provides the Jami client for the GNOME desktop.")
-    (home-page "https://jami.net")
-    (license license:gpl3+)))
-
-(define-public jami-client-gnome
-  (deprecated-package "jami-client-gnome" jami))
-
 (define-public libtgvoip
   (package
     (name "libtgvoip")
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index f2f675d148..072760ee10 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -757,14 +757,14 @@ and Octave.  TeXmacs is completely extensible via Guile.")
 (define-public scintilla
   (package
     (name "scintilla")
-    (version "4.3.2")
+    (version "4.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (let ((v (apply string-append (string-split version #\.))))
               (string-append "https://www.scintilla.org/scintilla" v ".tgz")))
        (sha256
-        (base32 "0d8ssl0d8r6bslbzd507l9c5g8mwn1zriak3fnf85936pdmkhq9h"))))
+        (base32 "0zh8c19r1zd4kr9jg2ws0n2n5ic2siz5zbns6cvylyfbpf69ghy2"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (list "GTK3=1" "CC=gcc" "-Cgtk")
diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm
index c7ad33c17b..25b73189bc 100644
--- a/gnu/packages/upnp.scm
+++ b/gnu/packages/upnp.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2019 Jens Mølgaard <jens@zete.tk>
+;;; Copyright © 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages photo)
   #:use-module (gnu packages image)
   #:use-module (gnu packages mp3)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages python)
@@ -92,15 +94,21 @@ over IRC, instant messaging, network games, and most server software.")
 (define-public libupnp
   (package
     (name "libupnp")
-    (version "1.6.25")
+    (version "1.8.6")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "mirror://sourceforge/pupnp/pupnp/libUPnP%20"
-                          version "/" name "-" version ".tar.bz2"))
+      (method git-fetch)
+      (uri (git-reference
+            (url "https://github.com/pupnp/pupnp.git")
+            (commit (string-append "release-" version))))
       (sha256
        (base32
-        "0hzsd7rvfa87b4hxg9yj4xhdfxx9sp09r9sqdl3mqhvmcyw018y5"))))
+        "1jlb6qh47513h2simy0zxia5q61w1c31mnwmjqpr2nf832lmnpk4"))))
+       (native-inputs
+        `(("autoconf" ,autoconf)
+          ("automake" ,automake)
+          ("libtool" ,libtool)
+          ("pkg-config" ,pkg-config)))
     (build-system gnu-build-system)
     (arguments
      ;; The tests require a network device capable of multicasting which is
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 578468978c..41fba872c6 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -1191,7 +1191,7 @@ videoformats depend on the configuration flags of ffmpeg.")
 (define-public vlc
   (package
     (name "vlc")
-    (version "3.0.8")
+    (version "3.0.10")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1200,13 +1200,7 @@ videoformats depend on the configuration flags of ffmpeg.")
                     "/vlc-" version ".tar.xz"))
               (sha256
                (base32
-                "1xmxjpyzdhabchwncz6lvx3kzvl7fz9c42bkv3nbj68albs9w570"))
-              (patches
-               (search-patches
-                ;; TODO: The test "libvlc_slaves" fails.  Applied upstream as
-                ;; <https://git.videolan.org/?p=vlc.git;a=commit;h=4186c94104ee528abd6860611b49515f3e6ec644>.
-                ;; Try removing it in 3.0.9.
-                "vlc-fix-test_libvlc_slaves.patch"))))
+                "0cackl1084hcmg4myf3kvjvd6sjxmzn0c0qkmanz6brvgzyanrm9"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("flex" ,flex)
@@ -1311,20 +1305,6 @@ videoformats depend on the configuration flags of ffmpeg.")
                ;; which fails in our sandboxed build system
                (substitute* "test/run_vlc.sh"
                  (("./vlc --ignore-config") "echo"))
-
-               ;; modules/text_renderer/freetype/text_layout.c uses a
-               ;; now-deprecated interface 'fribidi_get_par_embedding_levels'
-               ;; from fribidi.h, so for now we enable the use of deprecated
-               ;; fribidi interfaces from this file.
-               ;; FIXME: Try removing this for vlc >= 3.0.3.
-               (substitute* "modules/text_renderer/freetype/text_layout.c"
-                 (("# define FRIBIDI_NO_DEPRECATED 1") ""))
-
-               ;; Fix build with libssh2 > 1.8.0:
-               ;; <https://trac.videolan.org/vlc/ticket/22060>
-               ;; <https://git.videolan.org/?p=vlc.git;a=commit;h=11449b5cd8b415768e010d9b7c1d6ba3cea21f82>
-               (substitute* "modules/access/sftp.c"
-                 (("010801") "010900"))
                #t)))
          (add-after 'strip 'regenerate-plugin-cache
            (lambda* (#:key outputs #:allow-other-keys)
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index f4c95745b9..62b7a5bdca 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -338,7 +338,7 @@ access.")
 (define-public qutebrowser
   (package
     (name "qutebrowser")
-    (version "1.10.0")
+    (version "1.11.0")
     (source
      (origin
        (method url-fetch)
@@ -347,7 +347,7 @@ access.")
                            "qutebrowser-" version ".tar.gz"))
        (sha256
         (base32
-         "1prvd3cysmcjfybn0dmr3ih0bl6lm5ml9i7wd09fn8hb7047mkby"))))
+         "0b0qlki9bp9mm41lrh6rc6qqvm4nsz8da63sby3a1f2xm9b9vvg2"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-attrs" ,python-attrs))) ; for tests
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 3a772d3121..d93796c5d8 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -1316,17 +1316,13 @@ Service Switch}, for an example."
       (documentation "Run the syslog daemon (syslogd).")
       (provision '(syslogd))
       (requirement '(user-processes))
-      (start #~(let ((spawn (make-forkexec-constructor
-                             (list #$(syslog-configuration-syslogd config)
-                                   "--rcfile"
-                                   #$(syslog-configuration-config-file config))
-                             #:pid-file "/var/run/syslog.pid")))
-                 (lambda ()
-                   ;; Set the umask such that file permissions are #o640.
-                   (let ((mask (umask #o137))
-                         (pid  (spawn)))
-                     (umask mask)
-                     pid))))
+      (start #~(make-forkexec-constructor
+                (list #$(syslog-configuration-syslogd config)
+                      "--rcfile"
+                      #$(syslog-configuration-config-file config))
+                ;; Set the umask such that file permissions are #o640.
+                #:file-creation-mask #o137
+                #:pid-file "/var/run/syslog.pid"))
       (stop #~(make-kill-destructor))))))
 
 ;; Snippet adapted from the GNU inetutils manual.
diff --git a/gnu/services/dns.scm b/gnu/services/dns.scm
index a07946d085..478c837d13 100644
--- a/gnu/services/dns.scm
+++ b/gnu/services/dns.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -748,6 +749,8 @@ cache.size = 100 * MB
                     (default #f))       ;boolean
   (servers          dnsmasq-configuration-servers
                     (default '()))      ;list of string
+  (addresses        dnsmasq-configuration-addresses
+                    (default '()))      ;list of string
   (cache-size       dnsmasq-configuration-cache-size
                     (default 150))      ;integer
   (negative-cache?  dnsmasq-configuration-negative-cache?
@@ -759,7 +762,7 @@ cache.size = 100 * MB
                                 no-hosts?
                                 port local-service? listen-addresses
                                 resolv-file no-resolv? servers
-                                cache-size negative-cache?)
+                                addresses cache-size negative-cache?)
      (shepherd-service
       (provision '(dnsmasq))
       (requirement '(networking))
@@ -783,6 +786,8 @@ cache.size = 100 * MB
                          '())
                   #$@(map (cut format #f "--server=~a" <>)
                           servers)
+                  #$@(map (cut format #f "--address=~a" <>)
+                          addresses)
                   #$(format #f "--cache-size=~a" cache-size)
                   #$@(if negative-cache?
                          '()
diff --git a/gnu/system.scm b/gnu/system.scm
index 861fdd7daa..99ce66aa4f 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019 Meiyo Peng <meiyo.peng@gmail.com>
 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -148,7 +149,8 @@
             %base-packages-linux
             %base-packages-networking
             %base-packages-utils
-            %base-firmware))
+            %base-firmware
+            %default-kernel-arguments))
 
 ;;; Commentary:
 ;;;
@@ -179,7 +181,7 @@
   (kernel-loadable-modules operating-system-kernel-loadable-modules
                     (default '()))                ; list of packages
   (kernel-arguments operating-system-user-kernel-arguments
-                    (default '("quiet")))         ; list of gexps/strings
+                    (default %default-kernel-arguments)) ; list of gexps/strings
   (bootloader operating-system-bootloader)        ; <bootloader-configuration>
   (label operating-system-label                   ; string
          (thunked)
@@ -488,6 +490,17 @@ possible (that is if there's a LINUX keyword argument in the build system)."
        ((#:linux kernel #f)
         target-kernel)))))
 
+(define %default-modprobe-blacklist
+  ;; List of kernel modules to blacklist by default.
+  '("usbmouse" ;races with bcm5974, see <https://bugs.gnu.org/35574>
+    "usbkbd")) ;races with usbhid, see <https://issues.guix.gnu.org/35574#18>
+
+(define %default-kernel-arguments
+  ;; Default arguments passed to the kernel.
+  (list (string-append "modprobe.blacklist="
+                       (string-join %default-modprobe-blacklist ","))
+        "quiet"))
+
 (define* (operating-system-directory-base-entries os)
   "Return the basic entries of the 'system' directory of OS for use as the
 value of the SYSTEM-SERVICE-TYPE service."
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 822c4e3cfa..7166c12bcc 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -470,12 +470,6 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m
     (label (string-append "GNU Guix installation "
                           (package-version guix)))
 
-    ;; XXX: The AMD Radeon driver is reportedly broken, which makes kmscon
-    ;; non-functional:
-    ;; <https://lists.gnu.org/archive/html/guix-devel/2019-03/msg00441.html>.
-    ;; Thus, blacklist it.
-    (kernel-arguments '("quiet" "modprobe.blacklist=radeon"))
-
     (file-systems
      ;; Note: the disk image build code overrides this root file system with
      ;; the appropriate one.
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 1aa3113ae5..d84f352663 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -275,6 +275,7 @@ FILE-SYSTEMS."
                     ("btrfs" => '("btrfs"))
                     ("iso9660" => '("isofs"))
                     ("jfs" => '("jfs"))
+                    ("f2fs" => '("f2fs" "crc32_generic"))
                     (else '())))
 
 (define (file-system-modules file-systems)
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 2fecf3eb7d..25ff146bdf 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -1489,6 +1489,7 @@ the entries in MANIFEST."
                     ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=29654#23>.
                     #:env-vars `(("MALLOC_PERTURB_" . "1"))
 
+                    #:substitutable? #f
                     #:local-build? #t
                     #:properties
                     `((type . profile-hook)