summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-09-13 21:28:01 +0200
committerLudovic Courtès <ludo@gnu.org>2015-09-13 21:28:01 +0200
commit75710da66710cef1d32053cd8f350d13057d02a7 (patch)
treeabef6a326c741b1eb18db866b2f2bacee3e5fc51
parentab20c2cc33063ce783515d8ae7899ec7e2ca6f96 (diff)
parent610075f7c94c80b8321887b7ccf8bb1a7edd2b8e (diff)
downloadguix-75710da66710cef1d32053cd8f350d13057d02a7.tar.gz
Merge branch 'master' into core-updates
-rw-r--r--.gitignore3
-rw-r--r--Makefile.am8
-rw-r--r--configure.ac3
-rw-r--r--doc/emacs.texi102
-rw-r--r--doc/guix.texi166
-rw-r--r--emacs.am13
-rw-r--r--emacs/guix-backend.el14
-rw-r--r--emacs/guix-base.el121
-rw-r--r--emacs/guix-command.el671
-rw-r--r--emacs/guix-config.el.in40
-rw-r--r--emacs/guix-external.el72
-rw-r--r--emacs/guix-help-vars.el108
-rw-r--r--emacs/guix-info.el48
-rw-r--r--emacs/guix-init.el (renamed from emacs/guix-init.el.in)4
-rw-r--r--emacs/guix-list.el52
-rw-r--r--emacs/guix-main.scm78
-rw-r--r--emacs/guix-messages.el8
-rw-r--r--emacs/guix-pcomplete.el91
-rw-r--r--emacs/guix-popup.el48
-rw-r--r--emacs/guix-prettify.el17
-rw-r--r--emacs/guix-profiles.el (renamed from emacs/guix-profiles.el.in)4
-rw-r--r--emacs/guix-read.el176
-rw-r--r--emacs/guix-utils.el120
-rw-r--r--emacs/guix.el12
-rw-r--r--gnu-system.am12
-rw-r--r--gnu/build/linux-container.scm18
-rw-r--r--gnu/build/linux-initrd.scm4
-rw-r--r--gnu/packages/admin.scm10
-rw-r--r--gnu/packages/audacity.scm2
-rw-r--r--gnu/packages/audio.scm7
-rw-r--r--gnu/packages/backup.scm40
-rw-r--r--gnu/packages/bioinformatics.scm39
-rw-r--r--gnu/packages/bootstrap.scm2
-rw-r--r--gnu/packages/compression.scm34
-rw-r--r--gnu/packages/cpio.scm18
-rw-r--r--gnu/packages/databases.scm19
-rw-r--r--gnu/packages/ebook.scm4
-rw-r--r--gnu/packages/emacs.scm107
-rw-r--r--gnu/packages/engineering.scm48
-rw-r--r--gnu/packages/enlightenment.scm53
-rw-r--r--gnu/packages/firmware.scm6
-rw-r--r--gnu/packages/fonts.scm82
-rw-r--r--gnu/packages/freedesktop.scm104
-rw-r--r--gnu/packages/game-development.scm14
-rw-r--r--gnu/packages/games.scm8
-rw-r--r--gnu/packages/gdb.scm54
-rw-r--r--gnu/packages/geeqie.scm3
-rw-r--r--gnu/packages/gettext.scm63
-rw-r--r--gnu/packages/gnome.scm139
-rw-r--r--gnu/packages/gnucash.scm46
-rw-r--r--gnu/packages/gnupg.scm4
-rw-r--r--gnu/packages/gstreamer.scm2
-rw-r--r--gnu/packages/gtk.scm88
-rw-r--r--gnu/packages/ibus.scm120
-rw-r--r--gnu/packages/image.scm16
-rw-r--r--gnu/packages/libcanberra.scm8
-rw-r--r--gnu/packages/libedit.scm6
-rw-r--r--gnu/packages/libusb.scm41
-rw-r--r--gnu/packages/linux-libre-i686.conf220
-rw-r--r--gnu/packages/linux-libre-x86_64.conf239
-rw-r--r--gnu/packages/linux.scm4
-rw-r--r--gnu/packages/mail.scm34
-rw-r--r--gnu/packages/make-bootstrap.scm2
-rw-r--r--gnu/packages/maths.scm36
-rw-r--r--gnu/packages/music.scm66
-rw-r--r--gnu/packages/ncdu.scm33
-rw-r--r--gnu/packages/openstack.scm216
-rw-r--r--gnu/packages/package-management.scm13
-rw-r--r--gnu/packages/patches/cpio-CVE-2014-9112-pt1.patch231
-rw-r--r--gnu/packages/patches/cpio-CVE-2014-9112-pt2.patch51
-rw-r--r--gnu/packages/patches/cpio-CVE-2014-9112-pt3.patch23
-rw-r--r--gnu/packages/patches/cpio-CVE-2014-9112-pt4.patch105
-rw-r--r--gnu/packages/patches/cpio-CVE-2014-9112-pt5.patch88
-rw-r--r--gnu/packages/patches/cpio-fix-symlink-bad-length-test.patch44
-rw-r--r--gnu/packages/patches/gnucash-price-quotes-perl.patch23
-rw-r--r--gnu/packages/patches/guile-present-coding.patch16
-rw-r--r--gnu/packages/patches/guile-rsvg-pkgconfig.patch16
-rw-r--r--gnu/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch15
-rw-r--r--gnu/packages/patches/xfce4-settings-defaults.patch29
-rw-r--r--gnu/packages/patchutils.scm32
-rw-r--r--gnu/packages/pdf.scm46
-rw-r--r--gnu/packages/perl.scm71
-rw-r--r--gnu/packages/photo.scm126
-rw-r--r--gnu/packages/polkit.scm79
-rw-r--r--gnu/packages/python.scm116
-rw-r--r--gnu/packages/ruby.scm516
-rw-r--r--gnu/packages/ssh.scm32
-rw-r--r--gnu/packages/statistics.scm385
-rw-r--r--gnu/packages/version-control.scm28
-rw-r--r--gnu/packages/video.scm17
-rw-r--r--gnu/packages/vpn.scm4
-rw-r--r--gnu/packages/web.scm131
-rw-r--r--gnu/packages/wm.scm79
-rw-r--r--gnu/packages/xfce.scm53
-rw-r--r--gnu/packages/xml.scm22
-rw-r--r--gnu/services/base.scm4
-rw-r--r--gnu/services/desktop.scm238
-rw-r--r--gnu/system/file-systems.scm22
-rw-r--r--gnu/system/install.scm2
-rw-r--r--gnu/system/locale.scm2
-rw-r--r--guix/build-system/r.scm134
-rw-r--r--guix/build/download.scm79
-rw-r--r--guix/build/emacs-build-system.scm2
-rw-r--r--guix/build/r-build-system.scm112
-rw-r--r--guix/build/ruby-build-system.scm16
-rw-r--r--guix/build/syscalls.scm24
-rw-r--r--guix/download.scm29
-rw-r--r--guix/git-download.scm4
-rw-r--r--guix/http-client.scm7
-rw-r--r--guix/import/cran.scm188
-rw-r--r--guix/import/gem.scm3
-rw-r--r--guix/licenses.scm20
-rw-r--r--guix/monads.scm8
-rw-r--r--guix/packages.scm15
-rw-r--r--guix/scripts/build.scm49
-rw-r--r--guix/scripts/graph.scm27
-rw-r--r--guix/scripts/import.scm2
-rw-r--r--guix/scripts/import/cran.scm92
-rw-r--r--guix/scripts/lint.scm28
-rw-r--r--guix/scripts/publish.scm23
-rw-r--r--guix/scripts/pull.scm2
-rw-r--r--guix/scripts/refresh.scm2
-rwxr-xr-xguix/scripts/substitute.scm2
-rw-r--r--guix/ui.scm111
-rw-r--r--tests/cran.scm178
-rw-r--r--tests/derivations.scm4
-rw-r--r--tests/gem.scm82
-rw-r--r--tests/guix-graph.sh5
-rw-r--r--tests/lint.scm6
-rw-r--r--tests/monads.scm4
-rw-r--r--tests/packages.scm17
131 files changed, 6647 insertions, 1337 deletions
diff --git a/.gitignore b/.gitignore
index 4547557631..a363c074ca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -120,8 +120,7 @@ GTAGS
 /emacs/Makefile
 /emacs/guix-autoloads.el
 /emacs/guix-helper.scm
-/emacs/guix-init.el
-/emacs/guix-profiles.el
+/emacs/guix-config.el
 /doc/os-config-bare-bones.texi
 /doc/os-config-desktop.texi
 /doc/*.1
diff --git a/Makefile.am b/Makefile.am
index 85cc7bd50f..9a810e4ebd 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -58,6 +58,7 @@ MODULES =					\
   guix/build-system/perl.scm			\
   guix/build-system/python.scm			\
   guix/build-system/waf.scm			\
+  guix/build-system/r.scm			\
   guix/build-system/ruby.scm			\
   guix/build-system/trivial.scm			\
   guix/ftp-client.scm				\
@@ -77,6 +78,7 @@ MODULES =					\
   guix/build/gnu-dist.scm			\
   guix/build/perl-build-system.scm		\
   guix/build/python-build-system.scm		\
+  guix/build/r-build-system.scm			\
   guix/build/ruby-build-system.scm		\
   guix/build/waf-build-system.scm		\
   guix/build/haskell-build-system.scm		\
@@ -97,6 +99,7 @@ MODULES =					\
   guix/import/gnu.scm				\
   guix/import/snix.scm				\
   guix/import/cabal.scm				\
+  guix/import/cran.scm				\
   guix/import/hackage.scm			\
   guix/import/elpa.scm   			\
   guix/scripts/download.scm			\
@@ -112,6 +115,7 @@ MODULES =					\
   guix/scripts/refresh.scm			\
   guix/scripts/system.scm			\
   guix/scripts/lint.scm				\
+  guix/scripts/import/cran.scm			\
   guix/scripts/import/gnu.scm			\
   guix/scripts/import/nix.scm			\
   guix/scripts/import/hackage.scm		\
@@ -198,6 +202,7 @@ SCM_TESTS =					\
   tests/packages.scm				\
   tests/snix.scm				\
   tests/hackage.scm				\
+  tests/cran.scm				\
   tests/elpa.scm				\
   tests/store.scm				\
   tests/monads.scm				\
@@ -226,7 +231,8 @@ MODULES +=					\
 
 SCM_TESTS += 					\
   tests/pypi.scm				\
-  tests/cpan.scm
+  tests/cpan.scm				\
+  tests/gem.scm
 
 endif
 
diff --git a/configure.ac b/configure.ac
index 247a9d5068..cbe5dfb67e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -205,8 +205,7 @@ AM_CONDITIONAL([HAVE_EMACS], [test "x$EMACS" != "xno"])
 
 emacsuidir="${guilemoduledir}/guix/emacs"
 AC_SUBST([emacsuidir])
-AC_CONFIG_FILES([emacs/guix-init.el
-                 emacs/guix-profiles.el
+AC_CONFIG_FILES([emacs/guix-config.el
                  emacs/guix-helper.scm])
 
 AC_OUTPUT
diff --git a/doc/emacs.texi b/doc/emacs.texi
index 180037a88f..db2e657d27 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -1,29 +1,22 @@
 @node Emacs Interface
-@section Emacs Interface
+@chapter Emacs Interface
 
 @cindex Emacs
-GNU Guix comes with a visual user interface for GNU@tie{}Emacs, known
-as ``guix.el''.  It can be used for routine package management tasks,
-pretty much like the @command{guix package} command (@pxref{Invoking
-guix package}).  Specifically, ``guix.el'' makes it easy to:
-
-@itemize
-@item browse and display packages and generations;
-@item search, install, upgrade and remove packages;
-@item display packages from previous generations;
-@item do some other useful things.
-@end itemize
+GNU Guix comes with several useful modules (known as ``guix.el'') for
+GNU@tie{}Emacs which are intended to make an Emacs user interaction with
+Guix convenient and fun.
 
 @menu
 * Initial Setup: Emacs Initial Setup.	Preparing @file{~/.emacs}.
-* Usage: Emacs Usage.			Using the interface.
-* Configuration: Emacs Configuration.	Configuring the interface.
+* Package Management: Emacs Package Management.	Managing packages and generations.
+* Popup Interface: Emacs Popup Interface.	Magit-like interface for guix commands.
 * Prettify Mode: Emacs Prettify.	Abbreviating @file{/gnu/store/@dots{}} file names.
 * Completions: Emacs Completions.       Completing @command{guix} shell command.
 @end menu
 
+
 @node Emacs Initial Setup
-@subsection Initial Setup
+@section Initial Setup
 
 On the Guix System Distribution (@pxref{GNU Distribution}), ``guix.el''
 is ready to use, provided Guix is installed system-wide, which is the
@@ -43,6 +36,12 @@ later;
 @uref{http://nongnu.org/geiser/, Geiser}, version 0.3 or later: it is
 used for interacting with the Guile process.
 
+@item
+@uref{https://github.com/magit/magit/, magit-popup library}.  You
+already have this library if you use Magit 2.1.0 or later.  This library
+is an optional dependency---it is required only for @kbd{M-x@tie{}guix}
+command (@pxref{Emacs Popup Interface}).
+
 @end itemize
 
 When it is done ``guix.el'' may be configured by requiring a special
@@ -105,22 +104,32 @@ emacs, The GNU Emacs Manual}).
 You can activate Emacs packages installed in your profile whenever you
 want using @kbd{M-x@tie{}guix-emacs-load-autoloads}.
 
-@node Emacs Usage
-@subsection Usage
+
+@node Emacs Package Management
+@section Package Management
 
 Once ``guix.el'' has been successfully configured, you should be able to
-use commands for displaying packages and generations.  This information
-can be displayed in a ``list'' or ``info'' buffer.
+use a visual interface for routine package management tasks, pretty much
+like the @command{guix package} command (@pxref{Invoking guix package}).
+Specifically, it makes it easy to:
+
+@itemize
+@item browse and display packages and generations;
+@item search, install, upgrade and remove packages;
+@item display packages from previous generations;
+@item do some other useful things.
+@end itemize
 
 @menu
 * Commands: Emacs Commands.			@kbd{M-x guix-@dots{}}
 * General information: Emacs General info.	Common for both interfaces.
 * ``List'' buffer: Emacs List buffer.		List-like interface.
 * ``Info'' buffer: Emacs Info buffer.		Help-like interface.
+* Configuration: Emacs Configuration.		Configuring the interface.
 @end menu
 
 @node Emacs Commands
-@subsubsection Commands
+@subsection Commands
 
 All commands for displaying packages and generations use the current
 profile, which can be changed with
@@ -191,7 +200,7 @@ Once @command{guix pull} has succeeded, the Guix REPL is restared.  This
 allows you to keep using the Emacs interface with the updated Guix.
 
 @node Emacs General info
-@subsubsection General information
+@subsection General information
 
 The following keys are available for both ``list'' and ``info'' types of
 buffers:
@@ -235,7 +244,7 @@ was restarted, you may want to revert ``list'' buffer (by pressing
 @kbd{g}).
 
 @node Emacs List buffer
-@subsubsection ``List'' buffer
+@subsection ``List'' buffer
 
 An interface of a ``list'' buffer is similar to the interface provided
 by ``package.el'' (@pxref{Package Menu,,, emacs, The GNU Emacs Manual}).
@@ -310,7 +319,7 @@ with another marked generation.
 @end table
 
 @node Emacs Info buffer
-@subsubsection ``Info'' buffer
+@subsection ``Info'' buffer
 
 The interface of an ``info'' buffer is similar to the interface of
 @code{help-mode} (@pxref{Help Mode,,, emacs, The GNU Emacs Manual}).
@@ -484,12 +493,49 @@ Various settings for ``info'' buffers.
 @end table
 
 
+@node Emacs Popup Interface
+@section Popup Interface
+
+If you ever used Magit, you know what ``popup interface'' is
+(@pxref{Top,,, magit-popup, Magit-Popup User Manual}).  Even if you are
+not acquainted with Magit, there should be no worries as it is very
+intuitive.
+
+So @kbd{M-x@tie{}guix} command provides a top-level popup interface for
+all available guix commands.  When you select an option, you'll be
+prompted for a value in the minibuffer.  Many values have completions,
+so don't hesitate to press @key{TAB} key.  Multiple values (for example,
+packages or lint checkers) should be separated by commas.
+
+After specifying all options and switches for a command, you may choose
+one of the available actions.  The following default actions are
+available for all commands:
+
+@itemize
+
+@item
+Run the command in the Guix REPL.  It is faster than running
+@code{guix@tie{}@dots{}} command directly in shell, as there is no
+need to run another guile process and to load required modules there.
+
+@item
+Run the command in a shell buffer.  You can set
+@code{guix-run-in-shell-function} variable to fine tune the shell buffer
+you want to use.
+
+@item
+Add the command line to the kill ring (@pxref{Kill Ring,,, emacs, The
+GNU Emacs Manual}).
+
+@end itemize
+
+
 @node Emacs Prettify
-@subsection Guix Prettify Mode
+@section Guix Prettify Mode
 
-Along with ``guix.el'', GNU@tie{}Guix comes with ``guix-prettify.el''.
-It provides a minor mode for abbreviating store file names by replacing
-hash sequences of symbols with ``@dots{}'':
+GNU@tie{}Guix also comes with ``guix-prettify.el''.  It provides a minor
+mode for abbreviating store file names by replacing hash sequences of
+symbols with ``@dots{}'':
 
 @example
 /gnu/store/72f54nfp6g1hz873w8z3gfcah0h4nl9p-foo-0.1
@@ -526,7 +572,7 @@ mode hooks (@pxref{Hooks,,, emacs, The GNU Emacs Manual}), for example:
 
 
 @node Emacs Completions
-@subsection Shell Completions
+@section Shell Completions
 
 Another feature that becomes available after configuring Emacs interface
 (@pxref{Emacs Initial Setup}) is completing of @command{guix}
diff --git a/doc/guix.texi b/doc/guix.texi
index f69440c325..9ae91a8d1e 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -70,6 +70,7 @@ package management tool written for the GNU system.
 * Introduction::                What is Guix about?
 * Installation::                Installing Guix.
 * Package Management::          Package installation, upgrade, etc.
+* Emacs Interface::             Using Guix from Emacs.
 * Programming Interface::       Using Guix in Scheme.
 * Utilities::                   Package management commands.
 * GNU Distribution::            Software for your friendly GNU system.
@@ -101,13 +102,20 @@ Package Management
 
 * Features::                    How Guix will make your life brighter.
 * Invoking guix package::       Package installation, removal, etc.
-* Emacs Interface::             Package management from Emacs.
 * Substitutes::                 Downloading pre-built binaries.
 * Packages with Multiple Outputs::  Single source package, multiple outputs.
 * Invoking guix gc::            Running the garbage collector.
 * Invoking guix pull::          Fetching the latest Guix and distribution.
 * Invoking guix archive::       Exporting and importing store files.
 
+Emacs Interface
+
+* Initial Setup: Emacs Initial Setup.	Preparing @file{~/.emacs}.
+* Package Management: Emacs Package Management.	Managing packages and generations.
+* Popup Interface: Emacs Popup Interface.	Magit-like interface for guix commands.
+* Prettify Mode: Emacs Prettify.	Abbreviating @file{/gnu/store/@dots{}} file names.
+* Completions: Emacs Completions.       Completing @command{guix} shell command.
+
 Programming Interface
 
 * Defining Packages::           Defining new packages.
@@ -964,14 +972,13 @@ features.
 
 This chapter describes the main features of Guix, as well as the package
 management tools it provides.  Two user interfaces are provided for
-routine package management tasks: a command-line interface
-(@pxref{Invoking guix package, @code{guix package}}), and a visual user
-interface in Emacs (@pxref{Emacs Interface}).
+routine package management tasks: A command-line interface described below
+(@pxref{Invoking guix package, @code{guix package}}), as well as a visual user
+interface in Emacs described in a subsequent chapter (@pxref{Emacs Interface}).
 
 @menu
 * Features::                    How Guix will make your life brighter.
 * Invoking guix package::       Package installation, removal, etc.
-* Emacs Interface::             Package management from Emacs.
 * Substitutes::                 Downloading pre-built binaries.
 * Packages with Multiple Outputs::  Single source package, multiple outputs.
 * Invoking guix gc::            Running the garbage collector.
@@ -1455,8 +1462,6 @@ Finally, since @command{guix package} may actually start build
 processes, it supports all the common build options that @command{guix
 build} supports (@pxref{Invoking guix build, common build options}).
 
-@include emacs.texi
-
 @node Substitutes
 @section Substitutes
 
@@ -1898,6 +1903,8 @@ automatically builds them.  The build process may be controlled with the
 same options that can be passed to the @command{guix build} command
 (@pxref{Invoking guix build, common build options}).
 
+@c *********************************************************************
+@include emacs.texi
 
 @c *********************************************************************
 @node Programming Interface
@@ -2484,6 +2491,16 @@ passes flags specified by the @code{#:make-maker-flags} or
 Which Perl package is used can be specified with @code{#:perl}.
 @end defvr
 
+@defvr {Scheme Variable} r-build-system
+This variable is exported by @code{(guix build-system r)}.  It
+implements the build procedure used by @uref{http://r-project.org, R}
+packages, which essentially is little more than running @code{R CMD
+INSTALL --library=/gnu/store/@dots{}} in an environment where
+@code{R_LIBS_SITE} contains the paths to all R package inputs.  Tests
+are run after installation using the R function
+@code{tools::testInstalledPackage}.
+@end defvr
+
 @defvr {Scheme Variable} ruby-build-system
 This variable is exported by @code{(guix build-system ruby)}.  It
 implements the RubyGems build procedure used by Ruby packages, which
@@ -3612,7 +3629,7 @@ Make @var{file} a symlink to the result, and register it as a garbage
 collector root.
 
 @item --log-file
-Return the build log file names for the given
+Return the build log file names or URLs for the given
 @var{package-or-derivation}s, or raise an error if build logs are
 missing.
 
@@ -3626,7 +3643,19 @@ guix build --log-file guile
 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
 @end example
 
+If a log is unavailable locally, and unless @code{--no-substitutes} is
+passed, the command looks for a corresponding log on one of the
+substitute servers (as specified with @code{--substitute-urls}.)
+
+So for instance, let's say you want to see the build log of GDB on MIPS
+but you're actually on an @code{x86_64} machine:
 
+@example
+$ guix build --log-file gdb -s mips64el-linux 
+http://hydra.gnu.org/log/@dots{}-gdb-7.10
+@end example
+
+You can freely access a huge library of build logs!
 @end table
 
 @cindex common build options
@@ -3932,6 +3961,21 @@ Perl module:
 guix import cpan Acme::Boolean
 @end example
 
+@item cran
+@cindex CRAN
+Import meta-data from @uref{http://cran.r-project.org/, CRAN}, the
+central repository for the @uref{http://r-project.org, GNU@tie{}R
+statistical and graphical environment}.
+
+Information is extracted from the HTML package description.
+
+The command command below imports meta-data for the @code{Cairo}
+R package:
+
+@example
+guix import cran Cairo
+@end example
+
 @item nix
 Import meta-data from a local copy of the source of the
 @uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
@@ -4385,6 +4429,16 @@ the values listed above.
 
 @item --list-types
 List the supported graph types.
+
+@item --expression=@var{expr}
+@itemx -e @var{expr}
+Consider the package @var{expr} evaluates to.
+
+This is useful to precisely refer to a package, as in this example:
+
+@example
+guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
+@end example
 @end table
 
 
@@ -5477,7 +5531,7 @@ special-case and is automatically added whether or not it is specified.
 A @dfn{locale} defines cultural conventions for a particular language
 and region of the world (@pxref{Locales,,, libc, The GNU C Library
 Reference Manual}).  Each locale has a name that typically has the form
-@code{@var{language}_@var{territory}.@var{charset}}---e.g.,
+@code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
 @code{fr_LU.utf8} designates the locale for the French language, with
 cultural conventions from Luxembourg, and using the UTF-8 encoding.
 
@@ -5538,9 +5592,17 @@ IANA}.
 @end deftp
 
 @defvr {Scheme Variable} %default-locale-definitions
-An arbitrary list of commonly used locales, used as the default value of
-the @code{locale-definitions} field of @code{operating-system}
+An arbitrary list of commonly used UTF-8 locales, used as the default
+value of the @code{locale-definitions} field of @code{operating-system}
 declarations.
+
+@cindex locale name
+@cindex normalized codeset in locale names
+These locale definitions use the @dfn{normalized codeset} for the part
+that follows the dot in the name (@pxref{Using gettextized software,
+normalized codeset,, libc, The GNU C Library Reference Manual}).  So for
+instance it has @code{uk_UA.utf8} but @emph{not}, say,
+@code{uk_UA.UTF-8}.
 @end defvr
 
 @node Services
@@ -6009,6 +6071,7 @@ adds or adjust services for a typical ``desktop'' setup.
 In particular, it adds a graphical login manager (@pxref{X Window,
 @code{slim-service}}), a network management tool (@pxref{Networking
 Services, @code{wicd-service}}), energy and color management services,
+the @code{elogind} login and seat manager, the Polkit privilege service,
 the GeoClue location service, an NTP client (@pxref{Networking
 Services}), the Avahi daemon, and has the name service switch service
 configured to be able to use @code{nss-mdns} (@pxref{Name Service
@@ -6037,6 +6100,87 @@ and policy files.  For example, to allow avahi-daemon to use the system bus,
 @var{services} must be equal to @code{(list avahi)}.
 @end deffn
 
+@deffn {Monadic Procedure} elogind-service @
+                         [#:elogind @var{elogind}] [#:config @var{config}]
+Return a service that runs the @code{elogind} login and
+seat management daemon.  @uref{https://github.com/andywingo/elogind,
+Elogind} exposes a D-Bus interface that can be used to know which users
+are logged in, know what kind of sessions they have open, suspend the
+system, inhibit system suspend, reboot the system, and other tasks.
+
+Elogind handles most system-level power events for a computer, for
+example suspending the system when a lid is closed, or shutting it down
+when the power button is pressed.
+
+The @var{config} keyword argument specifies the configuration for
+elogind, and should be the result of a @code{(elogind-configuration
+(@var{parameter} @var{value})...)} invocation.  Available parameters and
+their default values are:
+
+@table @code
+@item kill-user-processes?
+@code{#f}
+@item kill-only-users
+@code{()}
+@item kill-exclude-users
+@code{("root")}
+@item inhibit-delay-max-seconds
+@code{5}
+@item handle-power-key
+@code{poweroff}
+@item handle-suspend-key
+@code{suspend}
+@item handle-hibernate-key
+@code{hibernate}
+@item handle-lid-switch
+@code{suspend}
+@item handle-lid-switch-docked
+@code{ignore}
+@item power-key-ignore-inhibited?
+@code{#f}
+@item suspend-key-ignore-inhibited?
+@code{#f}
+@item hibernate-key-ignore-inhibited?
+@code{#f}
+@item lid-switch-ignore-inhibited?
+@code{#t}
+@item holdoff-timeout-seconds
+@code{30}
+@item idle-action
+@code{ignore}
+@item idle-action-seconds
+@code{(* 30 60)}
+@item runtime-directory-size-percent
+@code{10}
+@item runtime-directory-size
+@code{#f}
+@item remove-ipc?
+@code{#t}
+@item suspend-state
+@code{("mem" "standby" "freeze")}
+@item suspend-mode
+@code{()}
+@item hibernate-state
+@code{("disk")}
+@item hibernate-mode
+@code{("platform" "shutdown")}
+@item hybrid-sleep-state
+@code{("disk")}
+@item hybrid-sleep-mode
+@code{("suspend" "platform" "shutdown")}
+@end table
+@end deffn
+
+@deffn {Monadic Procedure} polkit-service @
+                         [#:polkit @var{polkit}]
+Return a service that runs the Polkit privilege manager.
+@uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit} allows
+system administrators to grant access to privileged operations in a
+structured way.  For example, polkit rules can allow a logged-in user
+whose session is active to shut down the machine, if there are no other
+users active.
+@end deffn
+
 @deffn {Monadic Procedure} upower-service [#:upower @var{upower}] @
                          [#:watts-up-pro? #f] @
                          [#:poll-batteries? #t] @
diff --git a/emacs.am b/emacs.am
index 372b33e822..5d3cb81257 100644
--- a/emacs.am
+++ b/emacs.am
@@ -1,5 +1,5 @@
 # GNU Guix --- Functional package management for GNU
-# Copyright © 2014 Alex Kost <alezost@gmail.com>
+# Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
 #
 # This file is part of GNU Guix.
 #
@@ -21,13 +21,20 @@ AUTOLOADS = emacs/guix-autoloads.el
 ELFILES =					\
   emacs/guix-backend.el				\
   emacs/guix-base.el				\
+  emacs/guix-command.el				\
   emacs/guix-emacs.el				\
+  emacs/guix-external.el			\
+  emacs/guix-help-vars.el			\
   emacs/guix-history.el				\
   emacs/guix-info.el				\
+  emacs/guix-init.el				\
   emacs/guix-list.el				\
   emacs/guix-messages.el			\
   emacs/guix-pcomplete.el			\
+  emacs/guix-popup.el				\
   emacs/guix-prettify.el			\
+  emacs/guix-profiles.el			\
+  emacs/guix-read.el				\
   emacs/guix-utils.el				\
   emacs/guix.el
 
@@ -37,9 +44,7 @@ dist_lisp_DATA =				\
   $(ELFILES)					\
   $(AUTOLOADS)
 
-nodist_lisp_DATA =				\
-  emacs/guix-init.el				\
-  emacs/guix-profiles.el
+nodist_lisp_DATA = emacs/guix-config.el
 
 $(AUTOLOADS): $(ELFILES)
 	$(EMACS) --batch --eval						\
diff --git a/emacs/guix-backend.el b/emacs/guix-backend.el
index 73a429b9ee..7db1daacf0 100644
--- a/emacs/guix-backend.el
+++ b/emacs/guix-backend.el
@@ -52,26 +52,16 @@
 ;;; Code:
 
 (require 'geiser-mode)
+(require 'guix-config)
 (require 'guix-emacs)
 
-(defvar guix-load-path
-  (file-name-directory (or load-file-name
-                           (locate-library "guix")))
+(defvar guix-load-path guix-emacs-interface-directory
   "Directory with scheme files for \"guix.el\" package.")
 
 (defvar guix-helper-file
   (expand-file-name "guix-helper.scm" guix-load-path)
   "Auxiliary scheme file for loading.")
 
-(defvar guix-guile-program (or geiser-guile-binary "guile")
-  "Name of the guile executable used for Guix REPL.
-May be either a string (the name of the executable) or a list of
-strings of the form:
-
-  (NAME . ARGS)
-
-Where ARGS is a list of arguments to the guile program.")
-
 
 ;;; REPL
 
diff --git a/emacs/guix-base.el b/emacs/guix-base.el
index fe89584f18..3bee910b05 100644
--- a/emacs/guix-base.el
+++ b/emacs/guix-base.el
@@ -1,6 +1,6 @@
 ;;; guix-base.el --- Common definitions   -*- lexical-binding: t -*-
 
-;; Copyright © 2014 Alex Kost <alezost@gmail.com>
+;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
 
 ;; This file is part of GNU Guix.
 
@@ -89,8 +89,8 @@ Each element of the list has a form:
 
 (defun guix-get-param-title (entry-type param)
   "Return title of an ENTRY-TYPE entry parameter PARAM."
-  (or (guix-get-key-val guix-param-titles
-                        entry-type param)
+  (or (guix-assq-value guix-param-titles
+                       entry-type param)
       (prog1 (symbol-name param)
         (message "Couldn't find title for '%S %S'."
                  entry-type param))))
@@ -102,15 +102,15 @@ Each element of the list has a form:
 
 (defun guix-get-full-name (entry &optional output)
   "Return name specification of the package ENTRY and OUTPUT."
-  (guix-get-name-spec (guix-get-key-val entry 'name)
-                      (guix-get-key-val entry 'version)
+  (guix-get-name-spec (guix-assq-value entry 'name)
+                      (guix-assq-value entry 'version)
                       output))
 
 (defun guix-entry-to-specification (entry)
   "Return name specification by the package or output ENTRY."
-  (guix-get-name-spec (guix-get-key-val entry 'name)
-                      (guix-get-key-val entry 'version)
-                      (guix-get-key-val entry 'output)))
+  (guix-get-name-spec (guix-assq-value entry 'name)
+                      (guix-assq-value entry 'version)
+                      (guix-assq-value entry 'output)))
 
 (defun guix-entries-to-specifications (entries)
   "Return name specifications by the package or output ENTRIES."
@@ -120,13 +120,13 @@ Each element of the list has a form:
 (defun guix-get-installed-outputs (entry)
   "Return list of installed outputs for the package ENTRY."
   (mapcar (lambda (installed-entry)
-            (guix-get-key-val installed-entry 'output))
-          (guix-get-key-val entry 'installed)))
+            (guix-assq-value installed-entry 'output))
+          (guix-assq-value entry 'installed)))
 
 (defun guix-get-entry-by-id (id entries)
   "Return entry from ENTRIES by entry ID."
   (cl-find-if (lambda (entry)
-                (equal id (guix-get-key-val entry 'id)))
+                (equal id (guix-assq-value entry 'id)))
               entries))
 
 (defun guix-get-package-id-and-output-by-output-id (oid)
@@ -172,13 +172,36 @@ If PATH is relative, it is considered to be relative to
       (move-to-column col)
       (recenter 1))))
 
-(defun guix-edit-package (id)
-  "Edit (go to location of) package with ID."
-  (let ((loc (guix-eval-read (guix-make-guile-expression
-                              'package-location-string id))))
-    (if loc
-        (guix-find-location loc)
-      (message "Couldn't find package location."))))
+(defun guix-package-location (id-or-name)
+  "Return location of a package with ID-OR-NAME.
+For the meaning of location, see `guix-find-location'."
+  (guix-eval-read (guix-make-guile-expression
+                   'package-location-string id-or-name)))
+
+
+;;; Receivable lists of packages, lint checkers, etc.
+
+(guix-memoized-defun guix-graph-type-names ()
+  "Return a list of names of available graph node types."
+  (guix-eval-read (guix-make-guile-expression 'graph-type-names)))
+
+(guix-memoized-defun guix-lint-checker-names ()
+  "Return a list of names of available lint checkers."
+  (guix-eval-read (guix-make-guile-expression 'lint-checker-names)))
+
+(guix-memoized-defun guix-package-names ()
+  "Return a list of names of available packages."
+  (sort
+   ;; Work around <https://github.com/jaor/geiser/issues/64>:
+   ;; list of strings is parsed much slower than list of lists,
+   ;; so we use 'package-names-lists' instead of 'package-names'.
+
+   ;; (guix-eval-read (guix-make-guile-expression 'package-names))
+
+   (mapcar #'car
+           (guix-eval-read (guix-make-guile-expression
+                            'package-names-lists)))
+   #'string<))
 
 
 ;;; Buffers and auto updating.
@@ -392,7 +415,6 @@ following keywords are available:
          (prefix         (concat "guix-" entry-type-str "-" buf-type-str))
          (group          (intern prefix))
          (mode-map-str   (concat prefix "-mode-map"))
-         (mode-map       (intern mode-map-str))
          (parent-mode    (intern (concat "guix-" buf-type-str "-mode")))
          (mode           (intern (concat prefix "-mode")))
          (mode-init-fun  (intern (concat prefix "-mode-initialize")))
@@ -910,11 +932,11 @@ ENTRIES is a list of package entries to get info about packages."
                   (outputs (cdr spec))
                   (entry (guix-get-entry-by-id id entries)))
              (when entry
-               (let ((location (guix-get-key-val entry 'location)))
+               (let ((location (guix-assq-value entry 'location)))
                  (concat (guix-get-full-name entry)
                          (when outputs
                            (concat ":"
-                                   (mapconcat #'identity outputs ",")))
+                                   (guix-concat-strings outputs ",")))
                          (when location
                            (concat "\t(" location ")")))))))
          specs)))
@@ -1061,6 +1083,63 @@ FILE.  With a prefix argument, also prompt for PROFILE."
      operation-buffer)))
 
 
+;;; Executing guix commands
+
+(defcustom guix-run-in-shell-function #'guix-run-in-shell
+  "Function used to run guix command.
+The function is called with a single argument - a command line string."
+  :type '(choice (function-item guix-run-in-shell)
+                 (function-item guix-run-in-eshell)
+                 (function :tag "Other function"))
+  :group 'guix)
+
+(defcustom guix-shell-buffer-name "*shell*"
+  "Default name of a shell buffer used for running guix commands."
+  :type 'string
+  :group 'guix)
+
+(declare-function comint-send-input "comint" t)
+
+(defun guix-run-in-shell (string)
+  "Run command line STRING in `guix-shell-buffer-name' buffer."
+  (shell guix-shell-buffer-name)
+  (goto-char (point-max))
+  (insert string)
+  (comint-send-input))
+
+(declare-function eshell-send-input "esh-mode" t)
+
+(defun guix-run-in-eshell (string)
+  "Run command line STRING in eshell buffer."
+  (eshell)
+  (goto-char (point-max))
+  (insert string)
+  (eshell-send-input))
+
+(defun guix-run-command-in-shell (args)
+  "Execute 'guix ARGS ...' command in a shell buffer."
+  (funcall guix-run-in-shell-function
+           (guix-command-string args)))
+
+(defun guix-run-command-in-repl (args)
+  "Execute 'guix ARGS ...' command in Guix REPL."
+  (guix-eval-in-repl
+   (apply #'guix-make-guile-expression
+          'guix-command args)))
+
+(defun guix-command-output (args)
+  "Return string with 'guix ARGS ...' output."
+  (guix-eval-read
+   (apply #'guix-make-guile-expression
+          'guix-command-output args)))
+
+(defun guix-help-string (&optional commands)
+  "Return string with 'guix COMMANDS ... --help' output."
+  (guix-eval-read
+   (apply #'guix-make-guile-expression
+          'help-string commands)))
+
+
 ;;; Pull
 
 (defcustom guix-update-after-pull t
diff --git a/emacs/guix-command.el b/emacs/guix-command.el
new file mode 100644
index 0000000000..81f619f434
--- /dev/null
+++ b/emacs/guix-command.el
@@ -0,0 +1,671 @@
+;;; guix-command.el --- Popup interface for guix commands  -*- lexical-binding: t -*-
+
+;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+
+;; This file is part of GNU Guix.
+
+;; GNU Guix is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Guix is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides a magit-like popup interface for running guix
+;; commands in Guix REPL.  The entry point is "M-x guix".  When it is
+;; called the first time, "guix --help" output is parsed and
+;; `guix-COMMAND-action' functions are generated for each available guix
+;; COMMAND.  Then a window with these commands is popped up.  When a
+;; particular COMMAND is called, "guix COMMAND --help" output is parsed,
+;; and a user get a new popup window with available options for this
+;; command and so on.
+
+;; To avoid hard-coding all guix options, actions, etc., as much data is
+;; taken from "guix ... --help" outputs as possible.  But this data is
+;; still incomplete: not all long options have short analogs, also
+;; special readers should be used for some options (for example, to
+;; complete package names while prompting for a package).  So after
+;; parsing --help output, the arguments are "improved".  All arguments
+;; (switches, options and actions) are `guix-command-argument'
+;; structures.
+
+;; Only "M-x guix" command is available after this file is loaded.  The
+;; rest commands/actions/popups are generated on the fly only when they
+;; are needed (that's why there is a couple of `eval'-s in this file).
+
+;; COMMANDS argument is used by many functions in this file.  It means a
+;; list of guix commands without "guix" itself, e.g.: ("build"),
+;; ("import" "gnu").  The empty list stands for the plain "guix" without
+;; subcommands.
+
+;; All actions in popup windows are divided into 2 groups:
+;;
+;; - 'Popup' actions - used to pop up another window.  For example, every
+;;   action in the 'guix' or 'guix import' window is a popup action.  They
+;;   are defined by `guix-command-define-popup-action' macro.
+;;
+;; - 'Execute' actions - used to do something with the command line (to
+;;   run a command in Guix REPL or to copy it into kill-ring) constructed
+;;   with the current popup.  They are defined by
+;;   `guix-command-define-execute-action' macro.
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'guix-popup)
+(require 'guix-utils)
+(require 'guix-help-vars)
+(require 'guix-read)
+(require 'guix-base)
+(require 'guix-external)
+
+(defgroup guix-commands nil
+  "Settings for guix popup windows."
+  :group 'guix)
+
+(defvar guix-command-complex-with-shared-arguments
+  '("system")
+  "List of guix commands which have subcommands with shared options.
+I.e., 'guix foo --help' is the same as 'guix foo bar --help'.")
+
+(defun guix-command-action-name (&optional commands &rest name-parts)
+  "Return name of action function for guix COMMANDS."
+  (guix-command-symbol (append commands name-parts (list "action"))))
+
+
+;;; Command arguments
+
+(cl-defstruct (guix-command-argument
+               (:constructor guix-command-make-argument)
+               (:copier      guix-command-copy-argument))
+  name char doc fun switch? option? action?)
+
+(cl-defun guix-command-modify-argument
+    (argument &key
+              (name    nil name-bound?)
+              (char    nil char-bound?)
+              (doc     nil doc-bound?)
+              (fun     nil fun-bound?)
+              (switch? nil switch?-bound?)
+              (option? nil option?-bound?)
+              (action? nil action?-bound?))
+  "Return a modified version of ARGUMENT."
+  (declare (indent 1))
+  (let ((copy (guix-command-copy-argument argument)))
+    (and name-bound?    (setf (guix-command-argument-name    copy) name))
+    (and char-bound?    (setf (guix-command-argument-char    copy) char))
+    (and doc-bound?     (setf (guix-command-argument-doc     copy) doc))
+    (and fun-bound?     (setf (guix-command-argument-fun     copy) fun))
+    (and switch?-bound? (setf (guix-command-argument-switch? copy) switch?))
+    (and option?-bound? (setf (guix-command-argument-option? copy) option?))
+    (and action?-bound? (setf (guix-command-argument-action? copy) action?))
+    copy))
+
+(defun guix-command-modify-argument-from-alist (argument alist)
+  "Return a modified version of ARGUMENT or nil if it wasn't modified.
+Each assoc from ALIST have a form (NAME . PLIST).  NAME is an
+argument name.  PLIST is a property list of argument parameters
+to be modified."
+  (let* ((name  (guix-command-argument-name argument))
+         (plist (guix-assoc-value alist name)))
+    (when plist
+      (apply #'guix-command-modify-argument
+             argument plist))))
+
+(defmacro guix-command-define-argument-improver (name alist)
+  "Define NAME variable and function to modify an argument from ALIST."
+  (declare (indent 1))
+  `(progn
+     (defvar ,name ,alist)
+     (defun ,name (argument)
+       (guix-command-modify-argument-from-alist argument ,name))))
+
+(guix-command-define-argument-improver
+    guix-command-improve-action-argument
+  '(("graph"       :char ?G)
+    ("environment" :char ?E)
+    ("publish"     :char ?u)
+    ("pull"        :char ?P)
+    ("size"        :char ?z)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-common-argument
+  '(("--help"    :switch? nil)
+    ("--version" :switch? nil)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-target-argument
+  '(("--target" :char ?T)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-system-type-argument
+  '(("--system" :fun guix-read-system-type)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-load-path-argument
+  '(("--load-path" :fun read-directory-name)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-search-paths-argument
+  '(("--search-paths" :char ?P)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-substitute-urls-argument
+  '(("--substitute-urls" :char ?U)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-hash-argument
+  '(("--format" :fun guix-read-hash-format)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-key-policy-argument
+  '(("--key-download" :fun guix-read-key-policy)))
+
+(defvar guix-command-improve-common-build-argument
+  '(("--no-substitutes"  :char ?s)
+    ("--no-build-hook"   :char ?h)
+    ("--max-silent-time" :char ?x)))
+
+(defun guix-command-improve-common-build-argument (argument)
+  (guix-command-modify-argument-from-alist
+   argument
+   (append guix-command-improve-load-path-argument
+           guix-command-improve-substitute-urls-argument
+           guix-command-improve-common-build-argument)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-archive-argument
+  '(("--generate-key" :char ?k)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-build-argument
+  '(("--no-grafts"   :char ?g)
+    ("--root"        :fun guix-read-file-name)
+    ("--sources"     :char ?S :fun guix-read-source-type :switch? nil)
+    ("--with-source" :fun guix-read-file-name)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-environment-argument
+  '(("--exec" :fun read-shell-command)
+    ("--load" :fun guix-read-file-name)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-gc-argument
+  '(("--list-dead" :char ?D)
+    ("--list-live" :char ?L)
+    ("--referrers" :char ?f)
+    ("--verify"    :fun guix-read-verify-options-string)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-graph-argument
+  '(("--type" :fun guix-read-graph-type)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-import-argument
+  '(("cran" :char ?r)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-import-elpa-argument
+  '(("--archive" :fun guix-read-elpa-archive)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-lint-argument
+  '(("--checkers" :fun guix-read-lint-checker-names-string)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-package-argument
+  ;; Unlike all other options, --install/--remove do not have a form
+  ;; '--install=foo,bar' but '--install foo bar' instead, so we need
+  ;; some tweaks.
+  '(("--install"
+     :name "--install " :fun guix-read-package-names-string
+     :switch? nil :option? t)
+    ("--remove"
+     :name "--remove "  :fun guix-read-package-names-string
+     :switch? nil :option? t)
+    ("--install-from-file" :fun guix-read-file-name)
+    ("--manifest"       :fun guix-read-file-name)
+    ("--do-not-upgrade" :char ?U)
+    ("--roll-back"      :char ?R)
+    ("--show"           :char ?w :fun guix-read-package-name)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-refresh-argument
+  '(("--select"     :fun guix-read-refresh-subset)
+    ("--key-server" :char ?S)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-size-argument
+  '(("--map-file" :fun guix-read-file-name)))
+
+(guix-command-define-argument-improver
+    guix-command-improve-system-argument
+  '(("vm-image"    :char ?V)
+    ("--on-error"  :char ?E)
+    ("--no-grub"   :char ?g)
+    ("--full-boot" :char ?b)))
+
+(defvar guix-command-argument-improvers
+  '((()
+     guix-command-improve-action-argument)
+    (("archive")
+     guix-command-improve-common-build-argument
+     guix-command-improve-target-argument
+     guix-command-improve-system-type-argument
+     guix-command-improve-archive-argument)
+    (("build")
+     guix-command-improve-common-build-argument
+     guix-command-improve-target-argument
+     guix-command-improve-system-type-argument
+     guix-command-improve-build-argument)
+    (("download")
+     guix-command-improve-hash-argument)
+    (("hash")
+     guix-command-improve-hash-argument)
+    (("environment")
+     guix-command-improve-common-build-argument
+     guix-command-improve-search-paths-argument
+     guix-command-improve-system-type-argument
+     guix-command-improve-environment-argument)
+    (("gc")
+     guix-command-improve-gc-argument)
+    (("graph")
+     guix-command-improve-graph-argument)
+    (("import")
+     guix-command-improve-import-argument)
+    (("import" "gnu")
+     guix-command-improve-key-policy-argument)
+    (("import" "elpa")
+     guix-command-improve-import-elpa-argument)
+    (("lint")
+     guix-command-improve-lint-argument)
+    (("package")
+     guix-command-improve-common-build-argument
+     guix-command-improve-search-paths-argument
+     guix-command-improve-package-argument)
+    (("refresh")
+     guix-command-improve-key-policy-argument
+     guix-command-improve-refresh-argument)
+    (("size")
+     guix-command-improve-system-type-argument
+     guix-command-improve-substitute-urls-argument
+     guix-command-improve-size-argument)
+    (("system")
+     guix-command-improve-common-build-argument
+     guix-command-improve-system-argument))
+  "Alist of guix commands and argument improvers for them.")
+
+(defun guix-command-improve-argument (argument improvers)
+  "Return ARGUMENT modified with IMPROVERS."
+  (or (guix-any (lambda (improver)
+                  (funcall improver argument))
+                improvers)
+      argument))
+
+(defun guix-command-improve-arguments (arguments commands)
+  "Return ARGUMENTS for 'guix COMMANDS ...' modified for popup interface."
+  (let ((improvers (cons 'guix-command-improve-common-argument
+                         (guix-assoc-value guix-command-argument-improvers
+                                           commands))))
+    (mapcar (lambda (argument)
+              (guix-command-improve-argument argument improvers))
+            arguments)))
+
+(defun guix-command-parse-arguments (&optional commands)
+  "Return a list of parsed 'guix COMMANDS ...' arguments."
+  (with-temp-buffer
+    (insert (guix-help-string commands))
+    (let (args)
+      (guix-while-search guix-help-parse-option-regexp
+        (let* ((short (match-string-no-properties 1))
+               (name  (match-string-no-properties 2))
+               (arg   (match-string-no-properties 3))
+               (doc   (match-string-no-properties 4))
+               (char  (if short
+                          (elt short 1) ; short option letter
+                        (elt name 2))) ; first letter of the long option
+               ;; If "--foo=bar" or "--foo[=bar]" then it is 'option'.
+               (option? (not (string= "" arg)))
+               ;; If "--foo" or "--foo[=bar]" then it is 'switch'.
+               (switch? (or (string= "" arg)
+                            (eq ?\[ (elt arg 0)))))
+          (push (guix-command-make-argument
+                 :name    name
+                 :char    char
+                 :doc     doc
+                 :switch? switch?
+                 :option? option?)
+                args)))
+      (guix-while-search guix-help-parse-command-regexp
+        (let* ((name (match-string-no-properties 1))
+               (char (elt name 0)))
+          (push (guix-command-make-argument
+                 :name    name
+                 :char    char
+                 :fun     (guix-command-action-name commands name)
+                 :action? t)
+                args)))
+      args)))
+
+(defun guix-command-rest-argument (&optional commands)
+  "Return '--' argument for COMMANDS."
+  (cl-flet ((argument (&rest args)
+              (apply #'guix-command-make-argument
+                     :name "-- " :char ?= :option? t args)))
+    (let ((command (car commands)))
+      (cond
+       ((member command '("archive" "build" "graph" "edit"
+                          "environment" "lint" "refresh"))
+        (argument :doc "Packages" :fun 'guix-read-package-names-string))
+       ((string= command "download")
+        (argument :doc "URL"))
+       ((string= command "gc")
+        (argument :doc "Paths" :fun 'guix-read-file-name))
+       ((member command '("hash" "system"))
+        (argument :doc "File" :fun 'guix-read-file-name))
+       ((string= command "size")
+        (argument :doc "Package" :fun 'guix-read-package-name))
+       ((equal commands '("import" "nix"))
+        (argument :doc "Nixpkgs Attribute"))
+       ;; Other 'guix import' subcommands, but not 'import' itself.
+       ((and (cdr commands)
+             (string= command "import"))
+        (argument :doc "Package name"))))))
+
+(defun guix-command-additional-arguments (&optional commands)
+  "Return additional arguments for COMMANDS."
+  (let ((rest-arg (guix-command-rest-argument commands)))
+    (and rest-arg (list rest-arg))))
+
+;; Ideally only `guix-command-arguments' function should exist with the
+;; contents of `guix-command-all-arguments', but we need to make a
+;; special case for `guix-command-complex-with-shared-arguments' commands.
+
+(defun guix-command-all-arguments (&optional commands)
+  "Return list of all arguments for 'guix COMMANDS ...'."
+  (let ((parsed (guix-command-parse-arguments commands)))
+    (append (guix-command-improve-arguments parsed commands)
+            (guix-command-additional-arguments commands))))
+
+(guix-memoized-defalias guix-command-all-arguments-memoize
+  guix-command-all-arguments)
+
+(defun guix-command-arguments (&optional commands)
+  "Return list of arguments for 'guix COMMANDS ...'."
+  (let ((command (car commands)))
+    (if (member command
+                guix-command-complex-with-shared-arguments)
+        ;; Take actions only for 'guix system', and switches+options for
+        ;; 'guix system foo'.
+        (funcall (if (null (cdr commands))
+                     #'cl-remove-if-not
+                   #'cl-remove-if)
+                 #'guix-command-argument-action?
+                 (guix-command-all-arguments-memoize (list command)))
+      (guix-command-all-arguments commands))))
+
+(defun guix-command-switch->popup-switch (switch)
+  "Return popup switch from command SWITCH argument."
+  (list (guix-command-argument-char switch)
+        (or (guix-command-argument-doc switch)
+            "Unknown")
+        (guix-command-argument-name switch)))
+
+(defun guix-command-option->popup-option (option)
+  "Return popup option from command OPTION argument."
+  (list (guix-command-argument-char option)
+        (or (guix-command-argument-doc option)
+            "Unknown")
+        (let ((name (guix-command-argument-name option)))
+          (if (string-match-p " \\'" name) ; ends with space
+              name
+            (concat name "=")))
+        (or (guix-command-argument-fun option)
+            'read-from-minibuffer)))
+
+(defun guix-command-action->popup-action (action)
+  "Return popup action from command ACTION argument."
+  (list (guix-command-argument-char action)
+        (or (guix-command-argument-doc action)
+            (guix-command-argument-name action)
+            "Unknown")
+        (guix-command-argument-fun action)))
+
+(defun guix-command-sort-arguments (arguments)
+  "Sort ARGUMENTS by name in alphabetical order."
+  (sort arguments
+        (lambda (a1 a2)
+          (let ((name1 (guix-command-argument-name a1))
+                (name2 (guix-command-argument-name a2)))
+            (cond ((null name1) nil)
+                  ((null name2) t)
+                  (t (string< name1 name2)))))))
+
+(defun guix-command-switches (arguments)
+  "Return switches from ARGUMENTS."
+  (cl-remove-if-not #'guix-command-argument-switch? arguments))
+
+(defun guix-command-options (arguments)
+  "Return options from ARGUMENTS."
+  (cl-remove-if-not #'guix-command-argument-option? arguments))
+
+(defun guix-command-actions (arguments)
+  "Return actions from ARGUMENTS."
+  (cl-remove-if-not #'guix-command-argument-action? arguments))
+
+(defun guix-command-post-process-args (args)
+  "Adjust appropriately command line ARGS returned from popup command."
+  ;; XXX We need to split "--install foo bar" and similar strings into
+  ;; lists of strings.  But some commands (e.g., 'guix hash') accept a
+  ;; file name as the 'rest' argument, and as file names may contain
+  ;; spaces, splitting by spaces will break such names.  For example, the
+  ;; following argument: "-- /tmp/file with spaces" will be transformed
+  ;; into the following list: ("--" "/tmp/file" "with" "spaces") instead
+  ;; of the wished ("--" "/tmp/file with spaces").
+  (let* (rest
+         (rx (rx string-start
+                 (or "-- " "--install " "--remove ")))
+         (args (mapcar (lambda (arg)
+                         (if (string-match-p rx arg)
+                             (progn (push (split-string arg) rest)
+                                    nil)
+                           arg))
+                       args)))
+    (if rest
+        (apply #'append (delq nil args) rest)
+      args)))
+
+
+;;; 'Execute' actions
+
+(defvar guix-command-default-execute-arguments
+  (list
+   (guix-command-make-argument
+    :name "repl"  :char ?r :doc "Run in Guix REPL")
+   (guix-command-make-argument
+    :name "shell" :char ?s :doc "Run in shell")
+   (guix-command-make-argument
+    :name "copy"  :char ?c :doc "Copy command line"))
+  "List of default 'execute' action arguments.")
+
+(defvar guix-command-additional-execute-arguments
+  `((("graph")
+     ,(guix-command-make-argument
+       :name "view" :char ?v :doc "View graph")))
+  "Alist of guix commands and additional 'execute' action arguments.")
+
+(defun guix-command-execute-arguments (commands)
+  "Return a list of 'execute' action arguments for COMMANDS."
+  (mapcar (lambda (arg)
+            (guix-command-modify-argument arg
+              :action? t
+              :fun (guix-command-action-name
+                    commands (guix-command-argument-name arg))))
+          (append guix-command-default-execute-arguments
+                  (guix-assoc-value
+                   guix-command-additional-execute-arguments commands))))
+
+(defvar guix-command-special-executors
+  '((("environment")
+     ("repl" . guix-run-environment-command-in-repl))
+    (("pull")
+     ("repl" . guix-run-pull-command-in-repl))
+    (("graph")
+     ("view" . guix-run-view-graph)))
+  "Alist of guix commands and alists of special executers for them.
+See also `guix-command-default-executors'.")
+
+(defvar guix-command-default-executors
+  '(("repl"  . guix-run-command-in-repl)
+    ("shell" . guix-run-command-in-shell)
+    ("copy"  . guix-copy-command-as-kill))
+  "Alist of default executers for action names.")
+
+(defun guix-command-executor (commands name)
+  "Return function to run command line arguments for guix COMMANDS."
+  (or (guix-assoc-value guix-command-special-executors commands name)
+      (guix-assoc-value guix-command-default-executors name)))
+
+(defun guix-run-environment-command-in-repl (args)
+  "Run 'guix ARGS ...' environment command in Guix REPL."
+  ;; As 'guix environment' usually tries to run another process, it may
+  ;; be fun but not wise to run this command in Geiser REPL.
+  (when (or (member "--dry-run" args)
+            (member "--search-paths" args)
+            (when (y-or-n-p
+                   (format "'%s' command will spawn an external process.
+Do you really want to execute this command in Geiser REPL? "
+                           (guix-command-string args)))
+              (message "May \"M-x shell-mode\" be with you!")
+              t))
+    (guix-run-command-in-repl args)))
+
+(defun guix-run-pull-command-in-repl (args)
+  "Run 'guix ARGS ...' pull command in Guix REPL.
+Perform pull-specific actions after operation, see
+`guix-after-pull-hook' and `guix-update-after-pull'."
+  (guix-eval-in-repl
+   (apply #'guix-make-guile-expression 'guix-command args)
+   nil 'pull))
+
+(defun guix-run-view-graph (args)
+  "Run 'guix ARGS ...' graph command, make the image and open it."
+  (let* ((graph-file (guix-dot-file-name))
+         (dot-args   (guix-dot-arguments graph-file)))
+    (if (guix-eval-read (guix-make-guile-expression
+                         'pipe-guix-output args dot-args))
+        (guix-find-file graph-file)
+      (error "Couldn't create a graph"))))
+
+
+;;; Generating popups, actions, etc.
+
+(defmacro guix-command-define-popup-action (name &optional commands)
+  "Define NAME function to generate (if needed) and run popup for COMMANDS."
+  (declare (indent 1) (debug t))
+  (let* ((popup-fun (guix-command-symbol `(,@commands "popup")))
+         (doc (format "Call `%s' (generate it if needed)."
+                      popup-fun)))
+    `(defun ,name (&optional arg)
+       ,doc
+       (interactive "P")
+       (unless (fboundp ',popup-fun)
+         (guix-command-generate-popup ',popup-fun ',commands))
+       (,popup-fun arg))))
+
+(defmacro guix-command-define-execute-action (name executor
+                                                   &optional commands)
+  "Define NAME function to execute the current action for guix COMMANDS.
+EXECUTOR function is called with the current command line arguments."
+  (declare (indent 1) (debug t))
+  (let* ((arguments-fun (guix-command-symbol `(,@commands "arguments")))
+         (doc (format "Call `%s' with the current popup arguments."
+                      executor)))
+    `(defun ,name (&rest args)
+       ,doc
+       (interactive (,arguments-fun))
+       (,executor (append ',commands
+                          (guix-command-post-process-args args))))))
+
+(defun guix-command-generate-popup-actions (actions &optional commands)
+  "Generate 'popup' commands from ACTIONS arguments for guix COMMANDS."
+  (dolist (action actions)
+    (let ((fun (guix-command-argument-fun action)))
+      (unless (fboundp fun)
+        (eval `(guix-command-define-popup-action ,fun
+                 ,(append commands
+                          (list (guix-command-argument-name action)))))))))
+
+(defun guix-command-generate-execute-actions (actions &optional commands)
+  "Generate 'execute' commands from ACTIONS arguments for guix COMMANDS."
+  (dolist (action actions)
+    (let ((fun (guix-command-argument-fun action)))
+      (unless (fboundp fun)
+        (eval `(guix-command-define-execute-action ,fun
+                 ,(guix-command-executor
+                   commands (guix-command-argument-name action))
+                 ,commands))))))
+
+(defun guix-command-generate-popup (name &optional commands)
+  "Define NAME popup with 'guix COMMANDS ...' interface."
+  (let* ((command  (car commands))
+         (man-page (concat "guix" (and command (concat "-" command))))
+         (doc      (format "Popup window for '%s' command."
+                           (guix-concat-strings (cons "guix" commands)
+                                                " ")))
+         (args     (guix-command-arguments commands))
+         (switches (guix-command-sort-arguments
+                    (guix-command-switches args)))
+         (options  (guix-command-sort-arguments
+                    (guix-command-options args)))
+         (popup-actions (guix-command-sort-arguments
+                         (guix-command-actions args)))
+         (execute-actions (unless popup-actions
+                            (guix-command-execute-arguments commands)))
+         (actions (or popup-actions execute-actions)))
+    (if popup-actions
+        (guix-command-generate-popup-actions popup-actions commands)
+      (guix-command-generate-execute-actions execute-actions commands))
+    (eval
+     `(guix-define-popup ,name
+        ,doc
+        'guix-commands
+        :man-page ,man-page
+        :switches ',(mapcar #'guix-command-switch->popup-switch switches)
+        :options  ',(mapcar #'guix-command-option->popup-option options)
+        :actions  ',(mapcar #'guix-command-action->popup-action actions)
+        :max-action-columns 4))))
+
+;;;###autoload (autoload 'guix "guix-command" "Popup window for 'guix'." t)
+(guix-command-define-popup-action guix)
+
+(defalias 'guix-edit-action #'guix-edit)
+
+
+(defvar guix-command-font-lock-keywords
+  (eval-when-compile
+    `((,(rx "("
+            (group "guix-command-define-"
+                   (or "popup-action"
+                       "execute-action"
+                       "argument-improver"))
+            symbol-end
+            (zero-or-more blank)
+            (zero-or-one
+             (group (one-or-more (or (syntax word) (syntax symbol))))))
+       (1 font-lock-keyword-face)
+       (2 font-lock-function-name-face nil t)))))
+
+(font-lock-add-keywords 'emacs-lisp-mode guix-command-font-lock-keywords)
+
+(provide 'guix-command)
+
+;;; guix-command.el ends here
diff --git a/emacs/guix-config.el.in b/emacs/guix-config.el.in
new file mode 100644
index 0000000000..16434cecea
--- /dev/null
+++ b/emacs/guix-config.el.in
@@ -0,0 +1,40 @@
+;;; guix-config.el --- Compile-time configuration of Guix.
+
+;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
+
+;; This file is part of GNU Guix.
+
+;; GNU Guix is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Guix is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(defconst guix-emacs-interface-directory
+  (replace-regexp-in-string "${prefix}" "@prefix@" "@emacsuidir@"))
+
+(defconst guix-state-directory
+  ;; This must match `NIX_STATE_DIR' as defined in `daemon.am'.
+  (or (getenv "NIX_STATE_DIR") "@guix_localstatedir@/guix"))
+
+(defvar guix-guile-program "@GUILE@"
+  "Name of the guile executable used for Guix REPL.
+May be either a string (the name of the executable) or a list of
+strings of the form:
+
+  (NAME . ARGS)
+
+Where ARGS is a list of arguments to the guile program.")
+
+(provide 'guix-config)
+
+;;; guix-config.el ends here
diff --git a/emacs/guix-external.el b/emacs/guix-external.el
new file mode 100644
index 0000000000..d233473abe
--- /dev/null
+++ b/emacs/guix-external.el
@@ -0,0 +1,72 @@
+;;; guix-external.el --- External programs  -*- lexical-binding: t -*-
+
+;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+
+;; This file is part of GNU Guix.
+
+;; GNU Guix is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Guix is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides auxiliary code for running external programs.
+
+;;; Code:
+
+(defgroup guix-external nil
+  "Settings for external programs."
+  :group 'guix)
+
+(defcustom guix-dot-program (executable-find "dot")
+  "Name of the 'dot' executable."
+  :type 'string
+  :group 'guix-external)
+
+(defcustom guix-dot-default-arguments
+  '("-Tpng")
+  "Default arguments for 'dot' program."
+  :type '(repeat string)
+  :group 'guix-external)
+
+(defcustom guix-dot-file-name-function #'guix-png-file-name
+  "Function used to define a file name of a temporary 'dot' file.
+The function is called without arguments."
+  :type '(choice (function-item guix-png-file-name)
+                 (function :tag "Other function"))
+  :group 'guix-external)
+
+(defun guix-dot-arguments (output-file &rest args)
+  "Return a list of dot arguments for writing a graph into OUTPUT-FILE.
+If ARGS is nil, use `guix-dot-default-arguments'."
+  (or guix-dot-program
+      (error (concat "Couldn't find 'dot'.\n"
+                     "Set guix-dot-program to a proper value")))
+  (apply #'list
+         guix-dot-program
+         (concat "-o" output-file)
+         (or args guix-dot-default-arguments)))
+
+(defun guix-dot-file-name ()
+  "Call `guix-dot-file-name-function'."
+  (funcall guix-dot-file-name-function))
+
+(defun guix-png-file-name ()
+  "Return '.png' file name in the `temporary-file-directory'."
+  (concat (make-temp-name
+           (concat (file-name-as-directory temporary-file-directory)
+                   "graph-"))
+          ".png"))
+
+(provide 'guix-external)
+
+;;; guix-external.el ends here
diff --git a/emacs/guix-help-vars.el b/emacs/guix-help-vars.el
new file mode 100644
index 0000000000..8117d28f3e
--- /dev/null
+++ b/emacs/guix-help-vars.el
@@ -0,0 +1,108 @@
+;;; guix-help-vars.el --- Variables related to --help output
+
+;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+
+;; This file is part of GNU Guix.
+
+;; GNU Guix is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Guix is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides regular expressions to parse various "guix
+;; ... --help" outputs and lists of non-receivable items (system types,
+;; hash formats, etc.).
+
+;;; Code:
+
+
+;;; Regexps for parsing "guix ..." outputs
+
+(defvar guix-help-parse-option-regexp
+  (rx bol "  "
+      (zero-or-one (group "-" (not (any "- ")))
+                   ",")
+      (one-or-more " ")
+      (group "--" (one-or-more (or wordchar "-")))
+      (group (zero-or-one "[")
+             (zero-or-one "="))
+      (zero-or-more (not space))
+      (one-or-more space)
+      (group (one-or-more any)))
+  "Common regexp used to find command options.")
+
+(defvar guix-help-parse-command-regexp
+  (rx bol "   "
+      (group wordchar (one-or-more (or wordchar "-"))))
+  "Regexp used to find guix commands.
+'Command' means any option not prefixed with '-'.  For example,
+guix subcommand, system action, importer, etc.")
+
+(defvar guix-help-parse-long-option-regexp
+  (rx (or "  " ", ")
+      (group "--" (one-or-more (or wordchar "-"))
+             (zero-or-one "=")))
+  "Regexp used to find long options.")
+
+(defvar guix-help-parse-short-option-regexp
+  (rx bol (one-or-more blank)
+      "-" (group (not (any "- "))))
+  "Regexp used to find short options.")
+
+(defvar guix-help-parse-package-regexp
+  (rx bol (group (one-or-more (not blank))))
+  "Regexp used to find names of the packages.")
+
+(defvar guix-help-parse-list-regexp
+  (rx bol (zero-or-more blank) "- "
+      (group (one-or-more (or wordchar "-"))))
+  "Regexp used to find various lists (lint checkers, graph types).")
+
+(defvar guix-help-parse-regexp-group 1
+  "Parenthesized expression of regexps used to find commands and
+options.")
+
+
+;;; Non-receivable lists of system types, hash formats, etc.
+
+(defvar guix-help-system-types
+  '("x86_64-linux" "i686-linux" "armhf-linux" "mips64el-linux")
+  "List of supported systems.")
+
+(defvar guix-help-source-types
+  '("package" "all" "transitive")
+  "List of supported sources types.")
+
+(defvar guix-help-hash-formats
+  '("nix-base32" "base32" "base16" "hex" "hexadecimal")
+  "List of supported hash formats.")
+
+(defvar guix-help-refresh-subsets
+  '("core" "non-core")
+  "List of supported 'refresh' subsets.")
+
+(defvar guix-help-key-policies
+  '("interactive" "always" "never")
+  "List of supported key download policies.")
+
+(defvar guix-help-verify-options
+  '("repair" "contents")
+  "List of supported 'verify' options")
+
+(defvar guix-help-elpa-archives
+  '("gnu" "melpa" "melpa-stable")
+  "List of supported ELPA archives.")
+
+(provide 'guix-help-vars)
+
+;;; guix-help-vars.el ends here
diff --git a/emacs/guix-info.el b/emacs/guix-info.el
index f17ce01ab6..4bdd62a6a5 100644
--- a/emacs/guix-info.el
+++ b/emacs/guix-info.el
@@ -178,13 +178,13 @@ The order of displayed parameters is the same as in this list.")
 (defun guix-info-get-insert-methods (entry-type param)
   "Return list of insert methods for parameter PARAM of ENTRY-TYPE.
 See `guix-info-insert-methods' for details."
-  (guix-get-key-val guix-info-insert-methods
-                    entry-type param))
+  (guix-assq-value guix-info-insert-methods
+                   entry-type param))
 
 (defun guix-info-get-displayed-params (entry-type)
   "Return parameters of ENTRY-TYPE that should be displayed."
-  (guix-get-key-val guix-info-displayed-params
-                    entry-type))
+  (guix-assq-value guix-info-displayed-params
+                   entry-type))
 
 (defun guix-info-get-indent (&optional level)
   "Return `guix-info-indent' \"multiplied\" by LEVEL spaces.
@@ -232,7 +232,7 @@ Use `guix-info-insert-ENTRY-TYPE-function' or
   "Insert title and value of a PARAM at point.
 ENTRY is alist with parameters and their values.
 ENTRY-TYPE is a type of ENTRY."
-  (let ((val (guix-get-key-val entry param)))
+  (let ((val (guix-assq-value entry param)))
     (unless (and guix-info-ignore-empty-vals (null val))
       (let* ((title          (guix-get-param-title entry-type param))
              (insert-methods (guix-info-get-insert-methods entry-type param))
@@ -492,12 +492,12 @@ filling them to fit the window."
 (defun guix-package-info-insert-heading (entry)
   "Insert the heading for package ENTRY.
 Show package name, version, and `guix-package-info-heading-params'."
-  (guix-format-insert (concat (guix-get-key-val entry 'name) " "
-                              (guix-get-key-val entry 'version))
+  (guix-format-insert (concat (guix-assq-value entry 'name) " "
+                              (guix-assq-value entry 'version))
                       'guix-package-info-heading)
   (insert "\n\n")
   (mapc (lambda (param)
-          (let ((val  (guix-get-key-val entry param))
+          (let ((val  (guix-assq-value entry param))
                 (face (guix-get-symbol (symbol-name param)
                                        'info 'package)))
             (when val
@@ -587,10 +587,10 @@ If nil, insert installed info in a default way.")
 
 (defun guix-package-info-insert-outputs (outputs entry)
   "Insert OUTPUTS from package ENTRY at point."
-  (and (guix-get-key-val entry 'obsolete)
+  (and (guix-assq-value entry 'obsolete)
        (guix-package-info-insert-obsolete-text))
-  (and (guix-get-key-val entry 'non-unique)
-       (guix-get-key-val entry 'installed)
+  (and (guix-assq-value entry 'non-unique)
+       (guix-assq-value entry 'installed)
        (guix-package-info-insert-non-unique-text
         (guix-get-full-name entry)))
   (insert "\n")
@@ -617,11 +617,11 @@ If nil, insert installed info in a default way.")
 Make some fancy text with buttons and additional stuff if the
 current OUTPUT is installed (if there is such output in
 `installed' parameter of a package ENTRY)."
-  (let* ((installed (guix-get-key-val entry 'installed))
-         (obsolete  (guix-get-key-val entry 'obsolete))
+  (let* ((installed (guix-assq-value entry 'installed))
+         (obsolete  (guix-assq-value entry 'obsolete))
          (installed-entry (cl-find-if
                            (lambda (entry)
-                             (string= (guix-get-key-val entry 'output)
+                             (string= (guix-assq-value entry 'output)
                                       output))
                            installed))
          (action-type (if installed-entry 'delete 'install)))
@@ -655,8 +655,8 @@ ENTRY is an alist with package info."
         (current-buffer)))
      (concat type-str " '" full-name "'")
      'action-type type
-     'id (or (guix-get-key-val entry 'package-id)
-             (guix-get-key-val entry 'id))
+     'id (or (guix-assq-value entry 'package-id)
+             (guix-assq-value entry 'id))
      'output output)))
 
 (defun guix-package-info-insert-output-path (path &optional _)
@@ -720,7 +720,7 @@ PACKAGE-ID is an ID of the package which source to show."
            (entries (cl-substitute-if
                      new-entry
                      (lambda (entry)
-                       (equal (guix-get-key-val entry 'id)
+                       (equal (guix-assq-value entry 'id)
                               entry-id))
                      guix-entries
                      :count 1)))
@@ -746,9 +746,9 @@ SOURCE is a list of URLs."
   (guix-info-insert-indent)
   (if (null source)
       (guix-format-insert nil)
-    (let* ((source-file (guix-get-key-val entry 'source-file))
-           (entry-id    (guix-get-key-val entry 'id))
-           (package-id  (or (guix-get-key-val entry 'package-id)
+    (let* ((source-file (guix-assq-value entry 'source-file))
+           (entry-id    (guix-assq-value entry 'id))
+           (package-id  (or (guix-assq-value entry 'package-id)
                             entry-id)))
       (if (null source-file)
           (guix-info-insert-action-button
@@ -798,13 +798,13 @@ If nil, insert output in a default way.")
   "Insert output VERSION and obsolete text if needed at point."
   (guix-info-insert-val-default version
                                 'guix-package-info-version)
-  (and (guix-get-key-val entry 'obsolete)
+  (and (guix-assq-value entry 'obsolete)
        (guix-package-info-insert-obsolete-text)))
 
 (defun guix-output-info-insert-output (output entry)
   "Insert OUTPUT and action buttons at point."
-  (let* ((installed (guix-get-key-val entry 'installed))
-         (obsolete  (guix-get-key-val entry 'obsolete))
+  (let* ((installed (guix-assq-value entry 'installed))
+         (obsolete  (guix-assq-value entry 'obsolete))
          (action-type (if installed 'delete 'install)))
     (guix-info-insert-val-default
      output
@@ -874,7 +874,7 @@ If nil, insert generation in a default way.")
        (guix-switch-to-generation guix-profile (button-get btn 'number)
                                   (current-buffer)))
      "Switch to this generation (make it the current one)"
-     'number (guix-get-key-val entry 'number))))
+     'number (guix-assq-value entry 'number))))
 
 (provide 'guix-info)
 
diff --git a/emacs/guix-init.el.in b/emacs/guix-init.el
index 728bc375c2..3a727c7eb6 100644
--- a/emacs/guix-init.el.in
+++ b/emacs/guix-init.el
@@ -1,9 +1,5 @@
 (require 'guix-autoloads)
 
-(defvar guix-load-path
-  (replace-regexp-in-string "${prefix}" "@prefix@" "@emacsuidir@")
-  "Directory with scheme files for \"guix.el\" package.")
-
 (defcustom guix-package-enable-at-startup t
   "If non-nil, activate Emacs packages installed in a user profile.
 Set this variable to nil before requiring `guix-init' file to
diff --git a/emacs/guix-list.el b/emacs/guix-list.el
index e84d60a0aa..9796464dbf 100644
--- a/emacs/guix-list.el
+++ b/emacs/guix-list.el
@@ -1,6 +1,6 @@
 ;;; guix-list.el --- List buffers for displaying entries   -*- lexical-binding: t -*-
 
-;; Copyright © 2014 Alex Kost <alezost@gmail.com>
+;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
 
 ;; This file is part of GNU Guix.
 
@@ -110,13 +110,13 @@ parameters and their values).")
 
 (defun guix-list-get-param-title (entry-type param)
   "Return title of an ENTRY-TYPE entry parameter PARAM."
-  (or (guix-get-key-val guix-list-column-titles
-                        entry-type param)
+  (or (guix-assq-value guix-list-column-titles
+                       entry-type param)
       (guix-get-param-title entry-type param)))
 
 (defun guix-list-get-column-format (entry-type)
   "Return column format for ENTRY-TYPE."
-  (guix-get-key-val guix-list-column-format entry-type))
+  (guix-assq-value guix-list-column-format entry-type))
 
 (defun guix-list-get-displayed-params (entry-type)
   "Return list of parameters of ENTRY-TYPE that should be displayed."
@@ -170,7 +170,7 @@ ENTRIES should have a form of `guix-entries'."
 Values are taken from ENTRIES which should have the form of
 `guix-entries'."
   (mapcar (lambda (entry)
-            (list (guix-get-key-val entry 'id)
+            (list (guix-assq-value entry 'id)
                   (guix-list-get-tabulated-entry entry entry-type)))
           entries))
 
@@ -180,9 +180,9 @@ Parameters are taken from ENTRY of ENTRY-TYPE."
   (guix-list-make-tabulated-vector
    entry-type
    (lambda (param _)
-     (let ((val (guix-get-key-val entry param))
-           (fun (guix-get-key-val guix-list-column-value-methods
-                                  entry-type param)))
+     (let ((val (guix-assq-value entry param))
+           (fun (guix-assq-value guix-list-column-value-methods
+                                 entry-type param)))
        (if fun
            (funcall fun val entry)
          (guix-get-string val))))))
@@ -221,7 +221,7 @@ VAL may be nil."
     (guix-package-list-mode
      (guix-list-current-id))
     (guix-output-list-mode
-     (guix-get-key-val (guix-list-current-entry) 'package-id))))
+     (guix-assq-value (guix-list-current-entry) 'package-id))))
 
 (defun guix-list-for-each-line (fun &rest args)
   "Call FUN with ARGS for each entry line."
@@ -262,7 +262,7 @@ ARGS is a list of additional values.")
 
 (defsubst guix-list-get-mark (name)
   "Return mark character by its NAME."
-  (or (guix-get-key-val guix-list-mark-alist name)
+  (or (guix-assq-value guix-list-mark-alist name)
       (error "Mark '%S' not found" name)))
 
 (defsubst guix-list-get-mark-string (name)
@@ -355,8 +355,8 @@ With ARG, unmark all lines."
   "Put marks according to `guix-list-mark-alist'."
   (guix-list-for-each-line
    (lambda ()
-     (let ((mark-name (car (guix-get-key-val guix-list-marked
-                                             (guix-list-current-id)))))
+     (let ((mark-name (car (guix-assq-value guix-list-marked
+                                            (guix-list-current-id)))))
        (tabulated-list-put-tag
         (guix-list-get-mark-string (or mark-name 'empty)))))))
 
@@ -472,7 +472,7 @@ With prefix (if ARG is non-nil), describe entries marked with any mark."
 (defun guix-list-edit-package ()
   "Go to the location of the current package."
   (interactive)
-  (guix-edit-package (guix-list-current-package-id)))
+  (guix-edit (guix-list-current-package-id)))
 
 
 ;;; Displaying packages
@@ -524,16 +524,16 @@ likely)."
 Colorize it with `guix-package-list-installed' or
 `guix-package-list-obsolete' if needed."
   (guix-get-string name
-                   (cond ((guix-get-key-val entry 'obsolete)
+                   (cond ((guix-assq-value entry 'obsolete)
                           'guix-package-list-obsolete)
-                         ((guix-get-key-val entry 'installed)
+                         ((guix-assq-value entry 'installed)
                           'guix-package-list-installed))))
 
 (defun guix-package-list-get-installed-outputs (installed &optional _)
   "Return string with outputs from INSTALLED entries."
   (guix-get-string
    (mapcar (lambda (entry)
-             (guix-get-key-val entry 'output))
+             (guix-assq-value entry 'output))
            installed)))
 
 (defun guix-package-list-marking-check ()
@@ -562,7 +562,7 @@ be separated with \",\")."
   (interactive "P")
   (guix-package-list-marking-check)
   (let* ((entry     (guix-list-current-entry))
-         (all       (guix-get-key-val entry 'outputs))
+         (all       (guix-assq-value entry 'outputs))
          (installed (guix-get-installed-outputs entry))
          (available (cl-set-difference all installed :test #'string=)))
     (or available
@@ -597,7 +597,7 @@ be separated with \",\")."
          (installed (guix-get-installed-outputs entry)))
     (or installed
         (user-error "This package is not installed"))
-    (when (or (guix-get-key-val entry 'obsolete)
+    (when (or (guix-assq-value entry 'obsolete)
               (y-or-n-p "This package is not obsolete.  Try to upgrade it anyway? "))
       (guix-package-list-mark-outputs
        'upgrade installed
@@ -611,14 +611,14 @@ accept an entry as argument."
   (guix-package-list-marking-check)
   (let ((obsolete (cl-remove-if-not
                    (lambda (entry)
-                     (guix-get-key-val entry 'obsolete))
+                     (guix-assq-value entry 'obsolete))
                    guix-entries)))
     (guix-list-for-each-line
      (lambda ()
        (let* ((id (guix-list-current-id))
               (entry (cl-find-if
                       (lambda (entry)
-                        (equal id (guix-get-key-val entry 'id)))
+                        (equal id (guix-assq-value entry 'id)))
                       obsolete)))
          (when entry
            (funcall fun entry)))))))
@@ -682,7 +682,7 @@ The specification is suitable for `guix-process-package-actions'."
   (interactive)
   (guix-package-list-marking-check)
   (let* ((entry     (guix-list-current-entry))
-         (installed (guix-get-key-val entry 'installed)))
+         (installed (guix-assq-value entry 'installed)))
     (if installed
         (user-error "This output is already installed")
       (guix-list--mark 'install t))))
@@ -692,7 +692,7 @@ The specification is suitable for `guix-process-package-actions'."
   (interactive)
   (guix-package-list-marking-check)
   (let* ((entry     (guix-list-current-entry))
-         (installed (guix-get-key-val entry 'installed)))
+         (installed (guix-assq-value entry 'installed)))
     (if installed
         (guix-list--mark 'delete t)
       (user-error "This output is not installed"))))
@@ -702,10 +702,10 @@ The specification is suitable for `guix-process-package-actions'."
   (interactive)
   (guix-package-list-marking-check)
   (let* ((entry     (guix-list-current-entry))
-         (installed (guix-get-key-val entry 'installed)))
+         (installed (guix-assq-value entry 'installed)))
     (or installed
         (user-error "This output is not installed"))
-    (when (or (guix-get-key-val entry 'obsolete)
+    (when (or (guix-assq-value entry 'obsolete)
               (y-or-n-p "This output is not obsolete.  Try to upgrade it anyway? "))
       (guix-list--mark 'upgrade t))))
 
@@ -777,8 +777,8 @@ VAL is a boolean value."
   "Switch current profile to the generation at point."
   (interactive)
   (let* ((entry   (guix-list-current-entry))
-         (current (guix-get-key-val entry 'current))
-         (number  (guix-get-key-val entry 'number)))
+         (current (guix-assq-value entry 'current))
+         (number  (guix-assq-value entry 'number)))
     (if current
         (user-error "This generation is already the current one")
       (guix-switch-to-generation guix-profile number (current-buffer)))))
diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index e0dc683d88..c9b84d36d9 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,6 +45,7 @@
 (use-modules
  (ice-9 vlist)
  (ice-9 match)
+ (ice-9 popen)
  (srfi srfi-1)
  (srfi srfi-2)
  (srfi srfi-11)
@@ -57,6 +58,8 @@
  (guix licenses)
  (guix utils)
  (guix ui)
+ (guix scripts graph)
+ (guix scripts lint)
  (guix scripts package)
  (guix scripts pull)
  (gnu packages))
@@ -68,7 +71,14 @@
 (define (list-maybe obj)
   (if (list? obj) obj (list obj)))
 
-(define full-name->name+version package-name->name+version)
+(define (full-name->name+version spec)
+  "Given package specification SPEC with or without output,
+return two values: name and version.  For example, for SPEC
+\"foo-0.9.1b:lib\", return \"foo\" and \"0.9.1b\"."
+  (let-values (((name version output)
+                (package-specification->name+version+output spec)))
+    (values name version)))
+
 (define (name+version->full-name name version)
   (string-append name "-" version))
 
@@ -244,6 +254,10 @@ Example:
   (filter-map (match-lambda
                ((_ (? package? package))
                 (package-full-name package))
+               ((_ (? package? package) output)
+                (make-package-specification (package-name package)
+                                            (package-version package)
+                                            output))
                (_ #f))
               inputs))
 
@@ -279,7 +293,7 @@ Example:
     (license           . ,package-license-names)
     (source            . ,package-source-names)
     (synopsis          . ,package-synopsis)
-    (description       . ,package-description)
+    (description       . ,package-description-string)
     (home-url          . ,package-home-page)
     (outputs           . ,package-outputs)
     (non-unique        . ,(negate package-unique?))
@@ -887,9 +901,10 @@ GENERATIONS is a list of generation numbers."
   (with-store store
     (delete-generations store profile generations)))
 
-(define (package-location-string package-id)
-  "Return a location string of a package PACKAGE-ID."
-  (and-let* ((package  (package-by-id package-id))
+(define (package-location-string id-or-name)
+  "Return a location string of a package with ID-OR-NAME."
+  (and-let* ((package  (or (package-by-id id-or-name)
+                           (first (packages-by-name id-or-name))))
              (location (package-location package)))
     (location->string location)))
 
@@ -927,3 +942,54 @@ GENERATIONS is a list of generation numbers."
           (build-derivations store derivations))
         (format #t "The source store path: ~a~%"
                 (package-source-derivation->store-path derivation))))))
+
+
+;;; Executing guix commands
+
+(define (guix-command . args)
+  "Run 'guix ARGS ...' command."
+  (catch 'quit
+    (lambda () (apply run-guix args))
+    (const #t)))
+
+(define (guix-command-output . args)
+  "Return string with 'guix ARGS ...' output."
+  (with-output-to-string
+    (lambda () (apply guix-command args))))
+
+(define (help-string . commands)
+  "Return string with 'guix COMMANDS ... --help' output."
+  (apply guix-command-output `(,@commands "--help")))
+
+(define (pipe-guix-output guix-args command-args)
+  "Run 'guix GUIX-ARGS ...' command and pipe its output to a shell command
+defined by COMMAND-ARGS.
+Return #t if the shell command was executed successfully."
+  (let ((pipe (apply open-pipe* OPEN_WRITE command-args)))
+    (with-output-to-port pipe
+      (lambda () (apply guix-command guix-args)))
+    (zero? (status:exit-val (close-pipe pipe)))))
+
+
+;;; Lists of packages, lint checkers, etc.
+
+(define (graph-type-names)
+  "Return a list of names of available graph node types."
+  (map node-type-name %node-types))
+
+(define (lint-checker-names)
+  "Return a list of names of available lint checkers."
+  (map (lambda (checker)
+         (symbol->string (lint-checker-name checker)))
+       %checkers))
+
+(define (package-names)
+  "Return a list of names of available packages."
+  (delete-duplicates
+   (fold-packages (lambda (pkg res)
+                    (cons (package-name pkg) res))
+                  '())))
+
+;; See the comment to 'guix-package-names' function in "guix-popup.el".
+(define (package-names-lists)
+  (map list (package-names)))
diff --git a/emacs/guix-messages.el b/emacs/guix-messages.el
index bd985a0670..2bf99de6fa 100644
--- a/emacs/guix-messages.el
+++ b/emacs/guix-messages.el
@@ -1,6 +1,6 @@
 ;;; guix-messages.el --- Minibuffer messages
 
-;; Copyright © 2014 Alex Kost <alezost@gmail.com>
+;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
 
 ;; This file is part of GNU Guix.
 
@@ -186,14 +186,14 @@
 (defun guix-result-message (profile entries entry-type
                             search-type search-vals)
   "Display an appropriate message after displaying ENTRIES."
-  (let* ((type-spec (guix-get-key-val guix-messages
-                                      entry-type search-type))
+  (let* ((type-spec (guix-assq-value guix-messages
+                                     entry-type search-type))
          (fun-or-count-spec (car type-spec)))
     (if (functionp fun-or-count-spec)
         (funcall fun-or-count-spec profile entries search-vals)
       (let* ((count     (length entries))
              (count-key (if (> count 1) 'many count))
-             (msg-spec  (guix-get-key-val type-spec count-key))
+             (msg-spec  (guix-assq-value type-spec count-key))
              (msg       (car msg-spec))
              (args      (cdr msg-spec)))
         (mapc (lambda (subst)
diff --git a/emacs/guix-pcomplete.el b/emacs/guix-pcomplete.el
index 9ec563cf52..4743be59bd 100644
--- a/emacs/guix-pcomplete.el
+++ b/emacs/guix-pcomplete.el
@@ -28,59 +28,7 @@
 (require 'pcmpl-unix)
 (require 'cl-lib)
 (require 'guix-utils)
-
-
-;;; Regexps for parsing various "guix ..." outputs
-
-(defvar guix-pcomplete-parse-package-regexp
-  (rx bol (group (one-or-more (not blank))))
-  "Regexp used to find names of the packages.")
-
-(defvar guix-pcomplete-parse-command-regexp
-  (rx bol "   "
-      (group wordchar (one-or-more (or wordchar "-"))))
-  "Regexp used to find guix commands.
-'Command' means any option not prefixed with '-'.  For example,
-guix subcommand, system action, importer, etc.")
-
-(defvar guix-pcomplete-parse-long-option-regexp
-  (rx (or "  " ", ")
-      (group "--" (one-or-more (or wordchar "-"))
-             (zero-or-one "=")))
-  "Regexp used to find long options.")
-
-(defvar guix-pcomplete-parse-short-option-regexp
-  (rx bol (one-or-more blank)
-      "-" (group (not (any "- "))))
-  "Regexp used to find short options.")
-
-(defvar guix-pcomplete-parse-list-regexp
-  (rx bol (zero-or-more blank) "- "
-      (group (one-or-more (or wordchar "-"))))
-  "Regexp used to find various lists (lint checkers, graph types).")
-
-(defvar guix-pcomplete-parse-regexp-group 1
-  "Parenthesized expression of regexps used to find commands and
-options.")
-
-
-;;; Non-receivable completions
-
-(defvar guix-pcomplete-systems
-  '("x86_64-linux" "i686-linux" "armhf-linux" "mips64el-linux")
-  "List of supported systems.")
-
-(defvar guix-pcomplete-hash-formats
-  '("nix-base32" "base32" "base16" "hex" "hexadecimal")
-  "List of supported hash formats.")
-
-(defvar guix-pcomplete-refresh-subsets
-  '("core" "non-core")
-  "List of supported 'refresh' subsets.")
-
-(defvar guix-pcomplete-key-policies
-  '("interactive" "always" "never")
-  "List of supported key download policies.")
+(require 'guix-help-vars)
 
 
 ;;; Interacting with guix
@@ -105,9 +53,8 @@ Return a list of strings matching REGEXP.
 GROUP specifies a parenthesized expression used in REGEXP."
   (with-temp-buffer
     (apply #'guix-pcomplete-run-guix args)
-    (goto-char (point-min))
     (let (result)
-      (while (re-search-forward regexp nil t)
+      (guix-while-search regexp
         (push (match-string-no-properties group) result))
       (nreverse result))))
 
@@ -129,7 +76,7 @@ function call is returned."
      (let* ((args '("--help"))
             (args (if command (cons command args) args))
             (res (apply #'guix-pcomplete-run-guix-and-search
-                        ,regexp guix-pcomplete-parse-regexp-group args)))
+                        ,regexp guix-help-parse-regexp-group args)))
        ,(if filter
             `(funcall ,filter res)
           'res))))
@@ -138,23 +85,23 @@ function call is returned."
   "If COMMAND is nil, return a list of available guix commands.
 If COMMAND is non-nil (it should be a string), return available
 subcommands, actions, etc. for this guix COMMAND."
-  guix-pcomplete-parse-command-regexp)
+  guix-help-parse-command-regexp)
 
 (guix-pcomplete-define-options-finder guix-pcomplete-long-options
   "Return a list of available long options for guix COMMAND."
-  guix-pcomplete-parse-long-option-regexp)
+  guix-help-parse-long-option-regexp)
 
 (guix-pcomplete-define-options-finder guix-pcomplete-short-options
   "Return a string with available short options for guix COMMAND."
-  guix-pcomplete-parse-short-option-regexp
+  guix-help-parse-short-option-regexp
   (lambda (list)
-    (mapconcat #'identity list "")))
+    (guix-concat-strings list "")))
 
 (guix-memoized-defun guix-pcomplete-all-packages ()
   "Return a list of all available Guix packages."
   (guix-pcomplete-run-guix-and-search
-   guix-pcomplete-parse-package-regexp
-   guix-pcomplete-parse-regexp-group
+   guix-help-parse-package-regexp
+   guix-help-parse-regexp-group
    "package" "--list-available"))
 
 (guix-memoized-defun guix-pcomplete-installed-packages (&optional profile)
@@ -163,22 +110,22 @@ subcommands, actions, etc. for this guix COMMAND."
                     (list (concat "--profile=" profile))))
          (args (append '("package" "--list-installed") args)))
     (apply #'guix-pcomplete-run-guix-and-search
-           guix-pcomplete-parse-package-regexp
-           guix-pcomplete-parse-regexp-group
+           guix-help-parse-package-regexp
+           guix-help-parse-regexp-group
            args)))
 
 (guix-memoized-defun guix-pcomplete-lint-checkers ()
   "Return a list of all available lint checkers."
   (guix-pcomplete-run-guix-and-search
-   guix-pcomplete-parse-list-regexp
-   guix-pcomplete-parse-regexp-group
+   guix-help-parse-list-regexp
+   guix-help-parse-regexp-group
    "lint" "--list-checkers"))
 
 (guix-memoized-defun guix-pcomplete-graph-types ()
   "Return a list of all available graph types."
   (guix-pcomplete-run-guix-and-search
-   guix-pcomplete-parse-list-regexp
-   guix-pcomplete-parse-regexp-group
+   guix-help-parse-list-regexp
+   guix-help-parse-regexp-group
    "graph" "--list-types"))
 
 
@@ -284,7 +231,7 @@ INPUT is the current partially completed string."
      ((option? "-L" "--load-path")
       (complete* (pcomplete-dirs)))
      ((string= "--key-download" option)
-      (complete* guix-pcomplete-key-policies))
+      (complete* guix-help-key-policies))
 
      ((command? "package")
       (cond
@@ -313,7 +260,7 @@ INPUT is the current partially completed string."
 
      ((and (command? "archive" "build" "size")
            (option? "-s" "--system"))
-      (complete* guix-pcomplete-systems))
+      (complete* guix-help-system-types))
 
      ((and (command? "build")
            (option? "-r" "--root"))
@@ -329,7 +276,7 @@ INPUT is the current partially completed string."
 
      ((and (command? "hash" "download")
            (option? "-f" "--format"))
-      (complete* guix-pcomplete-hash-formats))
+      (complete* guix-help-hash-formats))
 
      ((and (command? "lint")
            (option? "-c" "--checkers"))
@@ -342,7 +289,7 @@ INPUT is the current partially completed string."
 
      ((and (command? "refresh")
            (option? "-s" "--select"))
-      (complete* guix-pcomplete-refresh-subsets))
+      (complete* guix-help-refresh-subsets))
 
      ((and (command? "size")
            (option? "-m" "--map-file"))
diff --git a/emacs/guix-popup.el b/emacs/guix-popup.el
new file mode 100644
index 0000000000..59e98a352e
--- /dev/null
+++ b/emacs/guix-popup.el
@@ -0,0 +1,48 @@
+;;; guix-popup.el --- Popup windows library
+
+;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+
+;; This file is part of GNU Guix.
+
+;; GNU Guix is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Guix is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides `guix-define-popup' macro which is just an alias
+;; to `magit-define-popup'.  According to the manual (info
+;; "(magit-popup) Defining prefix and suffix commands") `magit-popup'
+;; library will eventually be superseded by a more general library.
+
+;;; Code:
+
+(require 'magit-popup)
+
+(defalias 'guix-define-popup 'magit-define-popup)
+
+(defvar guix-popup-font-lock-keywords
+  (eval-when-compile
+    `((,(rx "("
+            (group "guix-define-popup")
+            symbol-end
+            (zero-or-more blank)
+            (zero-or-one
+             (group (one-or-more (or (syntax word) (syntax symbol))))))
+       (1 font-lock-keyword-face)
+       (2 font-lock-function-name-face nil t)))))
+
+(font-lock-add-keywords 'emacs-lisp-mode guix-popup-font-lock-keywords)
+
+(provide 'guix-popup)
+
+;;; guix-popup.el ends here
diff --git a/emacs/guix-prettify.el b/emacs/guix-prettify.el
index b01495c86b..24dfbb33e2 100644
--- a/emacs/guix-prettify.el
+++ b/emacs/guix-prettify.el
@@ -1,6 +1,6 @@
 ;;; guix-prettify.el --- Prettify Guix store file names
 
-;; Copyright © 2014 Alex Kost <alezost@gmail.com>
+;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
 
 ;; This file is part of GNU Guix.
 
@@ -47,9 +47,12 @@
 
 ;;; Code:
 
+(require 'guix-utils)
+
 (defgroup guix-prettify nil
   "Prettify Guix store file names."
   :prefix "guix-prettify-"
+  :group 'guix
   :group 'font-lock
   :group 'convenience)
 
@@ -136,13 +139,11 @@ enabling/disabling `guix-prettify-mode'.  If nil, do nothing.")
           (remove-text-properties (point-min)
                                   (point-max)
                                   '(composition nil))
-        (save-excursion
-          (goto-char (point-min))
-          (while (re-search-forward guix-prettify-regexp nil t)
-            (remove-text-properties
-             (match-beginning guix-prettify-regexp-group)
-             (match-end       guix-prettify-regexp-group)
-             '(composition nil))))))))
+        (guix-while-search guix-prettify-regexp
+          (remove-text-properties
+           (match-beginning guix-prettify-regexp-group)
+           (match-end       guix-prettify-regexp-group)
+           '(composition nil)))))))
 
 ;;;###autoload
 (define-minor-mode guix-prettify-mode
diff --git a/emacs/guix-profiles.el.in b/emacs/guix-profiles.el
index 1e43707b68..1a41745512 100644
--- a/emacs/guix-profiles.el.in
+++ b/emacs/guix-profiles.el
@@ -19,12 +19,14 @@
 
 ;;; Code:
 
+(require 'guix-config)
+
 (defvar guix-user-profile
   (expand-file-name "~/.guix-profile")
   "User profile.")
 
 (defvar guix-default-profile
-  (concat (or (getenv "NIX_STATE_DIR") "@guix_localstatedir@/guix")
+  (concat guix-state-directory
           "/profiles/per-user/"
           (getenv "USER")
           "/guix-profile")
diff --git a/emacs/guix-read.el b/emacs/guix-read.el
new file mode 100644
index 0000000000..5a7201c3aa
--- /dev/null
+++ b/emacs/guix-read.el
@@ -0,0 +1,176 @@
+;;; guix-read.el --- Minibuffer readers
+
+;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+
+;; This file is part of GNU Guix.
+
+;; GNU Guix is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Guix is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides functions to prompt a user for packages, system
+;; types, hash formats and other guix related stuff.
+
+;;; Code:
+
+(require 'guix-help-vars)
+(require 'guix-utils)
+(require 'guix-base)
+
+(defun guix-read-file-name (prompt &optional dir default-filename
+                                   mustmatch initial predicate)
+  "Read file name.
+This function is similar to `read-file-name' except it also
+expands the file name."
+  (expand-file-name (read-file-name prompt dir default-filename
+                                    mustmatch initial predicate)))
+
+(defmacro guix-define-reader (name read-fun completions prompt)
+  "Define NAME function to read from minibuffer.
+READ-FUN may be `completing-read', `completing-read-multiple' or
+another function with the same arguments."
+  `(defun ,name (&optional prompt initial-contents)
+     (,read-fun ,(if prompt
+                     `(or prompt ,prompt)
+                   'prompt)
+                ,completions nil nil initial-contents)))
+
+(defmacro guix-define-readers (&rest args)
+  "Define reader functions.
+
+ARGS should have a form [KEYWORD VALUE] ...  The following
+keywords are available:
+
+  - `completions-var' - variable used to get completions.
+
+  - `completions-getter' - function used to get completions.
+
+  - `single-reader', `single-prompt' - name of a function to read
+    a single value, and a prompt for it.
+
+  - `multiple-reader', `multiple-prompt' - name of a function to
+    read multiple values, and a prompt for it.
+
+  - `multiple-separator' - if specified, another
+    `<multiple-reader-name>-string' function returning a string
+    of multiple values separated the specified separator will be
+    defined."
+  (let (completions-var
+        completions-getter
+        single-reader
+        single-prompt
+        multiple-reader
+        multiple-prompt
+        multiple-separator)
+
+    ;; Process the keyword args.
+    (while (keywordp (car args))
+      (pcase (pop args)
+        (`:completions-var    (setq completions-var    (pop args)))
+        (`:completions-getter (setq completions-getter (pop args)))
+        (`:single-reader      (setq single-reader      (pop args)))
+        (`:single-prompt      (setq single-prompt      (pop args)))
+        (`:multiple-reader    (setq multiple-reader    (pop args)))
+        (`:multiple-prompt    (setq multiple-prompt    (pop args)))
+        (`:multiple-separator (setq multiple-separator (pop args)))
+	(_ (pop args))))
+
+    (let ((completions
+           (cond ((and completions-var completions-getter)
+                  `(or ,completions-var
+                       (setq ,completions-var
+                             (funcall ',completions-getter))))
+                 (completions-var
+                  completions-var)
+                 (completions-getter
+                  `(funcall ',completions-getter)))))
+      `(progn
+         ,(when (and completions-var
+                     (not (boundp completions-var)))
+            `(defvar ,completions-var nil))
+
+         ,(when single-reader
+            `(guix-define-reader ,single-reader completing-read
+                                 ,completions ,single-prompt))
+
+         ,(when multiple-reader
+            `(guix-define-reader ,multiple-reader completing-read-multiple
+                                 ,completions ,multiple-prompt))
+
+         ,(when (and multiple-reader multiple-separator)
+            (let ((name (intern (concat (symbol-name multiple-reader)
+                                        "-string"))))
+              `(defun ,name (&optional prompt initial-contents)
+                 (guix-concat-strings
+                  (,multiple-reader prompt initial-contents)
+                  ,multiple-separator))))))))
+
+(guix-define-readers
+ :completions-var guix-help-system-types
+ :single-reader guix-read-system-type
+ :single-prompt "System type: ")
+
+(guix-define-readers
+ :completions-var guix-help-source-types
+ :single-reader guix-read-source-type
+ :single-prompt "Source type: ")
+
+(guix-define-readers
+ :completions-var guix-help-hash-formats
+ :single-reader guix-read-hash-format
+ :single-prompt "Hash format: ")
+
+(guix-define-readers
+ :completions-var guix-help-refresh-subsets
+ :single-reader guix-read-refresh-subset
+ :single-prompt "Refresh subset: ")
+
+(guix-define-readers
+ :completions-var guix-help-key-policies
+ :single-reader guix-read-key-policy
+ :single-prompt "Key policy: ")
+
+(guix-define-readers
+ :completions-var guix-help-elpa-archives
+ :single-reader guix-read-elpa-archive
+ :single-prompt "ELPA archive: ")
+
+(guix-define-readers
+ :completions-var guix-help-verify-options
+ :multiple-reader guix-read-verify-options
+ :multiple-prompt "Verify option,s: "
+ :multiple-separator ",")
+
+(guix-define-readers
+ :completions-getter guix-graph-type-names
+ :single-reader guix-read-graph-type
+ :single-prompt "Graph node type: ")
+
+(guix-define-readers
+ :completions-getter guix-lint-checker-names
+ :multiple-reader guix-read-lint-checker-names
+ :multiple-prompt "Linter,s: "
+ :multiple-separator ",")
+
+(guix-define-readers
+ :completions-getter guix-package-names
+ :single-reader guix-read-package-name
+ :single-prompt "Package: "
+ :multiple-reader guix-read-package-names
+ :multiple-prompt "Package,s: "
+ :multiple-separator " ")
+
+(provide 'guix-read)
+
+;;; guix-read.el ends here
diff --git a/emacs/guix-utils.el b/emacs/guix-utils.el
index dc0c58a114..c1ce954f8f 100644
--- a/emacs/guix-utils.el
+++ b/emacs/guix-utils.el
@@ -128,6 +128,53 @@ split it into several short lines."
       (fill-region (point-min) (point-max)))
     (buffer-string)))
 
+(defun guix-concat-strings (strings separator &optional location)
+  "Return new string by concatenating STRINGS with SEPARATOR.
+If LOCATION is a symbol `head', add another SEPARATOR to the
+beginning of the returned string; if `tail' - add SEPARATOR to
+the end of the string; if nil, do not add SEPARATOR; otherwise
+add both to the end and to the beginning."
+  (let ((str (mapconcat #'identity strings separator)))
+    (cond ((null location)
+           str)
+          ((eq location 'head)
+           (concat separator str))
+          ((eq location 'tail)
+           (concat str separator))
+          (t
+           (concat separator str separator)))))
+
+(defun guix-shell-quote-argument (argument)
+  "Quote shell command ARGUMENT.
+This function is similar to `shell-quote-argument', but less strict."
+  (if (equal argument "")
+      "''"
+    (replace-regexp-in-string
+     "\n" "'\n'"
+     (replace-regexp-in-string
+      (rx (not (any alnum "-=,./\n"))) "\\\\\\&" argument))))
+
+(defun guix-command-symbol (&optional args)
+  "Return symbol by concatenating 'guix' and ARGS (strings)."
+  (intern (guix-concat-strings (cons "guix" args) "-")))
+
+(defun guix-command-string (&optional args)
+  "Return 'guix ARGS ...' string with quoted shell arguments."
+  (let ((args (mapcar #'guix-shell-quote-argument args)))
+    (guix-concat-strings (cons "guix" args) " ")))
+
+(defun guix-copy-as-kill (string &optional no-message?)
+  "Put STRING into `kill-ring'.
+If NO-MESSAGE? is non-nil, do not display a message about it."
+  (kill-new string)
+  (unless no-message?
+    (message "'%s' has been added to kill ring." string)))
+
+(defun guix-copy-command-as-kill (args &optional no-message?)
+  "Put 'guix ARGS ...' string into `kill-ring'.
+See also `guix-copy-as-kill'."
+  (guix-copy-as-kill (guix-command-string args) no-message?))
+
 (defun guix-completing-read-multiple (prompt table &optional predicate
                                       require-match initial-input
                                       hist def inherit-input-method)
@@ -146,20 +193,56 @@ Return time value."
   (require 'org)
   (org-read-date nil t nil prompt))
 
-(defun guix-get-key-val (alist &rest keys)
-  "Return value from ALIST by KEYS.
-ALIST is alist of alists of alists ... which can be consecutively
-accessed with KEYS."
-  (let ((val alist))
-    (dolist (key keys val)
-      (setq val (cdr (assq key val))))))
+(defcustom guix-find-file-function #'find-file
+  "Function used to find a file.
+The function is called by `guix-find-file' with a file name as a
+single argument."
+  :type '(choice (function-item find-file)
+                 (function-item org-open-file)
+                 (function :tag "Other function"))
+  :group 'guix)
 
 (defun guix-find-file (file)
   "Find FILE if it exists."
   (if (file-exists-p file)
-      (find-file file)
+      (funcall guix-find-file-function file)
     (message "File '%s' does not exist." file)))
 
+(defmacro guix-while-search (regexp &rest body)
+  "Evaluate BODY after each search for REGEXP in the current buffer."
+  (declare (indent 1) (debug t))
+  `(save-excursion
+     (goto-char (point-min))
+     (while (re-search-forward ,regexp nil t)
+       ,@body)))
+
+(defun guix-any (pred lst)
+  "Test whether any element from LST satisfies PRED.
+If so, return the return value from the successful PRED call.
+Return nil otherwise."
+  (when lst
+    (or (funcall pred (car lst))
+        (guix-any pred (cdr lst)))))
+
+
+;;; Alist accessors
+
+(defmacro guix-define-alist-accessor (name assoc-fun)
+  "Define NAME function to access alist values using ASSOC-FUN."
+  `(defun ,name (alist &rest keys)
+     ,(format "Return value from ALIST by KEYS using `%s'.
+ALIST is alist of alists of alists ... which can be consecutively
+accessed with KEYS."
+              assoc-fun)
+     (if (or (null alist) (null keys))
+         alist
+       (apply #',name
+              (cdr (,assoc-fun (car keys) alist))
+              (cdr keys)))))
+
+(guix-define-alist-accessor guix-assq-value assq)
+(guix-define-alist-accessor guix-assoc-value assoc)
+
 
 ;;; Diff
 
@@ -199,6 +282,27 @@ See `defun' for the meaning of arguments."
               (mapconcat #'symbol-name arglist " ")
               docstring)))
 
+(defmacro guix-memoized-defalias (symbol definition &optional docstring)
+  "Set SYMBOL's function definition to memoized version of DEFINITION."
+  (declare (doc-string 3) (indent 1))
+  `(defalias ',symbol
+     (guix-memoize #',definition)
+     ,(or docstring
+          (format "Memoized version of `%S'." definition))))
+
+(defvar guix-memoized-font-lock-keywords
+  (eval-when-compile
+    `((,(rx "("
+            (group "guix-memoized-" (or "defun" "defalias"))
+            symbol-end
+            (zero-or-more blank)
+            (zero-or-one
+             (group (one-or-more (or (syntax word) (syntax symbol))))))
+       (1 font-lock-keyword-face)
+       (2 font-lock-function-name-face nil t)))))
+
+(font-lock-add-keywords 'emacs-lisp-mode guix-memoized-font-lock-keywords)
+
 (provide 'guix-utils)
 
 ;;; guix-utils.el ends here
diff --git a/emacs/guix.el b/emacs/guix.el
index afe7285696..244696a184 100644
--- a/emacs/guix.el
+++ b/emacs/guix.el
@@ -1,6 +1,6 @@
 ;;; guix.el --- Interface for GNU Guix package manager
 
-;; Copyright © 2014 Alex Kost <alezost@gmail.com>
+;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
 
 ;; Package-Requires: ((geiser "0.3"))
 ;; Keywords: tools
@@ -32,6 +32,7 @@
 (require 'guix-list)
 (require 'guix-info)
 (require 'guix-utils)
+(require 'guix-read)
 
 (defgroup guix nil
   "Interface for Guix package manager."
@@ -193,6 +194,15 @@ Interactively with prefix, prompt for PROFILE."
                              (float-time from)
                              (float-time to)))
 
+;;;###autoload
+(defun guix-edit (id-or-name)
+  "Edit (go to location of) package with ID-OR-NAME."
+  (interactive (list (guix-read-package-name)))
+  (let ((loc (guix-package-location id-or-name)))
+    (if loc
+        (guix-find-location loc)
+      (message "Couldn't find package location."))))
+
 (provide 'guix)
 
 ;;; guix.el ends here
diff --git a/gnu-system.am b/gnu-system.am
index d3a9527939..2f31f6802a 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -239,6 +239,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/onc-rpc.scm			\
   gnu/packages/openbox.scm			\
   gnu/packages/openldap.scm			\
+  gnu/packages/openstack.scm			\
   gnu/packages/orpheus.scm			\
   gnu/packages/ots.scm				\
   gnu/packages/package-management.scm		\
@@ -416,12 +417,6 @@ dist_patch_DATA =						\
   gnu/packages/patches/clucene-pkgconfig.patch			\
   gnu/packages/patches/cmake-fix-tests.patch			\
   gnu/packages/patches/coreutils-racy-tail-test.patch		\
-  gnu/packages/patches/cpio-CVE-2014-9112-pt1.patch		\
-  gnu/packages/patches/cpio-CVE-2014-9112-pt2.patch		\
-  gnu/packages/patches/cpio-CVE-2014-9112-pt3.patch		\
-  gnu/packages/patches/cpio-CVE-2014-9112-pt4.patch		\
-  gnu/packages/patches/cpio-CVE-2014-9112-pt5.patch		\
-  gnu/packages/patches/cpio-fix-symlink-bad-length-test.patch	\
   gnu/packages/patches/cpio-gets-undeclared.patch		\
   gnu/packages/patches/cpufrequtils-fix-aclocal.patch		\
   gnu/packages/patches/crda-optional-gcrypt.patch		\
@@ -476,6 +471,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/glibc-locales.patch			\
   gnu/packages/patches/glibc-o-largefile.patch			\
   gnu/packages/patches/gmp-arm-asm-nothumb.patch		\
+  gnu/packages/patches/gnucash-price-quotes-perl.patch		\
   gnu/packages/patches/gnutls-doc-fix.patch			\
   gnu/packages/patches/gobject-introspection-absolute-shlib-path.patch \
   gnu/packages/patches/gobject-introspection-cc.patch		\
@@ -489,7 +485,9 @@ dist_patch_DATA =						\
   gnu/packages/patches/guile-arm-fixes.patch			\
   gnu/packages/patches/guile-default-utf8.patch			\
   gnu/packages/patches/guile-linux-syscalls.patch		\
+  gnu/packages/patches/guile-present-coding.patch		\
   gnu/packages/patches/guile-relocatable.patch			\
+  gnu/packages/patches/guile-rsvg-pkgconfig.patch		\
   gnu/packages/patches/gtkglext-disable-disable-deprecated.patch \
   gnu/packages/patches/hop-bigloo-4.0b.patch			\
   gnu/packages/patches/hop-linker-flags.patch			\
@@ -576,6 +574,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/patchutils-xfail-gendiff-tests.patch	\
   gnu/packages/patches/patch-hurd-path-max.patch		\
   gnu/packages/patches/perl-autosplit-default-time.patch	\
+  gnu/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch \
   gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch \
   gnu/packages/patches/perl-module-pluggable-search.patch	\
   gnu/packages/patches/perl-net-amazon-s3-moose-warning.patch	\
@@ -691,6 +690,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/xf86-video-trident-remove-mibstore.patch	\
   gnu/packages/patches/xf86-video-vmware-glibc-2.20.patch	\
   gnu/packages/patches/xfce4-panel-plugins.patch		\
+  gnu/packages/patches/xfce4-settings-defaults.patch		\
   gnu/packages/patches/xmodmap-asprintf.patch 			\
   gnu/packages/patches/zathura-plugindir-environment-variable.patch
 
diff --git a/gnu/build/linux-container.scm b/gnu/build/linux-container.scm
index af599040a1..95220d0bc0 100644
--- a/gnu/build/linux-container.scm
+++ b/gnu/build/linux-container.scm
@@ -55,6 +55,9 @@ to ROOT, then make ROOT the new root directory for the process."
   (define (scope dir)
     (string-append root dir))
 
+  (define (touch file-name)
+    (call-with-output-file file-name (const #t)))
+
   (define (bind-mount src dest)
     (mount src dest "none" MS_BIND))
 
@@ -89,8 +92,7 @@ to ROOT, then make ROOT the new root directory for the process."
   (for-each (lambda (device)
               (when (file-exists? device)
                 ;; Create the mount point file.
-                (call-with-output-file (scope device)
-                  (const #t))
+                (touch (scope device))
                 (bind-mount device (scope device))))
             '("/dev/null"
               "/dev/zero"
@@ -101,6 +103,15 @@ to ROOT, then make ROOT the new root directory for the process."
               "/dev/ptmx"
               "/dev/fuse"))
 
+  ;; Setup the container's /dev/console by bind mounting the pseudo-terminal
+  ;; associated with standard input.
+  (let ((in      (current-input-port))
+        (console (scope "/dev/console")))
+    (when (isatty? in)
+      (touch console)
+      (chmod console #o600)
+      (bind-mount (ttyname in) console)))
+
   ;; Setup standard input/output/error.
   (symlink "/proc/self/fd"   (scope "/dev/fd"))
   (symlink "/proc/self/fd/0" (scope "/dev/stdin"))
@@ -151,7 +162,8 @@ host user identifiers to map into the user namespace."
 (define (namespaces->bit-mask namespaces)
   "Return the number suitable for the 'flags' argument of 'clone' that
 corresponds to the symbols in NAMESPACES."
-  (apply logior SIGCHLD
+  ;; Use the same flags as fork(3) in addition to the namespace flags.
+  (apply logior SIGCHLD CLONE_CHILD_CLEARTID CLONE_CHILD_SETTID
          (map (match-lambda
                ('mnt  CLONE_NEWNS)
                ('uts  CLONE_NEWUTS)
diff --git a/gnu/build/linux-initrd.scm b/gnu/build/linux-initrd.scm
index e26c067b49..c65b5aacfa 100644
--- a/gnu/build/linux-initrd.scm
+++ b/gnu/build/linux-initrd.scm
@@ -72,7 +72,9 @@ COMPRESS? is true, compress it using GZIP.  On success, return OUTPUT."
                                #:file->header cpio:file->cpio-header*)))
 
   (or (not compress?)
-      (and (zero? (system* gzip "--best" output))
+      ;; Use '--no-name' so that gzip records neither a file name nor a time
+      ;; stamp in its output.
+      (and (zero? (system* gzip "--best" "--no-name" output))
            (rename-file (string-append output ".gz")
                         output))
       output))
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 512d604982..027fe5b573 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -704,9 +704,9 @@ commands and their arguments.")
     ;; See <http://www.sudo.ws/sudo/license.html>.
     (license license:x11)))
 
-(define-public wpa-supplicant-light
+(define-public wpa-supplicant-minimal
   (package
-    (name "wpa-supplicant-light")
+    (name "wpa-supplicant-minimal")
     (version "2.4")
     (source (origin
               (method url-fetch)
@@ -796,12 +796,12 @@ This package provides the 'wpa_supplicant' daemon and the 'wpa_cli' command.")
     (license license:bsd-3)))
 
 (define-public wpa-supplicant
-  (package (inherit wpa-supplicant-light)
+  (package (inherit wpa-supplicant-minimal)
     (name "wpa-supplicant")
     (inputs `(("dbus" ,dbus)
-              ,@(package-inputs wpa-supplicant-light)))
+              ,@(package-inputs wpa-supplicant-minimal)))
     (arguments
-     (substitute-keyword-arguments (package-arguments wpa-supplicant-light)
+     (substitute-keyword-arguments (package-arguments wpa-supplicant-minimal)
        ((#:phases phases)
         `(alist-cons-after
           'configure 'configure-for-dbus
diff --git a/gnu/packages/audacity.scm b/gnu/packages/audacity.scm
index 4f7bc686e3..53cc2a497e 100644
--- a/gnu/packages/audacity.scm
+++ b/gnu/packages/audacity.scm
@@ -55,7 +55,7 @@
      `(("wxwidgets" ,wxwidgets-2)
        ("gtk" ,gtk+-2)
        ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-2)
+       ("jack" ,jack-1)
        ("expat" ,expat)
        ("ffmpeg" ,ffmpeg)
        ("lame" ,lame)
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 1537f3335d..eed72c31a9 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -1659,14 +1659,14 @@ interface.")
 (define-public qsynth
   (package
     (name "qsynth")
-    (version "0.3.9")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "mirror://sourceforge/qsynth/qsynth-" version ".tar.gz"))
        (sha256
-        (base32 "08kyn6cl755l9i1grzjx8yi3f8mgiz4gx0hgqad1n0d8yz85087b"))))
+        (base32 "1chc89v9hcjw3k4rvzakl8g56wv24kh48fzv1gfs4iv8vhyl3j4x"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f)) ; no "check" phase
@@ -1689,12 +1689,13 @@ synthesizer written in C++.")
        (method url-fetch)
        (uri (string-append "https://github.com/Themaister/RSound/archive/v"
                            version ".tar.gz"))
+       (file-name (string-append name "-" version))
        (sha256
         (base32 "1wzs40c0k5zpkmm5ffl6c17xmr399sxli7ys0fbb9ib0fd334knx"))))
     (build-system gnu-build-system)
     (inputs
      `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-2)
+       ("jack" ,jack-1)
        ("ao" ,ao)
        ("libsamplerate" ,libsamplerate)
        ("openal" ,openal)
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 3c703ecb76..84d27c08a6 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
+;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
+  #:use-module (gnu packages acl)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages dejagnu)
@@ -35,11 +37,11 @@
   #:use-module (gnu packages mcrypt)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages pcre)
-  #:use-module (gnu packages python)
-  #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages ssh)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages xml))
 
 (define-public duplicity
@@ -316,3 +318,37 @@ rsync.  Thus you can use rdiff-backup and ssh to securely back a hard drive up
 to a remote location, and only the differences will be transmitted.  Finally,
 rdiff-backup is easy to use and settings have sensible defaults.")
     (license license:gpl2+)))
+
+(define-public attic
+  (package
+    (name "attic")
+    (version "0.16")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://pypi.python.org/packages/source/A/Attic/Attic-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0b5skd36r4c0915lwpkqg5hxm49gls9pprs1b7hc40910wlcsl36"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before
+          'build 'set-openssl-prefix
+          (lambda* (#:key inputs #:allow-other-keys)
+            (setenv "ATTIC_OPENSSL_PREFIX" (assoc-ref inputs "openssl"))
+            #t)))))
+    (inputs
+     `(("acl" ,acl)
+       ("openssl" ,openssl)
+       ("python-llfuse" ,python-llfuse)
+       ("python-msgpack" ,python-msgpack)))
+    (synopsis "Deduplicating backup program")
+    (description "Attic is a deduplicating backup program.  The main goal of
+Attic is to provide an efficient and secure way to backup data.  The data
+deduplication technique used makes Attic suitable for daily backups since only
+changes are stored.")
+    (home-page "https://attic-backup.org/")
+    (license license:bsd-3)))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 189dd959a5..bbd02f3123 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -873,6 +873,45 @@ file formats including SAM/BAM, Wiggle/BigWig, BED, GFF/GTF, VCF.")
 other types of unwanted sequence from high-throughput sequencing reads.")
     (license license:expat)))
 
+(define-public deeptools
+  (package
+    (name "deeptools")
+    (version "1.5.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/fidelram/deepTools/archive/"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1kaagygcbvjs9sxd9cqmskd02wcfp9imvb735r087w7hwqpvz6fs"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2))
+    (propagated-inputs
+     `(("python-scipy" ,python2-scipy)
+       ("python-numpy" ,python2-numpy)
+       ("python-matplotlib" ,python2-matplotlib)
+       ("python-bx-python" ,python2-bx-python)
+       ("python-pysam" ,python2-pysam)))
+    (native-inputs
+     `(("python-mock" ,python2-mock) ;for tests
+       ("python-pytz" ,python2-pytz) ;for tests
+       ("python-setuptools" ,python2-setuptools)))
+    (home-page "https://github.com/fidelram/deepTools")
+    (synopsis "Tools for normalizing and visualizing deep-sequencing data")
+    (description
+     "DeepTools addresses the challenge of handling the large amounts of data
+that are now routinely generated from DNA sequencing centers.  To do so,
+deepTools contains useful modules to process the mapped reads data to create
+coverage files in standard bedGraph and bigWig file formats.  By doing so,
+deepTools allows the creation of normalized coverage files or the comparison
+between two files (for example, treatment and control).  Finally, using such
+normalized and standardized files, multiple visualizations can be created to
+identify enrichments with functional annotations of the genome.")
+    (license license:gpl3+)))
+
 (define-public diamond
   (package
     (name "diamond")
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 8c0a59ad70..f5bf069c20 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -127,7 +127,7 @@ successful, or false to signal an error."
     (synopsis description)
     (description #f)
     (home-page #f)
-    (license #f)))
+    (license gpl3+)))
 
 (define package-with-bootstrap-guile
   (memoize
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 4a3e521f59..df62e9963e 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,6 +31,7 @@
   #:use-module (guix build-system perl)
   #:use-module (gnu packages base)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages valgrind)
   #:use-module ((srfi srfi-1) #:select (last)))
 
 (define-public zlib
@@ -513,3 +515,35 @@ compression library.")
     (description "IO-Compress provides a Perl interface to allow reading and
 writing of compressed data created with the zlib and bzip2 libraries.")
     (license (package-license perl))))
+
+(define-public lz4
+  (package
+    (name "lz4")
+    (version "131")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/Cyan4973/lz4/archive/"
+                           "r" version ".tar.gz"))
+       (sha256
+        (base32 "1vfg305zvj50hwscad24wan9jar6nqj14gdk2hqyr7bb9mhh0kcx"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("valgrind" ,valgrind)))
+    (arguments
+     `(#:test-target "test"
+       #:parallel-tests? #f ; tests fail if run in parallel
+       #:make-flags (list "CC=gcc"
+                          (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure))))
+    (home-page "https://github.com/Cyan4973/lz4")
+    (synopsis "Compression algorithm focused on speed")
+    (description "LZ4 is a lossless compression algorithm, providing
+compression speed at 400 MB/s per core (0.16 Bytes/cycle).  It also features an
+extremely fast decoder, with speed in multiple GB/s per core (0.71 Bytes/cycle).
+A high compression derivative, called LZ4_HC, is also provided.  It trades CPU
+time for compression ratio.")
+    ;; The libraries (lz4, lz4hc, and xxhash are BSD licenced. The command
+    ;; line interface programs (lz4, fullbench, fuzzer, datagen) are GPL2+.
+    (license (list license:bsd-2 license:gpl2+))))
diff --git a/gnu/packages/cpio.scm b/gnu/packages/cpio.scm
index cfb416239d..925b0eed5b 100644
--- a/gnu/packages/cpio.scm
+++ b/gnu/packages/cpio.scm
@@ -28,29 +28,15 @@
 (define-public cpio
   (package
     (name "cpio")
-    (version "2.11")
+    (version "2.12")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/cpio/cpio-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "1gavgpzqwgkpagjxw72xgxz52y1ifgz0ckqh8g7cckz7jvyhp0mv"))
-             (patches (map search-patch
-                           '("cpio-CVE-2014-9112-pt1.patch"
-                             "cpio-CVE-2014-9112-pt2.patch"
-                             "cpio-CVE-2014-9112-pt3.patch"
-                             "cpio-CVE-2014-9112-pt4.patch"
-                             "cpio-CVE-2014-9112-pt5.patch"
-                             "cpio-fix-symlink-bad-length-test.patch"
-                             "cpio-gets-undeclared.patch")))))
+               "0vi9q475h1rki53100zml75vxsykzyhrn70hidy41s5c2rc8r6bh"))))
     (build-system gnu-build-system)
-
-    ;; FIXME: autoconf is needed to run autom4te, to update to test suite
-    ;;        after the CVE-2014-9112 patches.  Remove this when cpio is
-    ;;        updated to post-2.11.
-    (native-inputs `(("autoconf" ,autoconf)))
-
     (home-page "https://www.gnu.org/software/cpio/")
     (synopsis "Manage cpio and tar file archives")
     (description
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 98be700b80..e1cac39cc5 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -328,11 +328,18 @@ types are supported, as is encryption.")
                                            6 #\0))))))
                    (list
                     (string-append
-                     "http://distfiles.gentoo.org/distfiles/"
-                     "/sqlite-autoconf-" numeric-version ".tar.gz")
+                     "https://fossies.org/linux/misc/sqlite-autoconf-"
+                     numeric-version ".tar.gz")
                     (string-append
-                     "mirror://sourceforge/sqlite.mirror/SQLite%20" version
-                     "/sqlite-autoconf-" numeric-version ".tar.gz"))))
+                     "http://distfiles.gentoo.org/distfiles/"
+                     "/sqlite-autoconf-" numeric-version ".tar.gz"))
+
+                   ;; XXX: As of 2015-09-08, SourceForge is squatting the URL
+                   ;; below, returning 200 and showing an advertising page.
+                   ;; (string-append
+                   ;;  "mirror://sourceforge/sqlite.mirror/SQLite%20" version
+                   ;;  "/sqlite-autoconf-" numeric-version ".tar.gz")
+                   ))
             (sha256
              (base32
               "1dnkl4qr1dgaprbyf3jddfiynkhxnin86qabni47wjlc0fnb16gv"))))
@@ -740,14 +747,14 @@ similar to BerkeleyDB, LevelDB, etc.")
 (define-public redis
   (package
     (name "redis")
-    (version "3.0.3")
+    (version "3.0.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.redis.io/releases/redis-"
                                   version".tar.gz"))
               (sha256
                (base32
-                "19cxdrk380qachw160h1x51mwj7kpkxlggfzfh19bl0nbdkgl20x"))))
+                "1kqjc4qrasadgnl3cg71x3g5qpw2rilyk4pwl151698rb2nr0pm3"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; tests related to master/slave and replication fail
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index b0dde64360..ad615acc86 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -60,7 +60,7 @@
 (define-public calibre
   (package
     (name "calibre")
-    (version "2.35.0")
+    (version "2.37.1")
     (source
       (origin
         (method url-fetch)
@@ -69,7 +69,7 @@
                             version ".tar.xz"))
         (sha256
           (base32
-           "13sic0l16myvka8mgpr56h6qlpf1cwx8xlf4acp3qz6gsmz3r23x"))
+           "0cbpkhchxjz9dz4chkrlgq0q1sjmyp6lm9vrhnm2mwai61kzn25s"))
         ;; Remove non-free or doubtful code, see
         ;; https://lists.gnu.org/archive/html/guix-devel/2015-02/msg00478.html
         (modules '((guix build utils)))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 9c7a19ad59..b6ca6cfc66 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -310,7 +310,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
 (define-public magit
   (package
     (name "magit")
-    (version "2.2.1")
+    (version "2.2.2")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -318,7 +318,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
                    version "/" name "-" version ".tar.gz"))
              (sha256
               (base32
-               "0bjdj4468i5w3j2i945b6psb6n04z34vhjaqr0iz4xgixk3wiqmh"))))
+               "1imkj4prprnivhbpdn1mdpiryxkckzy5hbnqaahv7gixwac1irh8"))))
     (build-system gnu-build-system)
     (native-inputs `(("texinfo" ,texinfo)
                      ("emacs" ,emacs-no-x)))
@@ -483,6 +483,82 @@ support for Git-SVN.")
 programs.")
     (license license:gpl3+)))
 
+(define-public let-alist
+  (package
+    (name "emacs-let-alist")
+    (version "1.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://elpa.gnu.org/packages/let-alist-"
+                                  version ".el"))
+              (sha256
+               (base32
+                "07312bvvyz86lf64vdkxg2l1wgfjl25ljdjwlf1bdzj01c4hm88x"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build emacs-utils))
+
+       #:builder (begin
+                   (use-modules (guix build emacs-utils)
+                                (guix build utils))
+
+                   (let* ((out     (assoc-ref %outputs "out"))
+                          (lispdir (string-append out
+                                                  "/share/emacs/site-lisp/"
+                                                  "guix.d/let-alist-"
+                                                  ,version))
+                          (emacs   (assoc-ref %build-inputs "emacs")))
+
+                     (mkdir-p lispdir)
+                     (copy-file (assoc-ref %build-inputs "source")
+                                (string-append lispdir "/let-alist.el"))
+
+                     (setenv "PATH" (string-append emacs "/bin"))
+                     (emacs-byte-compile-directory lispdir)
+                     #t))))
+    (native-inputs `(("emacs" ,emacs-no-x)))
+    (home-page "http://elpa.gnu.org/packages/let-alist.html")
+    (synopsis "Easily let-bind values of an assoc-list by their names")
+    (description
+     "This package offers a single Emacs Lisp macro, @code{let-alist}.  This
+macro takes a first argument, whose value must be an alist (association list),
+and a body.
+
+The macro expands to a let form containing the body, where each dotted symbol
+inside body is let-bound to their cdrs in the alist.  Only those present in
+the body are let-bound and this search is done at compile time.")
+    (license license:gpl3+)))
+
+(define-public flycheck
+  (package
+    (name "emacs-flycheck")
+    (version "0.23")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/flycheck/flycheck/releases/download/"
+                    version "/flycheck-" version ".tar"))
+              (sha256
+               (base32
+                "1n2cifzsl5dbv42l82bi3y1vk6q33msi8dd4bj7b9nvnl9jfjj5b"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-let-alist" ,let-alist)))
+    (home-page "https://www.flycheck.org")
+    (synopsis "On-the-fly syntax checking")
+    (description
+     "This package provides on-the-fly syntax checking for GNU Emacs.  It is a
+replacement for the older Flymake extension which is part of GNU Emacs, with
+many improvements and additional features.
+
+Flycheck provides fully-automatic, fail-safe, on-the-fly background syntax
+checking for over 30 programming and markup languages with more than 70
+different tools.  It highlights errors and warnings inline in the buffer, and
+provides an optional IDE-like error list.")
+    (license license:gpl3+)))                     ;+GFDLv1.3+ for the manual
+
 
 ;;;
 ;;; Web browsing.
@@ -989,3 +1065,30 @@ files and directories.")
     (description "This package adds support to Org-Babel for evaluating Python
 source code using IPython.")
     (license license:gpl3+)))
+
+(define-public emacs-debbugs
+  (package
+    (name "emacs-debbugs")
+    (version "0.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://elpa.gnu.org/packages/debbugs-"
+                                  version ".tar"))
+              (sha256
+               (base32
+                "0pbglx3paa8icazgxlg4jf40wl8war63y9j2jmbb7gbd1xp95v72"))))
+    (build-system emacs-build-system)
+    (home-page "http://elpa.gnu.org/packages/debbugs.html")
+    (synopsis "Access the Debbugs bug tracker in Emacs")
+    (description
+     "This package lets you access the @uref{http://bugs.gnu.org,GNU Bug
+Tracker} from within Emacs.
+
+For instance, it defines the command @code{M-x debbugs-gnu} for listing bugs,
+and the command @code{M-x debbugs-gnu-search} for bug searching.  If you
+prefer the listing of bugs as TODO items of @code{org-mode}, you could use
+@code{M-x debbugs-org} and related commands.
+
+A minor mode @code{debbugs-browse-mode} let you browse URLs to the GNU Bug
+Tracker as well as bug identifiers prepared for @code{bug-reference-mode}.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index bb009e2548..54e43ef0f8 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -28,6 +28,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
@@ -35,6 +36,7 @@
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gd)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
@@ -360,3 +362,49 @@ multipole-accelerated algorithm.")
      "Fasthenry is an inductance extraction program based on a
 multipole-accelerated algorithm.")
     (license (license:non-copyleft #f "See induct.c."))))
+
+(define-public gerbv
+  (package
+    (name "gerbv")
+    (version "2.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/gerbv/gerbv/gerbv-"
+                                  version "/gerbv-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0v6ry0mxi5qym4z0y0lpblxsw9dfjpgxs4c4v2ngg7yw4b3a59ks"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'autoconf
+          (lambda _
+            ;; Build rules contain references to Russian translation, but the
+            ;; needed files are missing; see
+            ;; http://sourceforge.net/p/gerbv/bugs/174/
+            (delete-file "po/LINGUAS")
+            (substitute* "man/Makefile.am"
+              (("PO_FILES= gerbv.ru.1.in.po") "")
+              (("man_MANS = gerbv.1 gerbv.ru.1") "man_MANS = gerbv.1"))
+            (zero? (system* "autoreconf" "-vfi")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("gettext" ,gnu-gettext)
+       ("po4a" ,po4a)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("cairo" ,cairo)
+       ("gtk" ,gtk+-2)
+       ("desktop-file-utils" ,desktop-file-utils)))
+    (home-page "http://gerbv.geda-project.org/")
+    (synopsis "Gerber file viewer")
+    (description
+     "Gerbv is a viewer for files in the Gerber format (RS-274X only), which
+is commonly used to represent printed circuit board (PCB) layouts.  Gerbv lets
+you load several files on top of each other, do measurements on the displayed
+image, etc.  Besides viewing Gerbers, you may also view Excellon drill files
+as well as pick-place files.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 5e6693b8da..0a7eaf1fc4 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -51,14 +51,15 @@
 (define-public efl
   (package
     (name "efl")
-    (version "1.14.2")
+    (version "1.15.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://download.enlightenment.org/rel/libs/efl/efl-"
                     version ".tar.xz"))
               (sha256
-               (base32 "0kg51v63ljq1z4dj65aiyxaqhq54gkl4hx53ifwbci6ihammandr"))))
+               (base32
+                "1n2l2n09lys5dph9lrnsv5z3qbgzp7bi0vidal2fvy18hflbbvsn"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -127,20 +128,21 @@
 for Enlightenment.  Libraries covers data serialization, wide support for
 graphics rendering, UI layout and themes, interaction with OS, access to
 removable devices or support for multimedia.")
-    (license (list license:bsd-2 license:lgpl2.1 license:zlib)))) ; different parts under different licenses
+    ;; Different parts are under different licenses.
+    (license (list license:bsd-2 license:lgpl2.1 license:zlib))))
 
 (define-public elementary
   (package
     (name "elementary")
-    (version "1.14.2")
+    (version "1.15.1")
     (source (origin
               (method url-fetch)
               (uri
-               (string-append
-                "https://download.enlightenment.org/rel/libs/elementary/elementary-"
-                version ".tar.xz"))
+               (string-append "https://download.enlightenment.org/rel/libs/"
+                              "elementary/elementary-" version ".tar.xz"))
               (sha256
-               (base32 "1ck1jm9dfx2l72nklndqjfsxjqb0024b88naskld1dk9b8drs76b"))))
+               (base32
+                "015b277bvgb4q8cqjl58ir9nqb1d40fpj2jblf4gkxq8a45a88mb"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -157,7 +159,7 @@ full capabilities of EFL.")
 (define-public evas-generic-loaders
   (package
     (name "evas-generic-loaders")
-    (version "1.14.0")
+    (version "1.15.0")
     (source (origin
               (method url-fetch)
               (uri
@@ -166,7 +168,8 @@ full capabilities of EFL.")
                 "evas_generic_loaders/evas_generic_loaders-"
                 version ".tar.xz"))
               (sha256
-               (base32 "18b6xmbf81bly4mlwlzwr17g2m8dzznbhsdjk6pbb3nw4wn3y88l"))))
+               (base32
+                "0zzx06j20x580xqnnsxp7gb7rv279zcgvdxfbhs905af9m6rwlqy"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -188,15 +191,16 @@ files in Evas (EFL canvas library).")
 (define-public emotion-generic-players
   (package
     (name "emotion-generic-players")
-    (version "1.14.0")
+    (version "1.15.0")
     (source (origin
               (method url-fetch)
               (uri
-               (string-append
-                "https://download.enlightenment.org/rel/libs/emotion_generic_players/emotion_generic_players-"
-                version ".tar.xz"))
+               (string-append "https://download.enlightenment.org/rel/libs/"
+                              "emotion_generic_players/emotion_generic_players"
+                              "-" version ".tar.xz"))
               (sha256
-               (base32 "0685jzag98ykknycfdqn70zif3fmcfi6m8k9yp6d79r1h8gc49n4"))))
+               (base32
+                "0pszwmcygxnv1sfx0m79md2jmi4sng8mdb1xcr6h2z5c8685wvcz"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -214,15 +218,15 @@ The only supported now is VLC.")
 (define-public terminology
   (package
     (name "terminology")
-    (version "0.8.0")
+    (version "0.9.0")
     (source (origin
               (method url-fetch)
               (uri
-               (string-append
-                "https://download.enlightenment.org/rel/apps/terminology/terminology-"
-                version ".tar.gz"))
+               (string-append "https://download.enlightenment.org/rel/apps/"
+                              "terminology/terminology-" version ".tar.xz"))
               (sha256
-               (base32 "0a767ixackzmhb2awrhjy7q6vsivsd54wc434i617xiw095x843s"))))
+               (base32
+                "0iwid9cvd96kwl0hjhbby84kkz5sgb4p8454nnkf7wjvdz2f9b96"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -266,15 +270,14 @@ Libraries with some extra bells and whistles.")
 (define-public enlightenment
   (package
     (name "enlightenment")
-    (version "0.19.5")
+    (version "0.19.9")
     (source (origin
               (method url-fetch)
               (uri
-               (string-append
-                "https://download.enlightenment.org/rel/apps/enlightenment/enlightenment-"
-                version ".tar.xz"))
+               (string-append "https://download.enlightenment.org/rel/apps/"
+                              name "/" name "-" version ".tar.xz"))
               (sha256
-               (base32 "0j66x7x76fbgqfw6fi77v8qy50slw3jnsq3vvs82rrfvniabm8wc"))))
+               (base32 "1ajpyw1bfbmxpniw041vbvrs9wqgzyw9kccx72nnfiy2wxspjcr5"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index bbd8368473..97f2975e51 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,7 +29,7 @@
 (define-public ath9k-htc-firmware
   (package
     (name "ath9k-htc-firmware")
-    (version "1.3.2")
+    (version "1.4.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -37,7 +37,7 @@
                     (commit version)))
               (sha256
                (base32
-                "0dgqfp4cbky79vzjrdy3j462l8figymzrk2v0jalmmz3lkxw88ww"))
+                "16jbj8avg5jkgvq5lxm0hdxxn4c3zn7fx8b4nxllvr024apk9w23"))
               (patches (list (search-patch "ath9k-htc-firmware-objcopy.patch")))))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 62d44ec26b..f7d58424d9 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -486,3 +487,84 @@ code-points needed for zh_cn, zh_sg, zh_tw, zh_hk, zh_mo, ja (Japanese) and
 ko (Korean) locales for fontconfig.")
     ;; GPLv2 with font embedding exception
     (license license:gpl2)))
+
+(define-public font-tex-gyre
+  (package
+    (name "font-tex-gyre")
+    (version "2.005")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://www.gust.org.pl/projects/e-foundry/"
+                           "tex-gyre/whole/tg-" version "otf.zip"))
+       (sha256
+        (base32
+         "0kph9l3g7jb2bpmxdbdg5zl56wacmnvdvsdn7is1gc750sqvsn31"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+
+         (let ((unzip    (string-append (assoc-ref %build-inputs "unzip")
+                                        "/bin/unzip"))
+               (font-dir (string-append %output "/share/fonts/opentype")))
+           (mkdir-p font-dir)
+           (system* unzip
+                    (assoc-ref %build-inputs "source")
+                    "-d" font-dir)))))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (home-page "http://www.gust.org.pl/projects/e-foundry/tex-gyre/")
+    (synopsis "Remake of Ghostscript fonts")
+    (description "The TeX Gyre collection of fonts is the result of an
+extensive remake and extension of the freely available base PostScript fonts
+distributed with Ghostscript version 4.00.  The collection contains the
+following fonts in the OpenType format: Adventor, Bonum, Chorus, Cursor,
+Heros, Pagella, Schola, Termes.")
+    (license license:gfl1.0)))
+
+(define-public font-anonymous-pro
+  (package
+    (name "font-anonymous-pro")
+    (version "1.002")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://www.marksimonson.com/assets/content/fonts/"
+                    "AnonymousPro-" version ".zip"))
+              (sha256
+               (base32
+                "1asj6lykvxh46czbal7ymy2k861zlcdqpz8x3s5bbpqwlm3mhrl6"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
+                                     "/bin/unzip"))
+               (font-dir (string-append %output "/share/fonts/truetype"))
+               (doc-dir  (string-append %output "/share/doc/" ,name)))
+           (system* unzip (assoc-ref %build-inputs "source"))
+           (mkdir-p font-dir)
+           (mkdir-p doc-dir)
+           (chdir (string-append "AnonymousPro-" ,version ".001"))
+           (for-each (lambda (ttf)
+                       (copy-file ttf
+                                  (string-append font-dir "/" ttf)))
+                     (find-files "." "\\.ttf$"))
+           (for-each (lambda (doc)
+                       (copy-file doc
+                                  (string-append doc-dir "/" doc)))
+                     (find-files "." "\\.txt$"))))))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (home-page "http://www.marksimonson.com/fonts/view/anonymous-pro")
+    (synopsis "Fixed-width fonts designed with coding in mind")
+    (description "Anonymous Pro is a family of four fixed-width fonts designed
+with coding in mind.  Anonymous Pro features an international, Unicode-based
+character set, with support for most Western and Central European Latin-based
+languages, plus Greek and Cyrillic.")
+    (license license:silofl1.1)))
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index d47766835f..c085fe5770 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -41,6 +41,7 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages m4)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages doxygen)
   #:use-module (gnu packages libffi)
@@ -130,65 +131,56 @@ the freedesktop.org XDG Base Directory specification.")
     (license license:expat)))
 
 (define-public elogind
-  (let ((commit "14405a9"))
-    (package
-      (name "elogind")
-      (version (string-append "219." commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "http://git.elephly.net/software/elogind.git")
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "1wz5lxj95qg64x2q5hf4zcb35hpxlw3wfswx6sb2srvsg50y3y72"))
-                (file-name (string-append name "-checkout-" commit))
-                (modules '((guix build utils)))
-                (snippet
-                 '(begin
-                    (use-modules (guix build utils))
-                    (substitute* "Makefile.am"
-                      ;; Avoid validation against DTD because the DTDs for
-                      ;; both doctype 4.2 and 4.5 are needed.
-                      (("XSLTPROC_FLAGS = ") "XSLTPROC_FLAGS = --novalid"))))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:configure-flags
-         (list
-          ;; pam_elogind fails because of bus-error.c hackery
-          "--disable-pam"
-          (string-append "--with-rootprefix=" (assoc-ref %outputs "out")))
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'autogen
-                      (lambda _
-                        (and (zero? (system* "intltoolize" "--force" "--automake"))
-                             (zero? (system* "autoreconf" "-vif"))))))))
-      (native-inputs
-       `(("intltool" ,intltool)
-         ("gettext" ,gnu-gettext)
-         ("docbook-xsl" ,docbook-xsl)
-         ("docbook-xml" ,docbook-xml)
-         ("xsltproc" ,libxslt)
-         ("libxml2" ,libxml2)                     ;for XML_CATALOG_FILES
-         ("pkg-config", pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("gperf" ,gperf)))
-      (inputs
-       `(("linux-pam" ,linux-pam)
-         ("linux-libre-headers" ,linux-libre-headers)
-         ("libcap" ,libcap)
-         ("dbus" ,dbus)
-         ("eudev" ,eudev)))
-      (home-page "https://github.com/andywingo/elogind")
-      (synopsis "User, seat, and session management service")
-      (description "Elogind is the systemd project's \"logind\" service,
+  (package
+    (name "elogind")
+    (version "219.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://wingolog.org/pub/" name "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "13qc4f0dl7ynnfp1y565z2k0jjizly5w3dqhiqkdk7v6jr4pksb7"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (use-modules (guix build utils))
+                  (substitute* "Makefile.am"
+                    ;; Avoid validation against DTD because the DTDs for
+                    ;; both doctype 4.2 and 4.5 are needed.
+                    (("XSLTPROC_FLAGS = ") "XSLTPROC_FLAGS = --novalid"))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "--with-libcap="
+                            (assoc-ref %build-inputs "libcap"))
+             (string-append "--with-udevrulesdir="
+                            (assoc-ref %outputs "out")
+                            "/lib/udev/rules.d"))
+       #:make-flags '("PKTTYAGENT=/run/current-system/profile/bin/pkttyagent")))
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("gettext" ,gnu-gettext)
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml" ,docbook-xml)
+       ("xsltproc" ,libxslt)
+       ("m4" ,m4)
+       ("libxml2" ,libxml2)                     ;for XML_CATALOG_FILES
+       ("pkg-config", pkg-config)
+       ("gperf" ,gperf)))
+    (inputs
+     `(("linux-pam" ,linux-pam)
+       ("linux-libre-headers" ,linux-libre-headers)
+       ("libcap" ,libcap)
+       ("dbus" ,dbus)
+       ("eudev" ,eudev)))
+    (home-page "https://github.com/andywingo/elogind")
+    (synopsis "User, seat, and session management service")
+    (description "Elogind is the systemd project's \"logind\" service,
 extracted out as a separate project.  Elogind integrates with PAM to provide
 the org.freedesktop.login1 interface over the system bus, allowing other parts
 of a the system to know what users are logged in, and where.")
-      (license license:lgpl2.1+))))
+    (license license:lgpl2.1+)))
 
 (define-public python-pyxdg
   (package
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 26eb4ad9f3..9c918dee35 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -37,7 +37,8 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages sdl)
-  #:use-module (gnu packages pkg-config))
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages xiph))
 
 (define-public bullet
   (package
@@ -66,7 +67,7 @@ is used in some video games and movies.")
 (define-public tiled
   (package
     (name "tiled")
-    (version "0.13.0")
+    (version "0.13.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/bjorn/tiled/archive/v"
@@ -74,7 +75,7 @@ is used in some video games and movies.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1cfdhjwwwnc5fsq53axxyf6vmyy1grkk9ghi58dir68pwf6rlr3n"))))
+                "057a5cna3vhznpl9hyql2sxz995aprv43r8wva89x4vdphxv04lm"))))
     (build-system gnu-build-system)
     (inputs `(("qt" ,qt)
               ("zlib" ,zlib)))
@@ -101,14 +102,14 @@ clone.")
 (define-public sfml
   (package
     (name "sfml")
-    (version "2.2")
+    (version "2.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://mirror0.sfml-dev.org/files/SFML-"
                                   version "-sources.zip"))
               (sha256
                (base32
-                "1xhkvgyfbhqsjdmfbxvk729kdrzh7kdyagxa3bvpzi6z43mh1frd"))))
+                "0mjpkgfnz6ka4p0ir219pcqsbdy7gwcjydk7xxmjjfm2k5sw2qys"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f)) ; no tests
@@ -117,7 +118,10 @@ clone.")
     (inputs
      `(("mesa" ,mesa)
        ("glew" ,glew)
+       ("flac" ,flac)
+       ("libvorbis" ,libvorbis)
        ("libx11" ,libx11)
+       ("xcb-util-image" ,xcb-util-image)
        ("libxrandr" ,libxrandr)
        ("eudev" ,eudev)
        ("freetype" ,freetype)
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index bf261dd993..7eb65bb23b 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -576,7 +576,7 @@ for common mesh file formats, and collision detection.")
 (define minetest-data
   (package
     (name "minetest-data")
-    (version "0.4.12")
+    (version "0.4.13")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -585,7 +585,7 @@ for common mesh file formats, and collision detection.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0642vy6r6sv96mz6wbs9qvyr95vd69zj4fxiljdg9801javrmm9p"))))
+                "04xnyfap75v3p818kpqb07xshqwqzpws5xjvw5m96qnd9x4725ld"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("source" ,source)
@@ -617,7 +617,7 @@ for common mesh file formats, and collision detection.")
 (define-public minetest
   (package
     (name "minetest")
-    (version "0.4.12")
+    (version "0.4.13")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -626,7 +626,7 @@ for common mesh file formats, and collision detection.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1pqp8hfwg5wkimig8j5jrihzgjjgplxr24w5xisrxvx1hlvnczdk"))))
+                "1xzrvsg0fpbj5p4pz6lls11m3ab4y2bnjlsm4gnw68x9006ffznp"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
index 9c0b3ea307..f17b398048 100644
--- a/gnu/packages/gdb.scm
+++ b/gnu/packages/gdb.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -36,33 +36,47 @@
 (define-public gdb
   (package
     (name "gdb")
-    (version "7.9.1")
+    (version "7.10")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/gdb/gdb-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0h5sfg4ndhb8q4fxbq0hdxfjp35n6ih96f6x8yvb418s84x5976d"))))
+               "1a08c9svaihqmz2mm44il1gwa810gmwkckns8b0y0v3qz52amgby"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f ; FIXME "make check" fails on single-processor systems.
-       #:phases (alist-cons-after
-                 'configure 'post-configure
-                 (lambda _
-                   (for-each patch-makefile-SHELL
-                             (find-files "." "Makefile\\.in")))
-                 (alist-cons-after
-                  'install 'post-install
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    ;; Like Binutils, GDB installs libbfd and libopcodes.
-                    ;; However, this leads to collisions when both are
-                    ;; installed, and really is none of its business,
-                    ;; conceptually.  So remove them.
-                    (for-each delete-file
-                              (find-files (assoc-ref outputs "out")
-                                          "^lib(opcodes|bfd)\\.")))
-                  %standard-phases))))
+     `(#:tests? #f ; FIXME "make check" fails on single-processor systems.
+
+       #:modules ((srfi srfi-1)
+                  ,@%gnu-build-system-modules)
+
+       #:phases (modify-phases %standard-phases
+                  (add-after
+                   'configure 'post-configure
+                   (lambda _
+                     (for-each patch-makefile-SHELL
+                               (find-files "." "Makefile\\.in"))))
+                  (add-after
+                   'install 'remove-libs-already-in-binutils
+                   (lambda* (#:key inputs outputs #:allow-other-keys)
+                     ;; Like Binutils, GDB installs libbfd, libopcodes, etc.
+                     ;; However, this leads to collisions when both are
+                     ;; installed, and really is none of its business,
+                     ;; conceptually.  So remove them.
+                     (let* ((binutils (assoc-ref inputs "binutils"))
+                            (out      (assoc-ref outputs "out"))
+                            (files1   (with-directory-excursion binutils
+                                        (append (find-files "lib")
+                                                (find-files "include"))))
+                            (files2   (with-directory-excursion out
+                                        (append (find-files "lib")
+                                                (find-files "include"))))
+                            (common   (lset-intersection string=?
+                                                         files1 files2)))
+                       (with-directory-excursion out
+                         (for-each delete-file common)
+                         #t)))))))
     (inputs
      `(("expat" ,expat)
        ("mpfr" ,mpfr)
diff --git a/gnu/packages/geeqie.scm b/gnu/packages/geeqie.scm
index ff45bda8c4..a192c4b009 100644
--- a/gnu/packages/geeqie.scm
+++ b/gnu/packages/geeqie.scm
@@ -25,8 +25,7 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
-  #:use-module ((gnu packages ghostscript)
-                #:select (lcms))
+  #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages xml))
 
diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm
index 6be3093bd6..f1b0221629 100644
--- a/gnu/packages/gettext.scm
+++ b/gnu/packages/gettext.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,11 +19,15 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages gettext)
-  #:use-module ((guix licenses) #:select (gpl3+))
+  #:use-module ((guix licenses) #:select (gpl2+ gpl3+))
   #:use-module (gnu packages)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system perl)
+  #:use-module (gnu packages docbook)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages texlive)
   #:use-module (gnu packages xml))
 
 ;; Use that name to avoid clashes with Guile's 'gettext' procedure.
@@ -91,3 +96,59 @@ with the means to create message catalogs, as well as an Emacs mode to work
 with them, and a runtime library to load translated messages from the
 catalogs.  Nearly all GNU packages use Gettext.")
     (license gpl3+)))                             ;some files are under GPLv2+
+
+(define-public po4a
+  (package
+    (name "po4a")
+    (version "0.47")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://alioth.debian.org/frs/download.php"
+                                  "/file/4142/po4a-" version ".tar.gz"))
+              (sha256
+               (base32
+                "01vm0750aq0h2lphrflv3wq9gz7y0py8frglfpacn58ivyvy242h"))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; FIXME: One test fails as we don't have SGMLS.pm
+         (add-before 'check 'disable-sgml-test
+          (lambda _
+            (delete-file "t/20-sgml.t")
+            #t))
+         (add-after 'unpack 'fix-builder
+          (lambda* (#:key inputs outputs #:allow-other-keys)
+            (substitute* "Po4aBuilder.pm"
+              ;; By default it tries to install into perl's manpath.
+              (("my \\$mandir = .*$")
+               (string-append "my $mandir = \"" (assoc-ref outputs "out")
+                              "/share/man\";\n")))
+            #t))
+         (add-after 'install 'wrap-programs
+          (lambda* (#:key outputs #:allow-other-keys)
+            ;; Make sure all executables in "bin" find the Perl modules
+            ;; provided by this package at runtime.
+            (let* ((out  (assoc-ref outputs "out"))
+                   (bin  (string-append out "/bin/"))
+                   (path (string-append out "/lib/perl5/site_perl")))
+              (for-each (lambda (file)
+                          (wrap-program file
+                            `("PERL5LIB" ":" prefix (,path))))
+                        (find-files bin "\\.*$"))
+              #t))))))
+    (native-inputs
+     `(("gettext" ,gnu-gettext)
+       ("perl-module-build" ,perl-module-build)
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml" ,docbook-xml) ;for tests
+       ("texlive-bin" ,texlive-bin) ;for tests
+       ("libxml2" ,libxml2)
+       ("xsltproc" ,libxslt)))
+    (home-page "http://po4a.alioth.debian.org/")
+    (synopsis "Scripts to ease maintenance of translations")
+    (description
+     "The po4a (PO for anything) project goal is to ease translations (and
+more interestingly, the maintenance of translations) using gettext tools on
+areas where they were not expected like documentation.")
+    (license gpl2+)))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index e4ab166700..ca75fa82e0 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -1912,15 +1912,15 @@ library.")
 library.")
     (license license:lgpl2.0+)))
 
-(define-public librest
+(define-public rest
   (package
-    (name "librest")
+    (name "rest")
     (version "0.7.93")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/rest/"
-                                  (version-major+minor version)  "/"
-                                  "rest-" version ".tar.xz"))
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
               (sha256
                (base32
                 "05mj10hhiik23ai8w4wkk5vhsp7hcv24bih5q3fl82ilam268467"))))
@@ -2629,6 +2629,8 @@ without stepping on each others toes.")
         (base32
          "1b0ikh9q3c3qnny3kbvhqih35449q8ajcbh7zkm8k3kykwfx4scf"))))
     (build-system gnu-build-system)
+    (outputs '("out"
+               "doc"))                            ;9 MiB of gtk-doc HTML pages
     (native-inputs
      `(("glib:bin" ,glib "bin")     ; for glib-genmarshal
        ("gobject-introspection" ,gobject-introspection)
@@ -2649,7 +2651,12 @@ without stepping on each others toes.")
      `(("libxkbcommon" ,libxkbcommon)
        ("udev" ,eudev)))
     (arguments
-     `(#:configure-flags '("--enable-x11-backend=yes")
+     `(#:configure-flags (list "--enable-x11-backend=yes"
+
+                               ;; This produces share/doc/{clutter,cally}.
+                               (string-append "--with-html-dir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/doc"))
        ;; XXX FIXME: Get test suite working.  It would probably fail in the
        ;; same way the cogl tests fail, since clutter is based on cogl.
        #:tests? #f))
@@ -2720,6 +2727,38 @@ implements the ClutterGstPlayer interface using playbin.  Clutter is an Open
 GL based interactive canvas library.")
     (license license:lgpl2.0+)))
 
+(define-public libchamplain
+  (package
+    (name "libchamplain")
+    (version "0.12.10")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://gnome/sources/libchamplain/0.12/libchamplain-"
+                    version ".tar.xz"))
+              (sha256
+               (base32
+                "019b8scnx7d3wdylmpk9ihzh06w25b63x9cn8nhj6kjx82rcwlxz"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (propagated-inputs
+     `(("libsoup" ,libsoup)
+       ("sqlite" ,sqlite)
+       ("clutter" ,clutter)
+       ("clutter-gtk" ,clutter-gtk)
+       ("glib:bin" ,glib "bin")                   ;glib-mkenums, etc.
+       ("cairo" ,cairo)
+       ("gtk+3" ,gtk+)
+       ("glib" ,glib)))
+    (home-page "http://projects.gnome.org/libchamplain/")
+    (synopsis "C library providing a ClutterActor to display maps")
+    (description
+     "libchamplain is a C library providing a ClutterActor to display maps.
+It also provides a Gtk+ widget to display maps in Gtk+ applications.  Python
+and Perl bindings are also available.  It supports numerous free map sources
+such as OpenStreetMap, OpenCycleMap, OpenAerialMap, and Maps for free.")
+    (license license:lgpl2.1+)))
+
 (define-public gom
   (package
     (name "gom")
@@ -3371,3 +3410,93 @@ principles are simplicity and standards compliance.")
      "D-Feet is a D-Bus debugger, which can be used to inspect D-Bus interfaces
 of running programs and invoke methods on those interfaces.")
     (license license:gpl2+)))
+
+(define-public yelp-xsl
+  (package
+    (name "yelp-xsl")
+    (version "3.16.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0jhpni4mmfvj3xf57rjm61nc8d0x66hz9gd1ywws5lh39g6fx59j"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("itstool" ,itstool)
+       ("xmllint" ,libxml2)))
+    (home-page "https://wiki.gnome.org/Apps/Yelp")
+    (synopsis "XSL stylesheets for Yelp")
+    (description
+     "Yelp-xsl contains XSL stylesheets that are used by the yelp help browser
+to format Docbook and Mallard documents.")
+    (license license:gpl2+)))
+
+(define-public yelp
+  (package
+    (name "yelp")
+    (version "3.16.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1jk7aad1srykhgc3x0hd3q3dnlshmy1ak00alwjzaasxvy6hp0b0"))))
+    (build-system glib-or-gtk-build-system)
+    (native-inputs
+     `(("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
+       ("intltool" ,intltool)
+       ("itstool" ,itstool)
+       ("pkg-config" ,pkg-config)))
+    (propagated-inputs
+     `(("dconf" ,dconf)))
+    (inputs
+     `(("libxslt" ,libxslt)
+       ("sqlite" ,sqlite)
+       ("webkitgtk" ,webkitgtk-2.4)
+       ("yelp-xsl" ,yelp-xsl)
+       ;; XXX: need by libwebkitgtk-3.0.la.
+       ("icu4c" ,(@ (gnu packages icu4c) icu4c))))
+    (home-page "https://wiki.gnome.org/Apps/Yelp")
+    (synopsis "GNOME help browser")
+    (description
+     "Yelp is the help viewer in Gnome.  It natively views Mallard, DocBook,
+man, info, and HTML documents.  It can locate documents according to the
+freedesktop.org help system specification.")
+    (license license:gpl2+)))
+
+(define-public yelp-tools
+  (package
+    (name "yelp-tools")
+    (version "3.16.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "177qzvj5w019isdp41qxqcys2kc4sq2x6dqhqn6l9ipib8a6rxml"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (propagated-inputs
+     ;; Needed by `yelp-build', `yelp-check' or 'yelp.m4'.
+     `(("itstool" ,itstool)
+       ("xmllint" ,libxml2)
+       ("xsltproc" ,libxslt)))
+    (inputs
+     `(("yelp-xsl" ,yelp-xsl)))
+    (home-page "https://wiki.gnome.org/Apps/Yelp/Tools")
+    (synopsis "Yelp documentation tools")
+    (description
+     "Yelp-tools is a collection of scripts and build utilities to help create,
+manage, and publish documentation for Yelp and the web.  Most of the heavy
+lifting is done by packages like yelp-xsl and itstool.  This package just
+wraps things up in a developer-friendly way.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/gnucash.scm b/gnu/packages/gnucash.scm
index 6ab8f09ce6..42d19af8f4 100644
--- a/gnu/packages/gnucash.scm
+++ b/gnu/packages/gnucash.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,7 +28,9 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages icu4c)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages xml))
 
@@ -42,11 +45,9 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "103ir5qg6k8m2mmg9b99c3gn8myxh1gsqyr0mfhmrhqya68wfdr3"))))
+        "103ir5qg6k8m2mmg9b99c3gn8myxh1gsqyr0mfhmrhqya68wfdr3"))
+      (patches (list (search-patch "gnucash-price-quotes-perl.patch")))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:tests? #f ;FIXME: failing at /qof/gnc-date/qof print date dmy buff
-       #:configure-flags '("--disable-dbi")))
     (inputs
      `(("guile" ,guile-2.0)
        ("icu4c" ,icu4c)
@@ -56,11 +57,46 @@
        ("libgnomecanvas" ,libgnomecanvas)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
-       ("webkitgtk" ,webkitgtk/gtk+-2)))
+       ("webkitgtk" ,webkitgtk/gtk+-2)
+       ("perl-date-manip" ,perl-date-manip)
+       ("perl-finance-quote" ,perl-finance-quote)))
     (native-inputs
      `(("glib" ,glib "bin") ; glib-compile-schemas, etc.
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
+    (arguments
+     `(#:tests? #f ;FIXME: failing at /qof/gnc-date/qof print date dmy buff
+       #:configure-flags '("--disable-dbi")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after
+          'install 'wrap-programs
+          (lambda* (#:key inputs outputs #:allow-other-keys)
+            (for-each (lambda (prog)
+                        (wrap-program (string-append (assoc-ref outputs "out")
+                                                     "/bin/" prog)
+                          `("PERL5LIB" ":" prefix
+                            ,(map (lambda (o)
+                                    (string-append o "/lib/perl5/site_perl/"
+                                                   ,(package-version perl)))
+                                  (if (string=? prog "gnc-fq-helper")
+                                      (list
+                                       ,@(transitive-input-references
+                                          'inputs
+                                          (map (lambda (l)
+                                                 (assoc l (inputs)))
+                                               '("perl-finance-quote"
+                                                 "perl-date-manip"))))
+                                      (list
+                                       ,@(transitive-input-references
+                                          'inputs
+                                          (map (lambda (l)
+                                                 (assoc l (inputs)))
+                                               '("perl-finance-quote")))))))))
+                      '("gnucash"
+                        "gnc-fq-check"
+                        "gnc-fq-helper"
+                        "gnc-fq-dump")))))))
     (home-page "https://gnu.org/software/gnucash")
     (synopsis "Personal and small business financial accounting software")
     (description
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index b66eec3843..58826176d5 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -193,14 +193,14 @@ compatible to GNU Pth.")
 (define-public gnupg
   (package
     (name "gnupg")
-    (version "2.1.7")
+    (version "2.1.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
                                   ".tar.bz2"))
               (sha256
                (base32
-                "0vl4wzraln0h4db0kfza4l5by5pgfijqplji5n4riv3zsiv3g2n1"))))
+                "18w14xp0ynzzwpklyplkzbrncds1hly4k2gjx115swch8qgd1f53"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 717388ba00..920da6c864 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -203,7 +203,7 @@ for the GStreamer multimedia library.")
        ("flac" ,flac)
        ("gdk-pixbuf" ,gdk-pixbuf)
        ("gst-plugins-base" ,gst-plugins-base)
-       ("jack" ,jack-2)
+       ("jack" ,jack-1)
        ("libavc1394" ,libavc1394)
        ("libcaca" ,libcaca)
        ("libdv" ,libdv)
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 42ca2b1af6..79f3276ba8 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -33,6 +33,8 @@
   #:use-module (guix build-system waf)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages docbook)
@@ -632,6 +634,92 @@ graphics library with all of the benefits of Scheme: memory management,
 exceptions, macros, and a dynamic programming environment.")
     (license license:lgpl3+)))
 
+(define-public guile-rsvg
+  (package
+    (name "guile-rsvg")
+    (version "2.18.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://wingolog.org/pub/guile-rsvg/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "136f236iw3yrrz6pkkp1ma9c5mrs5icqha6pnawinqpk892r3jh7"))
+              (patches (list (search-patch "guile-rsvg-pkgconfig.patch")))
+              (modules '((guix build utils)))
+              (snippet
+               '(substitute* (find-files "." "Makefile\\.am")
+                  (("/share/guile/site")
+                   "/share/guile/site/2.0")))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-before 'configure 'bootstrap
+                              (lambda _
+                                (zero? (system* "autoreconf" "-vfi")))))))
+    (native-inputs `(("pkg-config" ,pkg-config)
+                     ("autoconf" ,autoconf)
+                     ("automake" ,automake)
+                     ("libtool" ,libtool)
+                     ("texinfo" ,texinfo)))
+    (inputs `(("guile" ,guile-2.0)
+              ("librsvg" ,librsvg)
+              ("guile-lib" ,guile-lib)))          ;for (unit-test)
+    (propagated-inputs `(("guile-cairo" ,guile-cairo)))
+    (synopsis "Render SVG images using Cairo from Guile")
+    (description
+     "Guile-RSVG wraps the RSVG library for Guile, allowing you to render SVG
+images onto Cairo surfaces.")
+    (home-page "http://wingolog.org/projects/guile-rsvg/")
+    (license license:lgpl2.1+)))
+
+(define-public guile-present
+  (package
+    (name "guile-present")
+    (version "0.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://wingolog.org/pub/guile-present/"
+                                  "guile-present-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1qam447m05sxxv6x8dlzg7qnyfc4dh8apjw1idpfhpns671gfr6m"))
+              (patches (list (search-patch "guile-present-coding.patch")))
+              (modules '((guix build utils)))
+              (snippet
+               '(substitute* "Makefile.in"
+                  (("godir = .*$")
+                   "godir = $(moddir)\n")))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases (alist-cons-after
+                 'install 'post-install
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (let* ((out   (assoc-ref outputs "out"))
+                          (bin   (string-append out "/bin"))
+                          (guile (assoc-ref inputs "guile")))
+                     (substitute* (find-files bin ".*")
+                       (("guile")
+                        (string-append guile "/bin/guile -L "
+                                       out "/share/guile/site/2.0 -C "
+                                       out "/share/guile/site/2.0 ")))))
+                 %standard-phases)))
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs `(("guile" ,guile-2.0)))
+    (propagated-inputs
+     ;; These are used by the (present …) modules.
+     `(("guile-lib" ,guile-lib)
+       ("guile-cairo" ,guile-cairo)
+       ("guile-rsvg" ,guile-rsvg)))
+    (home-page "http://wingolog.org/software/guile-present/")
+    (synopsis "Create SVG or PDF presentations in Guile")
+    (description
+     "Guile-Present defines a declarative vocabulary for presentations,
+together with tools to render presentation documents as SVG or PDF.
+Guile-Present can be used to make presentations programmatically, but also
+includes a tools to generate PDF presentations out of Org mode and Texinfo
+documents.")
+    (license license:lgpl3+)))
 
 ;;;
 ;;; C++ bindings.
diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
index 1abe70a1ab..38db959d94 100644
--- a/gnu/packages/ibus.scm
+++ b/gnu/packages/ibus.scm
@@ -24,6 +24,10 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
@@ -34,14 +38,15 @@
 (define-public ibus
   (package
    (name "ibus")
-   (version "1.5.5")
+   (version "1.5.11")
    (source (origin
              (method url-fetch)
-             (uri (string-append "https://ibus.googlecode.com/files/ibus-"
-                                 version ".tar.gz"))
+             (uri (string-append "https://github.com/ibus/ibus/"
+                                 "releases/download/"
+                                 version "/ibus-" version ".tar.gz"))
              (sha256
               (base32
-               "1v4a9xv2k26g6ggk4282ynfvh68j2r5hg1cdpvnryfa8c2pkdaq2"))))
+               "1g26llizd26h9sfz4xdq8krhz19hn08pirvfbkk3g89ri8lmm6a9"))))
    (build-system glib-or-gtk-build-system)
    (arguments
     `(#:tests? #f  ; tests fail because there's no connection to dbus
@@ -49,6 +54,9 @@
       (list "CC=gcc"
             (string-append "pyoverridesdir="
                            (assoc-ref %outputs "out")
+                           "/lib/python2.7/site-packages/gi/overrides/")
+            (string-append "py2overridesdir="
+                           (assoc-ref %outputs "out")
                            "/lib/python2.7/site-packages/gi/overrides/"))
       #:phases
       (alist-cons-before
@@ -83,6 +91,10 @@
     `(("glib" ,glib "bin") ; for glib-genmarshal
       ("gobject-introspection" ,gobject-introspection) ; for g-ir-compiler
       ("pkg-config" ,pkg-config)))
+   (native-search-paths
+    (list (search-path-specification
+           (variable "IBUS_COMPONENT_PATH")
+           (files '("share/ibus/component")))))
    (synopsis "Input method framework")
    (description
     "IBus is an input framework providing a full-featured and user-friendly
@@ -90,3 +102,103 @@ input method user interface.  It comes with multilingual input support.  It
 may also simplify input method development.")
    (home-page "http://ibus.googlecode.com/")
    (license lgpl2.1+)))
+
+(define-public ibus-libpinyin
+  (package
+   (name "ibus-libpinyin")
+   (version "1.7.2")
+   (source (origin
+             (method url-fetch)
+             (uri (string-append "https://github.com/libpinyin/"
+                                 "ibus-libpinyin/archive/" version ".tar.gz"))
+             (file-name (string-append name "-" version ".tar.gz"))
+             (sha256
+              (base32
+               "080ixx5lih9lr78b061y67dqmiyc7ij87jl1sa26hhs1dr28ihka"))))
+   (build-system glib-or-gtk-build-system)
+   (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'autogen
+          (lambda _ (and (zero? (system* "intltoolize"))
+                         (zero? (system* "autoreconf" "-vif")))))
+         (add-after 'wrap-program 'wrap-with-additional-paths
+          (lambda* (#:key inputs outputs #:allow-other-keys)
+            ;; Make sure 'ibus-setup-libpinyin' runs with the correct
+            ;; PYTHONPATH and GI_TYPELIB_PATH.
+            (let ((out (assoc-ref outputs "out")))
+              (wrap-program (string-append out "/libexec/ibus-setup-libpinyin")
+                `("PYTHONPATH" ":" prefix
+                  (,(getenv "PYTHONPATH")
+                   ,(string-append (assoc-ref inputs "ibus")
+                                   "/lib/girepository-1.0")))
+                `("GI_TYPELIB_PATH" ":" prefix
+                  (,(string-append (assoc-ref inputs "ibus")
+                                   "/lib/girepository-1.0"))))
+              #t))))))
+   (inputs
+    `(("ibus" ,ibus)
+      ("libpinyin" ,libpinyin)
+      ("bdb" ,bdb)
+      ("sqlite" ,sqlite)
+      ("python" ,python-2)
+      ("pyxdg" ,python2-pyxdg)))
+   (native-inputs
+    `(("pkg-config" ,pkg-config)
+      ("intltool" ,intltool)
+      ("autoconf" ,autoconf)
+      ("automake" ,automake)
+      ("libtool" ,libtool)))
+   (synopsis "Chinese Pinyin and ZhuYin input methods for IBus")
+   (description
+    "This package includes a Chinese Pinyin input method and a Chinese
+ZhuYin (Bopomofo) input method based on libpinyin for IBus.")
+   (home-page "https://github.com/libpinyin/ibus-libpinyin")
+   (license gpl2+)))
+
+(define-public libpinyin
+  (package
+    (name "libpinyin")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/libpinyin/libpinyin/archive/"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "04didxd39vlry6nqy7xqynwc68ndajnhw334wahfmp7zjbbscs7p"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'autogen
+          (lambda _ (zero? (system* "autoreconf" "-vif"))))
+         (add-after 'unpack 'unpack-model
+          (lambda* (#:key inputs #:allow-other-keys)
+            (zero? (system* "tar" "-xvf"
+                            (assoc-ref inputs "model")
+                            "-C" "data")))))))
+    (inputs
+     `(("glib" ,glib)
+       ("bdb" ,bdb)
+       ("model"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append "mirror://sourceforge/libpinyin/"
+                               "models/model10.text.tar.gz"))
+           (sha256
+            (base32
+             "0g489wqcfklxphhxpkh8i4qf9y8scmnmdbfrzdbrgf3rignbwyiw"))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)))
+    (synopsis "Library to handle Chinese Pinyin")
+    (description
+     "The libpinyin C++ library provides algorithms needed for sentence-based
+Chinese pinyin input methods.")
+    (home-page "https://github.com/libpinyin/libpinyin")
+    (license gpl2+)))
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 76f73e03ca..cee7f146fa 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -31,6 +31,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
+  #:use-module (gnu packages graphics)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -132,7 +133,7 @@ Included are a library, libtiff, for reading and writing TIFF and a small
 collection of tools for doing simple manipulations of TIFF images.")
    (license (license:non-copyleft "file://COPYRIGHT"
                                   "See COPYRIGHT in the distribution."))
-   (home-page "http://www.libtiff.org/")))
+   (home-page "http://www.remotesensing.org/libtiff/")))
 
 (define-public libwmf
   (package
@@ -508,9 +509,12 @@ graphics image formats like PNG, BMP, JPEG, TIFF and others.")
       ("fftw" ,fftw)
       ("fftwf" ,fftwf)
       ("hdf5" ,hdf5)
+      ("ilmbase" ,ilmbase) ; propagated by openexr, but needed explicitly
+                           ; to create a configure-flag
       ("libjpeg" ,libjpeg)
       ("libpng" ,libpng)
       ("libtiff" ,libtiff)
+      ("openexr" ,openexr)
       ("python" ,python-2) ; print syntax
       ("python2-numpy" ,python2-numpy)
       ("zlib" ,zlib)))
@@ -524,7 +528,15 @@ graphics image formats like PNG, BMP, JPEG, TIFF and others.")
         (list "-Wno-dev" ; suppress developer mode with lots of warnings
               (string-append "-DVIGRANUMPY_INSTALL_DIR="
                              (assoc-ref %outputs "out")
-                             "/lib/python2.7/site-packages"))))
+                             "/lib/python2.7/site-packages")
+              ;; OpenEXR is not enabled by default.
+              "-DWITH_OPENEXR=1"
+              ;; The header files of ilmbase are not found when included
+              ;; by the header files of openexr, and an explicit flag
+              ;; needs to be set.
+              (string-append "-DCMAKE_CXX_FLAGS=-I"
+                             (assoc-ref %build-inputs "ilmbase")
+                             "/include/OpenEXR"))))
    (synopsis "Computer vision library")
    (description
     "VIGRA stands for Vision with Generic Algorithms.  It is an image
diff --git a/gnu/packages/libcanberra.scm b/gnu/packages/libcanberra.scm
index 0ffae1f674..3769e3fe21 100644
--- a/gnu/packages/libcanberra.scm
+++ b/gnu/packages/libcanberra.scm
@@ -18,7 +18,8 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages libcanberra)
-  #:use-module ((guix licenses) #:select (lgpl2.1+))
+  #:use-module ((guix licenses)
+                #:select (lgpl2.1+ gpl2 gpl2+ cc-by-sa4.0 cc-by3.0))
   #:use-module (gnu packages)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -112,5 +113,8 @@ null) and is designed to be portable.")
     (description
      "This package provides audio samples that can be used by libcanberra as
 sounds for various system events.")
-    (license #f)
+
+    ;; The license of the various sounds is given in the 'CREDITS' file.
+    (license (list cc-by-sa4.0 cc-by3.0 gpl2 gpl2+))
+
     (home-page "http://www.freedesktop.org/wiki/Specifications/sound-theme-spec/")))
diff --git a/gnu/packages/libedit.scm b/gnu/packages/libedit.scm
index 1d7b5b6a5f..a1a1ac6bb5 100644
--- a/gnu/packages/libedit.scm
+++ b/gnu/packages/libedit.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,7 +27,7 @@
 (define-public libedit
   (package
     (name "libedit")
-    (version "20141030-3.1")
+    (version "20150325-3.1")
     (source
      (origin
       (method url-fetch)
@@ -34,8 +35,9 @@
                           "/" name "-" version ".tar.gz"))
       (sha256
        (base32
-        "0h2svwfcdldpbg0fy7fnkld706r2a9k9h1mm0yj7z3zvf1jy20cp"))))
+        "1if8zi9h52m80ck796an28rrqfljk2n8cn25m3fl0prwz155x2n8"))))
     (build-system gnu-build-system)
+    (arguments `(#:configure-flags (list "--enable-widec")))
     (inputs
      `(("ncurses" ,ncurses)))
     (home-page "http://thrysoee.dk/editline/")
diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm
index 86a59befdd..e7f5b8b119 100644
--- a/gnu/packages/libusb.scm
+++ b/gnu/packages/libusb.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,9 +26,13 @@
   #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system glib-or-gtk)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages pkg-config))
+  #:use-module (gnu packages mp3)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages xiph))
 
 (define-public libusb
   (package
@@ -116,3 +121,37 @@ proposed for standardization.")
     ;; Foundation; either version 2 of the License, or (at your option) any
     ;; later version."
     (license lgpl2.1+)))
+
+(define-public gmtp
+  (package
+    (name "gmtp")
+    (version "1.3.9")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/gmtp/" version
+                                  "/gmtp-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0bdxvi0jf3q870a39xzsaj4qrjwc9b5bgvc95plc7xb6vf2m7zsv"))))
+    (build-system glib-or-gtk-build-system)
+    (arguments
+     '(#:configure-flags
+       (let ((libid3tag (assoc-ref %build-inputs "libid3tag")))
+         (list
+          ;; libid3tag provides no .pc file, so pkg-config fails to find them.
+          (string-append "ID3TAG_CFLAGS=-I" libid3tag "/include")
+          (string-append "ID3TAG_LIBS=-L" libid3tag "/lib -lid3tag -lz")))))
+    (inputs
+     `(("gtk+" ,gtk+)
+       ("flac" ,flac)
+       ("libvorbis" ,libvorbis)
+       ("libid3tag" ,libid3tag)
+       ("libmtp" ,libmtp)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://gmtp.sourceforge.net/")
+    (synopsis "Simple graphical MTP client")
+    (description "gMTP is a simple graphical client for the Media Transfer Protocol
+  (MTP), which allows media files to be transferred to and from many portable
+devices.")
+    (license bsd-3)))
diff --git a/gnu/packages/linux-libre-i686.conf b/gnu/packages/linux-libre-i686.conf
index a37225541e..7b17f7b7c3 100644
--- a/gnu/packages/linux-libre-i686.conf
+++ b/gnu/packages/linux-libre-i686.conf
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 4.1.0-gnu Kernel Configuration
+# Linux/x86 4.2.0-gnu Kernel Configuration
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
@@ -34,7 +34,6 @@ CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
 CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
 CONFIG_HAVE_INTEL_TXT=y
 CONFIG_X86_32_SMP=y
-CONFIG_X86_HT=y
 CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
 CONFIG_ARCH_SUPPORTS_UPROBES=y
 CONFIG_FIX_EARLYCON_MEM=y
@@ -83,11 +82,12 @@ CONFIG_AUDIT_TREE=y
 #
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_GENERIC_IRQ_LEGACY_ALLOC_HWIRQ=y
 CONFIG_GENERIC_PENDING_IRQ=y
 CONFIG_GENERIC_IRQ_CHIP=y
 CONFIG_IRQ_DOMAIN=y
+CONFIG_IRQ_DOMAIN_HIERARCHY=y
 CONFIG_GENERIC_MSI_IRQ=y
+CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
 # CONFIG_IRQ_DOMAIN_DEBUG is not set
 CONFIG_IRQ_FORCED_THREADING=y
 CONFIG_SPARSE_IRQ=y
@@ -126,15 +126,11 @@ CONFIG_TASK_IO_ACCOUNTING=y
 # RCU Subsystem
 #
 CONFIG_TREE_RCU=y
+# CONFIG_RCU_EXPERT is not set
 CONFIG_SRCU=y
 # CONFIG_TASKS_RCU is not set
 CONFIG_RCU_STALL_COMMON=y
-CONFIG_RCU_FANOUT=32
-CONFIG_RCU_FANOUT_LEAF=16
-# CONFIG_RCU_FANOUT_EXACT is not set
-CONFIG_RCU_FAST_NO_HZ=y
 # CONFIG_TREE_RCU_TRACE is not set
-CONFIG_RCU_KTHREAD_PRIO=0
 # CONFIG_RCU_NOCB_CPU is not set
 # CONFIG_RCU_EXPEDITE_BOOT is not set
 CONFIG_BUILD_BIN2C=y
@@ -162,6 +158,7 @@ CONFIG_CFS_BANDWIDTH=y
 # CONFIG_RT_GROUP_SCHED is not set
 CONFIG_BLK_CGROUP=y
 # CONFIG_DEBUG_BLK_CGROUP is not set
+CONFIG_CGROUP_WRITEBACK=y
 CONFIG_CHECKPOINT_RESTORE=y
 CONFIG_NAMESPACES=y
 CONFIG_UTS_NS=y
@@ -251,6 +248,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_ATTRS=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
 CONFIG_HAVE_DMA_API_DEBUG=y
@@ -278,6 +276,7 @@ CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
 CONFIG_HAVE_ARCH_HUGE_VMAP=y
 CONFIG_MODULES_USE_ELF_REL=y
 CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
+CONFIG_HAVE_COPY_THREAD_TLS=y
 CONFIG_CLONE_BACKWARDS=y
 CONFIG_OLD_SIGSUSPEND3=y
 CONFIG_OLD_SIGACTION=y
@@ -299,6 +298,7 @@ CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_SIG is not set
 # CONFIG_MODULE_COMPRESS is not set
+CONFIG_MODULES_TREE_LOOKUP=y
 CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 CONFIG_LBDAF=y
@@ -312,13 +312,7 @@ CONFIG_BLK_CMDLINE_PARSER=y
 # Partition Types
 #
 CONFIG_PARTITION_ADVANCED=y
-CONFIG_ACORN_PARTITION=y
-CONFIG_ACORN_PARTITION_CUMANA=y
-CONFIG_ACORN_PARTITION_EESOX=y
-CONFIG_ACORN_PARTITION_ICS=y
-CONFIG_ACORN_PARTITION_ADFS=y
-CONFIG_ACORN_PARTITION_POWERTEC=y
-CONFIG_ACORN_PARTITION_RISCIX=y
+# CONFIG_ACORN_PARTITION is not set
 CONFIG_AIX_PARTITION=y
 CONFIG_OSF_PARTITION=y
 CONFIG_AMIGA_PARTITION=y
@@ -353,7 +347,6 @@ CONFIG_DEFAULT_IOSCHED="deadline"
 CONFIG_PREEMPT_NOTIFIERS=y
 CONFIG_PADATA=y
 CONFIG_ASN1=y
-CONFIG_UNINLINE_SPIN_UNLOCK=y
 CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
 CONFIG_INLINE_READ_UNLOCK=y
 CONFIG_INLINE_READ_UNLOCK_IRQ=y
@@ -363,8 +356,10 @@ CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
 CONFIG_MUTEX_SPIN_ON_OWNER=y
 CONFIG_RWSEM_SPIN_ON_OWNER=y
 CONFIG_LOCK_SPIN_ON_OWNER=y
-CONFIG_ARCH_USE_QUEUE_RWLOCK=y
-CONFIG_QUEUE_RWLOCK=y
+CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y
+CONFIG_QUEUED_SPINLOCKS=y
+CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
+CONFIG_QUEUED_RWLOCKS=y
 CONFIG_FREEZER=y
 
 #
@@ -541,7 +536,9 @@ CONFIG_ZSMALLOC=y
 CONFIG_PGTABLE_MAPPING=y
 # CONFIG_ZSMALLOC_STAT is not set
 CONFIG_GENERIC_EARLY_IOREMAP=y
-# CONFIG_X86_PMEM_LEGACY is not set
+CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y
+# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
+CONFIG_X86_PMEM_LEGACY=y
 CONFIG_HIGHPTE=y
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
@@ -612,6 +609,7 @@ CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
 CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y
 CONFIG_ACPI_SLEEP=y
 # CONFIG_ACPI_PROCFS_POWER is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
 CONFIG_ACPI_EC_DEBUGFS=m
 CONFIG_ACPI_AC=y
 CONFIG_ACPI_BATTERY=y
@@ -638,6 +636,8 @@ CONFIG_ACPI_HED=y
 # CONFIG_ACPI_CUSTOM_METHOD is not set
 CONFIG_ACPI_BGRT=y
 # CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
+CONFIG_ACPI_NFIT=m
+# CONFIG_ACPI_NFIT_DEBUG is not set
 CONFIG_HAVE_ACPI_APEI=y
 CONFIG_HAVE_ACPI_APEI_NMI=y
 CONFIG_ACPI_APEI=y
@@ -738,7 +738,9 @@ CONFIG_PCIEASPM_DEFAULT=y
 # CONFIG_PCIEASPM_POWERSAVE is not set
 # CONFIG_PCIEASPM_PERFORMANCE is not set
 CONFIG_PCIE_PME=y
+CONFIG_PCI_BUS_ADDR_T_64BIT=y
 CONFIG_PCI_MSI=y
+CONFIG_PCI_MSI_IRQ_DOMAIN=y
 # CONFIG_PCI_DEBUG is not set
 CONFIG_PCI_REALLOC_ENABLE_AUTO=y
 CONFIG_PCI_STUB=m
@@ -826,6 +828,7 @@ CONFIG_COREDUMP=y
 CONFIG_HAVE_ATOMIC_IOMAP=y
 CONFIG_PMC_ATOM=y
 CONFIG_NET=y
+CONFIG_NET_INGRESS=y
 
 #
 # Networking options
@@ -869,7 +872,7 @@ CONFIG_NET_IPVTI=m
 CONFIG_NET_UDP_TUNNEL=m
 CONFIG_NET_FOU=m
 CONFIG_NET_FOU_IP_TUNNELS=y
-CONFIG_GENEVE=m
+CONFIG_GENEVE_CORE=m
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
@@ -896,6 +899,7 @@ CONFIG_TCP_CONG_VENO=m
 CONFIG_TCP_CONG_YEAH=m
 CONFIG_TCP_CONG_ILLINOIS=m
 CONFIG_TCP_CONG_DCTCP=m
+CONFIG_TCP_CONG_CDG=m
 CONFIG_DEFAULT_CUBIC=y
 # CONFIG_DEFAULT_RENO is not set
 CONFIG_DEFAULT_TCP_CONG="cubic"
@@ -937,6 +941,7 @@ CONFIG_BRIDGE_NETFILTER=m
 #
 # Core Netfilter Configuration
 #
+CONFIG_NETFILTER_INGRESS=y
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_NETLINK_ACCT=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
@@ -984,6 +989,7 @@ CONFIG_NF_NAT_REDIRECT=m
 CONFIG_NETFILTER_SYNPROXY=m
 CONFIG_NF_TABLES=m
 CONFIG_NF_TABLES_INET=m
+CONFIG_NF_TABLES_NETDEV=m
 CONFIG_NFT_EXTHDR=m
 CONFIG_NFT_META=m
 CONFIG_NFT_CT=m
@@ -1382,6 +1388,7 @@ CONFIG_NET_CLS_RSVP6=m
 CONFIG_NET_CLS_FLOW=m
 CONFIG_NET_CLS_CGROUP=m
 CONFIG_NET_CLS_BPF=m
+CONFIG_NET_CLS_FLOWER=m
 CONFIG_NET_EMATCH=y
 CONFIG_NET_EMATCH_STACK=32
 CONFIG_NET_EMATCH_CMP=m
@@ -1594,8 +1601,10 @@ CONFIG_BT_DEBUGFS=y
 #
 CONFIG_BT_INTEL=m
 CONFIG_BT_BCM=m
+CONFIG_BT_RTL=m
 CONFIG_BT_HCIBTUSB=m
 CONFIG_BT_HCIBTUSB_BCM=y
+CONFIG_BT_HCIBTUSB_RTL=y
 CONFIG_BT_HCIBTSDIO=m
 CONFIG_BT_HCIUART=m
 CONFIG_BT_HCIUART_H4=y
@@ -1654,6 +1663,7 @@ CONFIG_MAC80211_LEDS=y
 CONFIG_MAC80211_DEBUGFS=y
 CONFIG_MAC80211_MESSAGE_TRACING=y
 # CONFIG_MAC80211_DEBUG_MENU is not set
+CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
 CONFIG_WIMAX=m
 CONFIG_WIMAX_DEBUG_LEVEL=8
 CONFIG_RFKILL=y
@@ -1676,6 +1686,7 @@ CONFIG_NFC=m
 CONFIG_NFC_DIGITAL=m
 CONFIG_NFC_NCI=m
 CONFIG_NFC_NCI_SPI=y
+CONFIG_NFC_NCI_UART=m
 CONFIG_NFC_HCI=m
 CONFIG_NFC_SHDLC=y
 
@@ -1696,10 +1707,11 @@ CONFIG_NFC_MICROREAD_I2C=m
 CONFIG_NFC_MICROREAD_MEI=m
 CONFIG_NFC_MRVL=m
 CONFIG_NFC_MRVL_USB=m
+CONFIG_NFC_MRVL_UART=m
 CONFIG_NFC_ST21NFCA=m
 CONFIG_NFC_ST21NFCA_I2C=m
-CONFIG_NFC_ST21NFCB=m
-CONFIG_NFC_ST21NFCB_I2C=m
+CONFIG_NFC_ST_NCI=m
+CONFIG_NFC_ST_NCI_I2C=m
 CONFIG_NFC_NXP_NCI=m
 CONFIG_NFC_NXP_NCI_I2C=m
 
@@ -1885,6 +1897,7 @@ CONFIG_MTD_UBI_BEB_LIMIT=20
 CONFIG_MTD_UBI_FASTMAP=y
 CONFIG_MTD_UBI_GLUEBI=m
 CONFIG_MTD_UBI_BLOCK=y
+# CONFIG_OF is not set
 CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
@@ -1942,7 +1955,6 @@ CONFIG_PARIDE_ON26=m
 CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
 CONFIG_ZRAM=m
 CONFIG_ZRAM_LZ4_COMPRESS=y
-# CONFIG_ZRAM_DEBUG is not set
 CONFIG_BLK_CPQ_CISS_DA=m
 CONFIG_CISS_SCSI_TAPE=y
 CONFIG_BLK_DEV_DAC960=m
@@ -1961,7 +1973,6 @@ CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=65536
 CONFIG_BLK_DEV_RAM_DAX=y
-CONFIG_BLK_DEV_PMEM=m
 CONFIG_CDROM_PKTCDVD=m
 CONFIG_CDROM_PKTCDVD_BUFFERS=8
 # CONFIG_CDROM_PKTCDVD_WCACHE is not set
@@ -2045,14 +2056,23 @@ CONFIG_VMWARE_VMCI=m
 #
 
 #
+# SCIF Bus Driver
+#
+
+#
 # Intel MIC Host Driver
 #
 
 #
 # Intel MIC Card Driver
 #
+
+#
+# SCIF Driver
+#
 CONFIG_ECHO=m
 # CONFIG_CXL_BASE is not set
+# CONFIG_CXL_KERNEL_API is not set
 CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
@@ -2158,6 +2178,8 @@ CONFIG_LIBFC=m
 CONFIG_LIBFCOE=m
 CONFIG_FCOE=m
 CONFIG_FCOE_FNIC=m
+CONFIG_SCSI_SNIC=m
+# CONFIG_SCSI_SNIC_DEBUG_FS is not set
 CONFIG_SCSI_DMX3191D=m
 CONFIG_SCSI_DTC3280=m
 CONFIG_SCSI_EATA=m
@@ -2356,6 +2378,7 @@ CONFIG_DM_SNAPSHOT=m
 CONFIG_DM_THIN_PROVISIONING=m
 CONFIG_DM_CACHE=m
 CONFIG_DM_CACHE_MQ=m
+CONFIG_DM_CACHE_SMQ=m
 CONFIG_DM_CACHE_CLEANER=m
 CONFIG_DM_ERA=m
 CONFIG_DM_MIRROR=m
@@ -2417,6 +2440,7 @@ CONFIG_MACVLAN=m
 CONFIG_MACVTAP=m
 CONFIG_IPVLAN=m
 CONFIG_VXLAN=m
+CONFIG_GENEVE=m
 CONFIG_NETCONSOLE=m
 CONFIG_NETCONSOLE_DYNAMIC=y
 CONFIG_NETPOLL=y
@@ -2426,6 +2450,7 @@ CONFIG_RIONET=m
 CONFIG_RIONET_TX_SIZE=128
 CONFIG_RIONET_RX_SIZE=128
 CONFIG_TUN=y
+# CONFIG_TUN_VNET_CROSS_LE is not set
 CONFIG_VETH=m
 CONFIG_VIRTIO_NET=y
 CONFIG_NLMON=m
@@ -2485,6 +2510,7 @@ CONFIG_VHOST_NET=m
 CONFIG_VHOST_SCSI=m
 CONFIG_VHOST_RING=m
 CONFIG_VHOST=m
+# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
 
 #
 # Distributed Switch Architecture drivers
@@ -2536,6 +2562,7 @@ CONFIG_BNX2X=m
 CONFIG_BNX2X_SRIOV=y
 CONFIG_NET_VENDOR_BROCADE=y
 CONFIG_BNA=m
+CONFIG_NET_VENDOR_CAVIUM=m
 CONFIG_NET_VENDOR_CHELSIO=y
 CONFIG_CHELSIO_T1=m
 CONFIG_CHELSIO_T1_1G=y
@@ -2570,7 +2597,9 @@ CONFIG_SUNDANCE=m
 # CONFIG_SUNDANCE_MMIO is not set
 CONFIG_NET_VENDOR_EMULEX=y
 CONFIG_BE2NET=m
+CONFIG_BE2NET_HWMON=y
 CONFIG_BE2NET_VXLAN=y
+CONFIG_NET_VENDOR_EZCHIP=y
 CONFIG_NET_VENDOR_EXAR=y
 CONFIG_S2IO=m
 CONFIG_VXGE=m
@@ -2618,6 +2647,7 @@ CONFIG_MLX4_EN_VXLAN=y
 CONFIG_MLX4_CORE=m
 CONFIG_MLX4_DEBUG=y
 CONFIG_MLX5_CORE=m
+CONFIG_MLX5_CORE_EN=y
 CONFIG_NET_VENDOR_MICREL=y
 CONFIG_KS8842=m
 CONFIG_KS8851=m
@@ -2667,6 +2697,7 @@ CONFIG_8139TOO_PIO=y
 CONFIG_8139TOO_8129=y
 # CONFIG_8139_OLD_RX_RESET is not set
 CONFIG_R8169=m
+CONFIG_NET_VENDOR_RENESAS=y
 CONFIG_NET_VENDOR_RDC=y
 CONFIG_R6040=m
 CONFIG_NET_VENDOR_ROCKER=y
@@ -2682,6 +2713,7 @@ CONFIG_SFC=m
 CONFIG_SFC_MTD=y
 CONFIG_SFC_MCDI_MON=y
 CONFIG_SFC_SRIOV=y
+CONFIG_SFC_MCDI_LOGGING=y
 CONFIG_NET_VENDOR_SMSC=y
 CONFIG_SMC9194=m
 CONFIG_PCMCIA_SMC91C92=m
@@ -2692,6 +2724,7 @@ CONFIG_SMSC9420=m
 CONFIG_NET_VENDOR_STMICRO=y
 CONFIG_STMMAC_ETH=m
 CONFIG_STMMAC_PLATFORM=m
+CONFIG_DWMAC_GENERIC=m
 # CONFIG_STMMAC_PCI is not set
 CONFIG_NET_VENDOR_SUN=y
 CONFIG_HAPPYMEAL=m
@@ -2744,6 +2777,7 @@ CONFIG_NATIONAL_PHY=m
 CONFIG_STE10XP=m
 CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MICREL_PHY=m
+CONFIG_DP83867_PHY=m
 CONFIG_FIXED_PHY=y
 CONFIG_MDIO_BITBANG=m
 CONFIG_MDIO_GPIO=m
@@ -3003,6 +3037,8 @@ CONFIG_RT2X00_LIB_CRYPTO=y
 CONFIG_RT2X00_LIB_LEDS=y
 # CONFIG_RT2X00_LIB_DEBUGFS is not set
 # CONFIG_RT2X00_DEBUG is not set
+CONFIG_WL_MEDIATEK=y
+CONFIG_MT7601U=m
 CONFIG_RTL_CARDS=m
 CONFIG_RTL8192CE=m
 CONFIG_RTL8192SE=m
@@ -3083,6 +3119,7 @@ CONFIG_IEEE802154_FAKELB=m
 CONFIG_IEEE802154_AT86RF230=m
 CONFIG_IEEE802154_MRF24J40=m
 CONFIG_IEEE802154_CC2520=m
+CONFIG_IEEE802154_ATUSB=m
 CONFIG_XEN_NETDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_BACKEND=m
 CONFIG_VMXNET3=m
@@ -3239,6 +3276,7 @@ CONFIG_ISDN_HDLC=m
 # Input device support
 #
 CONFIG_INPUT=y
+CONFIG_INPUT_LEDS=m
 CONFIG_INPUT_FF_MEMLESS=m
 CONFIG_INPUT_POLLDEV=m
 CONFIG_INPUT_SPARSEKMAP=m
@@ -3394,6 +3432,7 @@ CONFIG_TOUCHSCREEN_TOUCHWIN=m
 CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
 CONFIG_TOUCHSCREEN_UCB1400=m
 CONFIG_TOUCHSCREEN_PIXCIR=m
+CONFIG_TOUCHSCREEN_WDT87XX_I2C=m
 CONFIG_TOUCHSCREEN_WM831X=m
 CONFIG_TOUCHSCREEN_WM97XX=m
 CONFIG_TOUCHSCREEN_WM9705=y
@@ -3474,6 +3513,7 @@ CONFIG_INPUT_PWM_BEEPER=m
 CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 CONFIG_INPUT_DA9052_ONKEY=m
 CONFIG_INPUT_DA9055_ONKEY=m
+CONFIG_INPUT_DA9063_ONKEY=m
 CONFIG_INPUT_WM831X_ON=m
 CONFIG_INPUT_PCAP=m
 CONFIG_INPUT_ADXL34X=m
@@ -3486,6 +3526,7 @@ CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
 CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
 CONFIG_INPUT_SOC_BUTTON_ARRAY=m
 CONFIG_INPUT_DRV260X_HAPTICS=m
+CONFIG_INPUT_DRV2665_HAPTICS=m
 CONFIG_INPUT_DRV2667_HAPTICS=m
 
 #
@@ -3581,7 +3622,10 @@ CONFIG_CONSOLE_POLL=y
 CONFIG_SERIAL_JSM=m
 CONFIG_SERIAL_SCCNXP=y
 CONFIG_SERIAL_SCCNXP_CONSOLE=y
+CONFIG_SERIAL_SC16IS7XX_CORE=m
 CONFIG_SERIAL_SC16IS7XX=m
+CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_SPI=y
 CONFIG_SERIAL_TIMBERDALE=m
 CONFIG_SERIAL_ALTERA_JTAGUART=m
 CONFIG_SERIAL_ALTERA_UART=m
@@ -3774,6 +3818,7 @@ CONFIG_SPI_SC18IS602=m
 CONFIG_SPI_TOPCLIFF_PCH=m
 CONFIG_SPI_XCOMM=m
 # CONFIG_SPI_XILINX is not set
+CONFIG_SPI_ZYNQMP_GQSPI=m
 CONFIG_SPI_DESIGNWARE=m
 CONFIG_SPI_DW_PCI=m
 CONFIG_SPI_DW_MID_DMA=y
@@ -3969,6 +4014,7 @@ CONFIG_BATTERY_BQ27X00_PLATFORM=y
 CONFIG_BATTERY_DA9030=m
 CONFIG_BATTERY_DA9052=m
 CONFIG_CHARGER_DA9150=m
+CONFIG_AXP288_CHARGER=m
 CONFIG_AXP288_FUEL_GAUGE=m
 CONFIG_BATTERY_MAX17040=m
 CONFIG_BATTERY_MAX17042=m
@@ -3990,11 +4036,14 @@ CONFIG_CHARGER_MAX8997=m
 CONFIG_CHARGER_MAX8998=m
 CONFIG_CHARGER_BQ2415X=m
 CONFIG_CHARGER_BQ24190=m
+CONFIG_CHARGER_BQ24257=m
 CONFIG_CHARGER_BQ24735=m
+CONFIG_CHARGER_BQ25890=m
 CONFIG_CHARGER_SMB347=m
 CONFIG_CHARGER_TPS65090=m
 CONFIG_BATTERY_GAUGE_LTC2941=m
 CONFIG_BATTERY_RT5033=m
+CONFIG_CHARGER_RT9455=m
 CONFIG_POWER_RESET=y
 CONFIG_POWER_RESET_RESTART=y
 CONFIG_POWER_AVS=y
@@ -4032,6 +4081,7 @@ CONFIG_SENSORS_ASB100=m
 CONFIG_SENSORS_ATXP1=m
 CONFIG_SENSORS_DS620=m
 CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_DELL_SMM=m
 CONFIG_SENSORS_DA9052_ADC=m
 CONFIG_SENSORS_DA9055=m
 CONFIG_SENSORS_I5K_AMB=m
@@ -4134,6 +4184,7 @@ CONFIG_SENSORS_ADS7871=m
 CONFIG_SENSORS_AMC6821=m
 CONFIG_SENSORS_INA209=m
 CONFIG_SENSORS_INA2XX=m
+CONFIG_SENSORS_TC74=m
 CONFIG_SENSORS_THMC50=m
 CONFIG_SENSORS_TMP102=m
 CONFIG_SENSORS_TMP103=m
@@ -4164,16 +4215,20 @@ CONFIG_SENSORS_ACPI_POWER=m
 CONFIG_SENSORS_ATK0110=m
 CONFIG_THERMAL=y
 CONFIG_THERMAL_HWMON=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
 CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
 # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
 # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set
 CONFIG_THERMAL_GOV_FAIR_SHARE=y
 CONFIG_THERMAL_GOV_STEP_WISE=y
 CONFIG_THERMAL_GOV_BANG_BANG=y
 CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
 CONFIG_THERMAL_EMULATION=y
 CONFIG_INTEL_POWERCLAMP=m
 CONFIG_X86_PKG_TEMP_THERMAL=m
+CONFIG_INTEL_SOC_DTS_IOSF_CORE=m
 CONFIG_INTEL_SOC_DTS_THERMAL=m
 CONFIG_INT340X_THERMAL=m
 CONFIG_ACPI_THERMAL_REL=m
@@ -4200,6 +4255,7 @@ CONFIG_CADENCE_WATCHDOG=m
 CONFIG_DW_WATCHDOG=m
 CONFIG_RN5T618_WATCHDOG=m
 CONFIG_TWL4030_WATCHDOG=m
+CONFIG_MAX63XX_WATCHDOG=m
 CONFIG_RETU_WATCHDOG=m
 CONFIG_ACQUIRE_WDT=m
 CONFIG_ADVANTECH_WDT=m
@@ -4306,6 +4362,7 @@ CONFIG_MFD_BCM590XX=m
 CONFIG_MFD_AXP20X=y
 CONFIG_MFD_CROS_EC=m
 CONFIG_MFD_CROS_EC_I2C=m
+CONFIG_MFD_CROS_EC_SPI=m
 CONFIG_PMIC_DA903X=y
 CONFIG_PMIC_DA9052=y
 CONFIG_MFD_DA9052_SPI=y
@@ -4451,6 +4508,7 @@ CONFIG_REGULATOR_PCAP=m
 CONFIG_REGULATOR_PCF50633=m
 CONFIG_REGULATOR_PFUZE100=m
 CONFIG_REGULATOR_PWM=m
+CONFIG_REGULATOR_QCOM_SPMI=m
 CONFIG_REGULATOR_RC5T583=m
 CONFIG_REGULATOR_RN5T618=m
 CONFIG_REGULATOR_RT5033=m
@@ -4494,6 +4552,7 @@ CONFIG_VIDEO_V4L2=m
 # CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
 CONFIG_VIDEO_TUNER=m
 CONFIG_V4L2_MEM2MEM_DEV=m
+CONFIG_V4L2_FLASH_LED_CLASS=m
 CONFIG_VIDEOBUF_GEN=m
 CONFIG_VIDEOBUF_DMA_SG=m
 CONFIG_VIDEOBUF_VMALLOC=m
@@ -4733,6 +4792,7 @@ CONFIG_VIDEO_HEXIUM_ORION=m
 CONFIG_VIDEO_MXB=m
 CONFIG_VIDEO_SOLO6X10=m
 CONFIG_VIDEO_TW68=m
+CONFIG_VIDEO_DT3155=m
 
 #
 # Media capture/analog/hybrid TV support
@@ -4758,6 +4818,7 @@ CONFIG_VIDEO_SAA7134_RC=y
 CONFIG_VIDEO_SAA7134_DVB=m
 CONFIG_VIDEO_SAA7134_GO7007=m
 CONFIG_VIDEO_SAA7164=m
+CONFIG_VIDEO_COBALT=m
 
 #
 # Media digital TV PCI Adapters
@@ -4895,6 +4956,8 @@ CONFIG_VIDEO_SAA6588=m
 # Video decoders
 #
 CONFIG_VIDEO_ADV7180=m
+CONFIG_VIDEO_ADV7604=m
+CONFIG_VIDEO_ADV7842=m
 CONFIG_VIDEO_BT819=m
 CONFIG_VIDEO_BT856=m
 CONFIG_VIDEO_BT866=m
@@ -4920,6 +4983,7 @@ CONFIG_VIDEO_SAA7127=m
 CONFIG_VIDEO_SAA7185=m
 CONFIG_VIDEO_ADV7170=m
 CONFIG_VIDEO_ADV7175=m
+CONFIG_VIDEO_ADV7511=m
 
 #
 # Camera sensor devices
@@ -5046,6 +5110,7 @@ CONFIG_DVB_TDA826X=m
 CONFIG_DVB_TUA6100=m
 CONFIG_DVB_CX24116=m
 CONFIG_DVB_CX24117=m
+CONFIG_DVB_CX24120=m
 CONFIG_DVB_SI21XX=m
 CONFIG_DVB_TS2020=m
 CONFIG_DVB_DS3000=m
@@ -5188,6 +5253,9 @@ CONFIG_DRM_R128=m
 CONFIG_DRM_RADEON=m
 # CONFIG_DRM_RADEON_USERPTR is not set
 # CONFIG_DRM_RADEON_UMS is not set
+CONFIG_DRM_AMDGPU=m
+CONFIG_DRM_AMDGPU_CIK=y
+CONFIG_DRM_AMDGPU_USERPTR=y
 CONFIG_DRM_NOUVEAU=m
 CONFIG_NOUVEAU_DEBUG=5
 CONFIG_NOUVEAU_DEBUG_DEFAULT=3
@@ -5196,7 +5264,7 @@ CONFIG_DRM_I810=m
 CONFIG_DRM_I915=m
 CONFIG_DRM_I915_KMS=y
 CONFIG_DRM_I915_FBDEV=y
-CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y
+# CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set
 CONFIG_DRM_MGA=m
 CONFIG_DRM_SIS=m
 CONFIG_DRM_VIA=m
@@ -5214,6 +5282,7 @@ CONFIG_DRM_AST=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_QXL=m
 # CONFIG_DRM_BOCHS is not set
+CONFIG_DRM_VIRTIO_GPU=m
 CONFIG_DRM_PANEL=y
 
 #
@@ -5422,11 +5491,11 @@ CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
 CONFIG_SND_DYNAMIC_MINORS=y
 CONFIG_SND_MAX_CARDS=32
 CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_PROC_FS=y
 CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_VERBOSE_PRINTK is not set
 # CONFIG_SND_DEBUG is not set
 CONFIG_SND_VMASTER=y
-CONFIG_SND_KCTL_JACK=y
 CONFIG_SND_DMA_SGBUF=y
 CONFIG_SND_RAWMIDI_SEQ=m
 CONFIG_SND_OPL3_LIB_SEQ=m
@@ -5569,20 +5638,16 @@ CONFIG_SND_YMFPCI=m
 #
 CONFIG_SND_HDA=m
 CONFIG_SND_HDA_INTEL=m
-CONFIG_SND_HDA_DSP_LOADER=y
-CONFIG_SND_HDA_PREALLOC_SIZE=64
 CONFIG_SND_HDA_HWDEP=y
 CONFIG_SND_HDA_RECONFIG=y
 CONFIG_SND_HDA_INPUT_BEEP=y
 CONFIG_SND_HDA_INPUT_BEEP_MODE=0
-CONFIG_SND_HDA_INPUT_JACK=y
 CONFIG_SND_HDA_PATCH_LOADER=y
 CONFIG_SND_HDA_CODEC_REALTEK=m
 CONFIG_SND_HDA_CODEC_ANALOG=m
 CONFIG_SND_HDA_CODEC_SIGMATEL=m
 CONFIG_SND_HDA_CODEC_VIA=m
 CONFIG_SND_HDA_CODEC_HDMI=m
-CONFIG_SND_HDA_I915=y
 CONFIG_SND_HDA_CODEC_CIRRUS=m
 CONFIG_SND_HDA_CODEC_CONEXANT=m
 CONFIG_SND_HDA_CODEC_CA0110=m
@@ -5593,6 +5658,9 @@ CONFIG_SND_HDA_CODEC_SI3054=m
 CONFIG_SND_HDA_GENERIC=m
 CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
 CONFIG_SND_HDA_CORE=m
+CONFIG_SND_HDA_DSP_LOADER=y
+CONFIG_SND_HDA_I915=y
+CONFIG_SND_HDA_PREALLOC_SIZE=64
 CONFIG_SND_SPI=y
 CONFIG_SND_USB=y
 CONFIG_SND_USB_AUDIO=m
@@ -5621,6 +5689,7 @@ CONFIG_SND_PCMCIA=y
 CONFIG_SND_VXPOCKET=m
 CONFIG_SND_PDAUDIOCF=m
 CONFIG_SND_SOC=m
+CONFIG_SND_SOC_AC97_BUS=y
 CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
 CONFIG_SND_ATMEL_SOC=m
 CONFIG_SND_DESIGNWARE_I2S=m
@@ -5654,6 +5723,7 @@ CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
 CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
 CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
 CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
 CONFIG_SND_SOC_QCOM=m
 CONFIG_SND_SOC_XTFPGA_I2S=m
 CONFIG_SND_SOC_I2C_AND_SPI=m
@@ -5661,6 +5731,7 @@ CONFIG_SND_SOC_I2C_AND_SPI=m
 #
 # CODEC drivers
 #
+CONFIG_SND_SOC_AC97_CODEC=m
 CONFIG_SND_SOC_ADAU1701=m
 CONFIG_SND_SOC_AK4104=m
 CONFIG_SND_SOC_AK4554=m
@@ -5689,6 +5760,7 @@ CONFIG_SND_SOC_PCM512x=m
 CONFIG_SND_SOC_PCM512x_I2C=m
 CONFIG_SND_SOC_PCM512x_SPI=m
 CONFIG_SND_SOC_RL6231=m
+CONFIG_SND_SOC_RL6347A=m
 CONFIG_SND_SOC_RT286=m
 CONFIG_SND_SOC_RT5631=m
 CONFIG_SND_SOC_RT5640=m
@@ -5710,6 +5782,7 @@ CONFIG_SND_SOC_STA32X=m
 CONFIG_SND_SOC_STA350=m
 CONFIG_SND_SOC_TAS2552=m
 CONFIG_SND_SOC_TAS5086=m
+CONFIG_SND_SOC_TAS571X=m
 CONFIG_SND_SOC_TFA9879=m
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC23_I2C=m
@@ -5870,6 +5943,7 @@ CONFIG_USB_DYNAMIC_MINORS=y
 # CONFIG_USB_OTG_WHITELIST is not set
 # CONFIG_USB_OTG_BLACKLIST_HUB is not set
 # CONFIG_USB_OTG_FSM is not set
+CONFIG_USB_ULPI_BUS=m
 CONFIG_USB_MON=m
 CONFIG_USB_WUSB=m
 CONFIG_USB_WUSB_CBAF=m
@@ -5960,6 +6034,7 @@ CONFIG_USB_MUSB_DUAL_ROLE=y
 #
 CONFIG_MUSB_PIO_ONLY=y
 CONFIG_USB_DWC3=m
+CONFIG_USB_DWC3_ULPI=y
 # CONFIG_USB_DWC3_HOST is not set
 # CONFIG_USB_DWC3_GADGET is not set
 CONFIG_USB_DWC3_DUAL_ROLE=y
@@ -5979,7 +6054,6 @@ CONFIG_USB_DWC2_HOST=y
 #
 # Gadget/Dual-role mode requires USB Gadget support to be enabled
 #
-CONFIG_USB_DWC2_PLATFORM=y
 CONFIG_USB_DWC2_PCI=y
 # CONFIG_USB_DWC2_DEBUG is not set
 # CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
@@ -6243,6 +6317,7 @@ CONFIG_MMC_USDHI6ROL0=m
 CONFIG_MMC_REALTEK_PCI=m
 CONFIG_MMC_REALTEK_USB=m
 CONFIG_MMC_TOSHIBA_PCI=m
+CONFIG_MMC_MTK=m
 CONFIG_MEMSTICK=m
 # CONFIG_MEMSTICK_DEBUG is not set
 
@@ -6278,11 +6353,10 @@ CONFIG_LEDS_PCA9532=m
 CONFIG_LEDS_PCA9532_GPIO=y
 CONFIG_LEDS_GPIO=m
 CONFIG_LEDS_LP3944=m
-CONFIG_LEDS_LP55XX_COMMON=m
-CONFIG_LEDS_LP5521=m
-CONFIG_LEDS_LP5523=m
-CONFIG_LEDS_LP5562=m
-CONFIG_LEDS_LP8501=m
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_LP5562 is not set
+# CONFIG_LEDS_LP8501 is not set
 CONFIG_LEDS_LP8788=m
 CONFIG_LEDS_LP8860=m
 CONFIG_LEDS_CLEVO_MAIL=m
@@ -6302,6 +6376,7 @@ CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_DELL_NETBOOKS=m
 CONFIG_LEDS_MC13783=m
 CONFIG_LEDS_TCA6507=m
+CONFIG_LEDS_TLC591XX=m
 CONFIG_LEDS_MAX8997=m
 CONFIG_LEDS_LM355x=m
 CONFIG_LEDS_OT200=m
@@ -6357,6 +6432,8 @@ CONFIG_INFINIBAND_SRP=m
 CONFIG_INFINIBAND_SRPT=m
 CONFIG_INFINIBAND_ISER=m
 CONFIG_INFINIBAND_ISERT=m
+CONFIG_EDAC_ATOMIC_SCRUB=y
+CONFIG_EDAC_SUPPORT=y
 CONFIG_EDAC=y
 # CONFIG_EDAC_LEGACY_SYSFS is not set
 # CONFIG_EDAC_DEBUG is not set
@@ -6384,8 +6461,9 @@ CONFIG_EDAC_I7300=m
 CONFIG_RTC_LIB=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_SYSTOHC=y
 CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_SYSTOHC=y
+CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
 # CONFIG_RTC_DEBUG is not set
 
 #
@@ -6498,7 +6576,7 @@ CONFIG_RTC_DRV_AB3100=m
 #
 CONFIG_RTC_DRV_PCAP=m
 CONFIG_RTC_DRV_MC13XXX=m
-CONFIG_RTC_DRV_XGENE=m
+CONFIG_RTC_DRV_MT6397=m
 
 #
 # HID Sensor RTC drivers
@@ -6543,6 +6621,7 @@ CONFIG_UIO_AEC=m
 CONFIG_UIO_SERCOS3=m
 CONFIG_UIO_PCI_GENERIC=m
 CONFIG_UIO_NETX=m
+CONFIG_UIO_PRUSS=m
 CONFIG_UIO_MF624=m
 CONFIG_VFIO_IOMMU_TYPE1=m
 CONFIG_VFIO_VIRQFD=m
@@ -6728,6 +6807,7 @@ CONFIG_COMEDI_USBDUXSIGMA=m
 CONFIG_COMEDI_VMK80XX=m
 CONFIG_COMEDI_8254=m
 CONFIG_COMEDI_8255=m
+CONFIG_COMEDI_8255_SA=m
 CONFIG_COMEDI_KCOMEDILIB=m
 CONFIG_COMEDI_AMPLC_DIO200=m
 CONFIG_COMEDI_AMPLC_PC236=m
@@ -6883,9 +6963,6 @@ CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m
 CONFIG_STAGING_MEDIA=y
 CONFIG_I2C_BCM2048=m
 CONFIG_DVB_CXD2099=m
-CONFIG_VIDEO_DT3155=m
-# CONFIG_DT3155_CCIR is not set
-CONFIG_DT3155_STREAMING=y
 CONFIG_DVB_MN88472=m
 CONFIG_DVB_MN88473=m
 CONFIG_LIRC_STAGING=y
@@ -6932,6 +7009,7 @@ CONFIG_FB_TFT_BD663474=m
 CONFIG_FB_TFT_HX8340BN=m
 CONFIG_FB_TFT_HX8347D=m
 CONFIG_FB_TFT_HX8353D=m
+CONFIG_FB_TFT_HX8357D=m
 CONFIG_FB_TFT_ILI9163=m
 CONFIG_FB_TFT_ILI9320=m
 CONFIG_FB_TFT_ILI9325=m
@@ -6955,16 +7033,6 @@ CONFIG_FB_TFT_UPD161704=m
 CONFIG_FB_TFT_WATTEROTT=m
 CONFIG_FB_FLEX=m
 CONFIG_FB_TFT_FBTFT_DEVICE=m
-CONFIG_I2O=m
-CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
-CONFIG_I2O_EXT_ADAPTEC=y
-CONFIG_I2O_EXT_ADAPTEC_DMA64=y
-CONFIG_I2O_CONFIG=m
-# CONFIG_I2O_CONFIG_OLD_IOCTL is not set
-CONFIG_I2O_BUS=m
-CONFIG_I2O_BLOCK=m
-CONFIG_I2O_SCSI=m
-CONFIG_I2O_PROC=m
 CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACER_WMI=m
 CONFIG_ACERHDF=m
@@ -6974,6 +7042,7 @@ CONFIG_DELL_LAPTOP=m
 CONFIG_DELL_WMI=m
 CONFIG_DELL_WMI_AIO=m
 CONFIG_DELL_SMO8800=m
+CONFIG_DELL_RBTN=m
 CONFIG_FUJITSU_LAPTOP=m
 # CONFIG_FUJITSU_LAPTOP_DEBUG is not set
 CONFIG_FUJITSU_TABLET=m
@@ -7023,11 +7092,13 @@ CONFIG_APPLE_GMUX=m
 CONFIG_INTEL_RST=m
 CONFIG_INTEL_SMARTCONNECT=m
 CONFIG_PVPANIC=m
+CONFIG_INTEL_PMC_IPC=m
 CONFIG_CHROME_PLATFORMS=y
 CONFIG_CHROMEOS_LAPTOP=m
 CONFIG_CHROMEOS_PSTORE=m
 CONFIG_CROS_EC_CHARDEV=m
 CONFIG_CROS_EC_LPC=m
+CONFIG_CROS_EC_PROTO=y
 CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
@@ -7089,6 +7160,7 @@ CONFIG_STE_MODEM_RPROC=m
 #
 # SOC (System On Chip) specific Drivers
 #
+# CONFIG_SUNXI_SRAM is not set
 CONFIG_SOC_TI=y
 CONFIG_PM_DEVFREQ=y
 
@@ -7111,6 +7183,7 @@ CONFIG_EXTCON=y
 #
 CONFIG_EXTCON_ADC_JACK=m
 CONFIG_EXTCON_ARIZONA=m
+CONFIG_EXTCON_AXP288=m
 CONFIG_EXTCON_GPIO=m
 CONFIG_EXTCON_MAX14577=m
 CONFIG_EXTCON_MAX77693=m
@@ -7144,6 +7217,8 @@ CONFIG_KXCJK1013=m
 CONFIG_MMA9551_CORE=m
 CONFIG_MMA9551=m
 CONFIG_MMA9553=m
+CONFIG_STK8312=m
+CONFIG_STK8BA50=m
 
 #
 # Analog to digital converters
@@ -7213,6 +7288,7 @@ CONFIG_AD5755=m
 CONFIG_AD5764=m
 CONFIG_AD5791=m
 CONFIG_AD7303=m
+CONFIG_M62332=m
 CONFIG_MAX517=m
 CONFIG_MCP4725=m
 CONFIG_MCP4922=m
@@ -7266,9 +7342,11 @@ CONFIG_IIO_ADIS_LIB_BUFFER=y
 #
 # Light sensors
 #
+CONFIG_ACPI_ALS=m
 CONFIG_ADJD_S311=m
 CONFIG_AL3320A=m
 CONFIG_APDS9300=m
+CONFIG_BH1750=m
 CONFIG_CM32181=m
 CONFIG_CM3232=m
 CONFIG_CM3323=m
@@ -7280,6 +7358,7 @@ CONFIG_HID_SENSOR_PROX=m
 CONFIG_JSA1212=m
 CONFIG_SENSORS_LM3533=m
 CONFIG_LTR501=m
+CONFIG_STK3310=m
 CONFIG_TCS3414=m
 CONFIG_TCS3472=m
 CONFIG_SENSORS_TSL2563=m
@@ -7293,9 +7372,11 @@ CONFIG_AK8975=m
 CONFIG_AK09911=m
 CONFIG_MAG3110=m
 CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
+CONFIG_MMC35240=m
 CONFIG_IIO_ST_MAGN_3AXIS=m
 CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
 CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
+CONFIG_BMC150_MAGN=m
 
 #
 # Inclinometer sensors
@@ -7340,6 +7421,9 @@ CONFIG_SX9500=m
 CONFIG_MLX90614=m
 CONFIG_TMP006=m
 CONFIG_NTB=m
+CONFIG_NTB_PINGPONG=m
+CONFIG_NTB_TOOL=m
+CONFIG_NTB_TRANSPORT=m
 CONFIG_VME_BUS=y
 
 #
@@ -7380,11 +7464,14 @@ CONFIG_FMC_CHARDEV=m
 # PHY Subsystem
 #
 CONFIG_GENERIC_PHY=y
+CONFIG_PHY_PXA_28NM_HSIC=m
+CONFIG_PHY_PXA_28NM_USB2=m
 CONFIG_BCM_KONA_USB2_PHY=m
 CONFIG_PHY_SAMSUNG_USB2=m
 # CONFIG_PHY_EXYNOS4210_USB2 is not set
 # CONFIG_PHY_EXYNOS4X12_USB2 is not set
 # CONFIG_PHY_EXYNOS5250_USB2 is not set
+CONFIG_PHY_TUSB1210=m
 CONFIG_POWERCAP=y
 CONFIG_INTEL_RAPL=m
 CONFIG_MCB=m
@@ -7396,6 +7483,11 @@ CONFIG_THUNDERBOLT=m
 # Android
 #
 # CONFIG_ANDROID is not set
+CONFIG_LIBNVDIMM=y
+CONFIG_BLK_DEV_PMEM=m
+CONFIG_ND_BLK=m
+CONFIG_ND_BTT=m
+CONFIG_BTT=y
 
 #
 # Firmware Drivers
@@ -7416,6 +7508,7 @@ CONFIG_ISCSI_IBFT=m
 # EFI (Extensible Firmware Interface) Support
 #
 CONFIG_EFI_VARS=y
+CONFIG_EFI_ESRT=y
 CONFIG_EFI_VARS_PSTORE=m
 # CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
 CONFIG_EFI_RUNTIME_MAP=y
@@ -7476,6 +7569,7 @@ CONFIG_F2FS_FS_XATTR=y
 CONFIG_F2FS_FS_POSIX_ACL=y
 CONFIG_F2FS_FS_SECURITY=y
 # CONFIG_F2FS_CHECK_FS is not set
+CONFIG_F2FS_FS_ENCRYPTION=y
 # CONFIG_F2FS_IO_TRACE is not set
 CONFIG_FS_DAX=y
 CONFIG_FS_POSIX_ACL=y
@@ -7540,6 +7634,7 @@ CONFIG_PROC_KCORE=y
 CONFIG_PROC_VMCORE=y
 CONFIG_PROC_SYSCTL=y
 CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_PROC_CHILDREN=y
 CONFIG_KERNFS=y
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
@@ -7662,8 +7757,7 @@ CONFIG_SUNRPC_BACKCHANNEL=y
 CONFIG_SUNRPC_SWAP=y
 CONFIG_RPCSEC_GSS_KRB5=m
 CONFIG_SUNRPC_DEBUG=y
-CONFIG_SUNRPC_XPRT_RDMA_CLIENT=m
-CONFIG_SUNRPC_XPRT_RDMA_SERVER=m
+CONFIG_SUNRPC_XPRT_RDMA=m
 CONFIG_CEPH_FS=m
 CONFIG_CEPH_FSCACHE=y
 CONFIG_CEPH_FS_POSIX_ACL=y
@@ -7679,6 +7773,7 @@ CONFIG_CIFS_DEBUG=y
 # CONFIG_CIFS_DEBUG2 is not set
 CONFIG_CIFS_DFS_UPCALL=y
 CONFIG_CIFS_SMB2=y
+CONFIG_CIFS_SMB311=y
 CONFIG_CIFS_FSCACHE=y
 CONFIG_NCP_FS=m
 CONFIG_NCPFS_PACKET_SIGNING=y
@@ -7824,6 +7919,7 @@ CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
 CONFIG_PANIC_ON_OOPS_VALUE=0
 CONFIG_PANIC_TIMEOUT=0
 CONFIG_SCHED_DEBUG=y
+CONFIG_SCHED_INFO=y
 CONFIG_SCHEDSTATS=y
 CONFIG_SCHED_STACK_END_CHECK=y
 # CONFIG_DEBUG_TIMEKEEPING is not set
@@ -7861,6 +7957,7 @@ CONFIG_TORTURE_TEST=m
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_CPU_STALL_INFO is not set
 # CONFIG_RCU_TRACE is not set
+# CONFIG_RCU_EQS_DEBUG is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 CONFIG_NOTIFIER_ERROR_INJECTION=m
 CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
@@ -7978,8 +8075,11 @@ CONFIG_DEFAULT_IO_DELAY_TYPE=1
 # CONFIG_DEBUG_BOOT_PARAMS is not set
 # CONFIG_CPA_DEBUG is not set
 CONFIG_OPTIMIZE_INLINING=y
+# CONFIG_DEBUG_ENTRY is not set
 # CONFIG_DEBUG_NMI_SELFTEST is not set
 # CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set
+CONFIG_X86_DEBUG_FPU=y
+CONFIG_PUNIT_ATOM_DEBUG=m
 
 #
 # Security options
@@ -8069,8 +8169,12 @@ CONFIG_CRYPTO_HASH=y
 CONFIG_CRYPTO_HASH2=y
 CONFIG_CRYPTO_RNG=y
 CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_RNG_DEFAULT=m
 CONFIG_CRYPTO_PCOMP=m
 CONFIG_CRYPTO_PCOMP2=y
+CONFIG_CRYPTO_AKCIPHER2=y
+CONFIG_CRYPTO_AKCIPHER=m
+CONFIG_CRYPTO_RSA=m
 CONFIG_CRYPTO_MANAGER=y
 CONFIG_CRYPTO_MANAGER2=y
 CONFIG_CRYPTO_USER=m
@@ -8091,7 +8195,9 @@ CONFIG_CRYPTO_GLUE_HELPER_X86=m
 #
 CONFIG_CRYPTO_CCM=m
 CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_CHACHA20POLY1305=m
 CONFIG_CRYPTO_SEQIV=m
+CONFIG_CRYPTO_ECHAINIV=m
 
 #
 # Block modes
@@ -8121,6 +8227,7 @@ CONFIG_CRYPTO_CRC32=m
 CONFIG_CRYPTO_CRC32_PCLMUL=m
 CONFIG_CRYPTO_CRCT10DIF=y
 CONFIG_CRYPTO_GHASH=m
+CONFIG_CRYPTO_POLY1305=m
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_MICHAEL_MIC=m
@@ -8153,6 +8260,7 @@ CONFIG_CRYPTO_FCRYPT=m
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_SALSA20=m
 CONFIG_CRYPTO_SALSA20_586=m
+CONFIG_CRYPTO_CHACHA20=m
 CONFIG_CRYPTO_SEED=m
 CONFIG_CRYPTO_SERPENT=m
 CONFIG_CRYPTO_SERPENT_SSE2_586=m
@@ -8167,6 +8275,7 @@ CONFIG_CRYPTO_TWOFISH_586=m
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_ZLIB=m
 CONFIG_CRYPTO_LZO=y
+CONFIG_CRYPTO_842=m
 CONFIG_CRYPTO_LZ4=m
 CONFIG_CRYPTO_LZ4HC=m
 
@@ -8179,10 +8288,12 @@ CONFIG_CRYPTO_DRBG_HMAC=y
 CONFIG_CRYPTO_DRBG_HASH=y
 CONFIG_CRYPTO_DRBG_CTR=y
 CONFIG_CRYPTO_DRBG=m
+CONFIG_CRYPTO_JITTERENTROPY=m
 CONFIG_CRYPTO_USER_API=m
 CONFIG_CRYPTO_USER_API_HASH=m
 CONFIG_CRYPTO_USER_API_SKCIPHER=m
 CONFIG_CRYPTO_USER_API_RNG=m
+CONFIG_CRYPTO_USER_API_AEAD=m
 CONFIG_CRYPTO_HASH_INFO=y
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_PADLOCK=y
@@ -8253,6 +8364,8 @@ CONFIG_CRC8=m
 CONFIG_AUDIT_GENERIC=y
 # CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set
 # CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_842_COMPRESS=m
+CONFIG_842_DECOMPRESS=m
 CONFIG_ZLIB_INFLATE=y
 CONFIG_ZLIB_DEFLATE=y
 CONFIG_LZO_COMPRESS=y
@@ -8312,3 +8425,4 @@ CONFIG_FONT_SUPPORT=y
 CONFIG_FONT_8x8=y
 CONFIG_FONT_8x16=y
 CONFIG_ARCH_HAS_SG_CHAIN=y
+CONFIG_ARCH_HAS_PMEM_API=y
diff --git a/gnu/packages/linux-libre-x86_64.conf b/gnu/packages/linux-libre-x86_64.conf
index 82c5824923..e22b651f37 100644
--- a/gnu/packages/linux-libre-x86_64.conf
+++ b/gnu/packages/linux-libre-x86_64.conf
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 4.1.0-gnu Kernel Configuration
+# Linux/x86 4.2.0-gnu Kernel Configuration
 #
 CONFIG_64BIT=y
 CONFIG_X86_64=y
@@ -37,7 +37,6 @@ CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
 CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
 CONFIG_HAVE_INTEL_TXT=y
 CONFIG_X86_64_SMP=y
-CONFIG_X86_HT=y
 CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11"
 CONFIG_ARCH_SUPPORTS_UPROBES=y
 CONFIG_FIX_EARLYCON_MEM=y
@@ -86,11 +85,12 @@ CONFIG_AUDIT_TREE=y
 #
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_GENERIC_IRQ_LEGACY_ALLOC_HWIRQ=y
 CONFIG_GENERIC_PENDING_IRQ=y
 CONFIG_GENERIC_IRQ_CHIP=y
 CONFIG_IRQ_DOMAIN=y
+CONFIG_IRQ_DOMAIN_HIERARCHY=y
 CONFIG_GENERIC_MSI_IRQ=y
+CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
 # CONFIG_IRQ_DOMAIN_DEBUG is not set
 CONFIG_IRQ_FORCED_THREADING=y
 CONFIG_SPARSE_IRQ=y
@@ -131,18 +131,11 @@ CONFIG_TASK_IO_ACCOUNTING=y
 # RCU Subsystem
 #
 CONFIG_TREE_RCU=y
+# CONFIG_RCU_EXPERT is not set
 CONFIG_SRCU=y
 # CONFIG_TASKS_RCU is not set
 CONFIG_RCU_STALL_COMMON=y
-CONFIG_CONTEXT_TRACKING=y
-CONFIG_RCU_USER_QS=y
-# CONFIG_CONTEXT_TRACKING_FORCE is not set
-CONFIG_RCU_FANOUT=64
-CONFIG_RCU_FANOUT_LEAF=16
-# CONFIG_RCU_FANOUT_EXACT is not set
-CONFIG_RCU_FAST_NO_HZ=y
 # CONFIG_TREE_RCU_TRACE is not set
-CONFIG_RCU_KTHREAD_PRIO=0
 CONFIG_RCU_NOCB_CPU=y
 # CONFIG_RCU_NOCB_CPU_NONE is not set
 # CONFIG_RCU_NOCB_CPU_ZERO is not set
@@ -177,6 +170,7 @@ CONFIG_CFS_BANDWIDTH=y
 # CONFIG_RT_GROUP_SCHED is not set
 CONFIG_BLK_CGROUP=y
 # CONFIG_DEBUG_BLK_CGROUP is not set
+CONFIG_CGROUP_WRITEBACK=y
 CONFIG_CHECKPOINT_RESTORE=y
 CONFIG_NAMESPACES=y
 CONFIG_UTS_NS=y
@@ -266,6 +260,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_ATTRS=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
 CONFIG_HAVE_DMA_API_DEBUG=y
@@ -298,6 +293,7 @@ CONFIG_HAVE_ARCH_SOFT_DIRTY=y
 CONFIG_MODULES_USE_ELF_RELA=y
 CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
 CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
+CONFIG_HAVE_COPY_THREAD_TLS=y
 CONFIG_OLD_SIGSUSPEND3=y
 CONFIG_COMPAT_OLD_SIGACTION=y
 
@@ -318,6 +314,7 @@ CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_SIG is not set
 # CONFIG_MODULE_COMPRESS is not set
+CONFIG_MODULES_TREE_LOOKUP=y
 CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 CONFIG_BLK_DEV_BSG=y
@@ -330,13 +327,7 @@ CONFIG_BLK_CMDLINE_PARSER=y
 # Partition Types
 #
 CONFIG_PARTITION_ADVANCED=y
-CONFIG_ACORN_PARTITION=y
-CONFIG_ACORN_PARTITION_CUMANA=y
-CONFIG_ACORN_PARTITION_EESOX=y
-CONFIG_ACORN_PARTITION_ICS=y
-CONFIG_ACORN_PARTITION_ADFS=y
-CONFIG_ACORN_PARTITION_POWERTEC=y
-CONFIG_ACORN_PARTITION_RISCIX=y
+# CONFIG_ACORN_PARTITION is not set
 CONFIG_AIX_PARTITION=y
 CONFIG_OSF_PARTITION=y
 CONFIG_AMIGA_PARTITION=y
@@ -372,7 +363,6 @@ CONFIG_DEFAULT_IOSCHED="deadline"
 CONFIG_PREEMPT_NOTIFIERS=y
 CONFIG_PADATA=y
 CONFIG_ASN1=y
-CONFIG_UNINLINE_SPIN_UNLOCK=y
 CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
 CONFIG_INLINE_READ_UNLOCK=y
 CONFIG_INLINE_READ_UNLOCK_IRQ=y
@@ -382,8 +372,10 @@ CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
 CONFIG_MUTEX_SPIN_ON_OWNER=y
 CONFIG_RWSEM_SPIN_ON_OWNER=y
 CONFIG_LOCK_SPIN_ON_OWNER=y
-CONFIG_ARCH_USE_QUEUE_RWLOCK=y
-CONFIG_QUEUE_RWLOCK=y
+CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y
+CONFIG_QUEUED_SPINLOCKS=y
+CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
+CONFIG_QUEUED_RWLOCKS=y
 CONFIG_FREEZER=y
 
 #
@@ -542,7 +534,9 @@ CONFIG_ZSMALLOC=y
 CONFIG_PGTABLE_MAPPING=y
 # CONFIG_ZSMALLOC_STAT is not set
 CONFIG_GENERIC_EARLY_IOREMAP=y
-# CONFIG_X86_PMEM_LEGACY is not set
+CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y
+# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
+CONFIG_X86_PMEM_LEGACY=y
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
 CONFIG_X86_RESERVE_LOW=64
@@ -618,6 +612,7 @@ CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
 CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y
 CONFIG_ACPI_SLEEP=y
 # CONFIG_ACPI_PROCFS_POWER is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
 CONFIG_ACPI_EC_DEBUGFS=m
 CONFIG_ACPI_AC=y
 CONFIG_ACPI_BATTERY=y
@@ -645,6 +640,8 @@ CONFIG_ACPI_HED=y
 # CONFIG_ACPI_CUSTOM_METHOD is not set
 CONFIG_ACPI_BGRT=y
 # CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
+CONFIG_ACPI_NFIT=m
+# CONFIG_ACPI_NFIT_DEBUG is not set
 CONFIG_HAVE_ACPI_APEI=y
 CONFIG_HAVE_ACPI_APEI_NMI=y
 CONFIG_ACPI_APEI=y
@@ -727,7 +724,9 @@ CONFIG_PCIEASPM_DEFAULT=y
 # CONFIG_PCIEASPM_POWERSAVE is not set
 # CONFIG_PCIEASPM_PERFORMANCE is not set
 CONFIG_PCIE_PME=y
+CONFIG_PCI_BUS_ADDR_T_64BIT=y
 CONFIG_PCI_MSI=y
+CONFIG_PCI_MSI_IRQ_DOMAIN=y
 # CONFIG_PCI_DEBUG is not set
 CONFIG_PCI_REALLOC_ENABLE_AUTO=y
 CONFIG_PCI_STUB=m
@@ -806,6 +805,7 @@ CONFIG_X86_DEV_DMA_OPS=y
 CONFIG_PMC_ATOM=y
 CONFIG_NET=y
 CONFIG_COMPAT_NETLINK_MESSAGES=y
+CONFIG_NET_INGRESS=y
 
 #
 # Networking options
@@ -849,7 +849,7 @@ CONFIG_NET_IPVTI=m
 CONFIG_NET_UDP_TUNNEL=m
 CONFIG_NET_FOU=m
 CONFIG_NET_FOU_IP_TUNNELS=y
-CONFIG_GENEVE=m
+CONFIG_GENEVE_CORE=m
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
@@ -876,6 +876,7 @@ CONFIG_TCP_CONG_VENO=m
 CONFIG_TCP_CONG_YEAH=m
 CONFIG_TCP_CONG_ILLINOIS=m
 CONFIG_TCP_CONG_DCTCP=m
+CONFIG_TCP_CONG_CDG=m
 CONFIG_DEFAULT_CUBIC=y
 # CONFIG_DEFAULT_RENO is not set
 CONFIG_DEFAULT_TCP_CONG="cubic"
@@ -917,6 +918,7 @@ CONFIG_BRIDGE_NETFILTER=m
 #
 # Core Netfilter Configuration
 #
+CONFIG_NETFILTER_INGRESS=y
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_NETLINK_ACCT=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
@@ -964,6 +966,7 @@ CONFIG_NF_NAT_REDIRECT=m
 CONFIG_NETFILTER_SYNPROXY=m
 CONFIG_NF_TABLES=m
 CONFIG_NF_TABLES_INET=m
+CONFIG_NF_TABLES_NETDEV=m
 CONFIG_NFT_EXTHDR=m
 CONFIG_NFT_META=m
 CONFIG_NFT_CT=m
@@ -1358,6 +1361,7 @@ CONFIG_NET_CLS_RSVP6=m
 CONFIG_NET_CLS_FLOW=m
 CONFIG_NET_CLS_CGROUP=m
 CONFIG_NET_CLS_BPF=m
+CONFIG_NET_CLS_FLOWER=m
 CONFIG_NET_EMATCH=y
 CONFIG_NET_EMATCH_STACK=32
 CONFIG_NET_EMATCH_CMP=m
@@ -1564,8 +1568,10 @@ CONFIG_BT_DEBUGFS=y
 #
 CONFIG_BT_INTEL=m
 CONFIG_BT_BCM=m
+CONFIG_BT_RTL=m
 CONFIG_BT_HCIBTUSB=m
 CONFIG_BT_HCIBTUSB_BCM=y
+CONFIG_BT_HCIBTUSB_RTL=y
 CONFIG_BT_HCIBTSDIO=m
 CONFIG_BT_HCIUART=m
 CONFIG_BT_HCIUART_H4=y
@@ -1624,6 +1630,7 @@ CONFIG_MAC80211_LEDS=y
 CONFIG_MAC80211_DEBUGFS=y
 CONFIG_MAC80211_MESSAGE_TRACING=y
 # CONFIG_MAC80211_DEBUG_MENU is not set
+CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
 CONFIG_WIMAX=m
 CONFIG_WIMAX_DEBUG_LEVEL=8
 CONFIG_RFKILL=y
@@ -1646,6 +1653,7 @@ CONFIG_NFC=m
 CONFIG_NFC_DIGITAL=m
 CONFIG_NFC_NCI=m
 CONFIG_NFC_NCI_SPI=y
+CONFIG_NFC_NCI_UART=m
 CONFIG_NFC_HCI=m
 CONFIG_NFC_SHDLC=y
 
@@ -1666,10 +1674,11 @@ CONFIG_NFC_MICROREAD_I2C=m
 CONFIG_NFC_MICROREAD_MEI=m
 CONFIG_NFC_MRVL=m
 CONFIG_NFC_MRVL_USB=m
+CONFIG_NFC_MRVL_UART=m
 CONFIG_NFC_ST21NFCA=m
 CONFIG_NFC_ST21NFCA_I2C=m
-CONFIG_NFC_ST21NFCB=m
-CONFIG_NFC_ST21NFCB_I2C=m
+CONFIG_NFC_ST_NCI=m
+CONFIG_NFC_ST_NCI_I2C=m
 CONFIG_NFC_NXP_NCI=m
 CONFIG_NFC_NXP_NCI_I2C=m
 CONFIG_HAVE_BPF_JIT=y
@@ -1854,6 +1863,7 @@ CONFIG_MTD_UBI_BEB_LIMIT=20
 CONFIG_MTD_UBI_FASTMAP=y
 CONFIG_MTD_UBI_GLUEBI=m
 CONFIG_MTD_UBI_BLOCK=y
+# CONFIG_OF is not set
 CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
@@ -1907,7 +1917,6 @@ CONFIG_PARIDE_ON26=m
 CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
 CONFIG_ZRAM=m
 CONFIG_ZRAM_LZ4_COMPRESS=y
-# CONFIG_ZRAM_DEBUG is not set
 CONFIG_BLK_CPQ_CISS_DA=m
 CONFIG_CISS_SCSI_TAPE=y
 CONFIG_BLK_DEV_DAC960=m
@@ -1927,7 +1936,6 @@ CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=65536
 CONFIG_BLK_DEV_RAM_DAX=y
-CONFIG_BLK_DEV_PMEM=m
 CONFIG_CDROM_PKTCDVD=m
 CONFIG_CDROM_PKTCDVD_BUFFERS=8
 # CONFIG_CDROM_PKTCDVD_WCACHE is not set
@@ -2009,6 +2017,11 @@ CONFIG_VMWARE_VMCI=m
 CONFIG_INTEL_MIC_BUS=m
 
 #
+# SCIF Bus Driver
+#
+CONFIG_SCIF_BUS=m
+
+#
 # Intel MIC Host Driver
 #
 CONFIG_INTEL_MIC_HOST=m
@@ -2017,10 +2030,16 @@ CONFIG_INTEL_MIC_HOST=m
 # Intel MIC Card Driver
 #
 CONFIG_INTEL_MIC_CARD=m
+
+#
+# SCIF Driver
+#
+CONFIG_SCIF=m
 CONFIG_GENWQE=m
 CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0
 CONFIG_ECHO=m
 # CONFIG_CXL_BASE is not set
+# CONFIG_CXL_KERNEL_API is not set
 CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
@@ -2121,6 +2140,8 @@ CONFIG_LIBFC=m
 CONFIG_LIBFCOE=m
 CONFIG_FCOE=m
 CONFIG_FCOE_FNIC=m
+CONFIG_SCSI_SNIC=m
+# CONFIG_SCSI_SNIC_DEBUG_FS is not set
 CONFIG_SCSI_DMX3191D=m
 CONFIG_SCSI_EATA=m
 CONFIG_SCSI_EATA_TAGGED_QUEUE=y
@@ -2294,6 +2315,7 @@ CONFIG_DM_SNAPSHOT=m
 CONFIG_DM_THIN_PROVISIONING=m
 CONFIG_DM_CACHE=m
 CONFIG_DM_CACHE_MQ=m
+CONFIG_DM_CACHE_SMQ=m
 CONFIG_DM_CACHE_CLEANER=m
 CONFIG_DM_ERA=m
 CONFIG_DM_MIRROR=m
@@ -2355,6 +2377,7 @@ CONFIG_MACVLAN=m
 CONFIG_MACVTAP=m
 CONFIG_IPVLAN=m
 CONFIG_VXLAN=m
+CONFIG_GENEVE=m
 CONFIG_NETCONSOLE=m
 CONFIG_NETCONSOLE_DYNAMIC=y
 CONFIG_NETPOLL=y
@@ -2364,6 +2387,7 @@ CONFIG_RIONET=m
 CONFIG_RIONET_TX_SIZE=128
 CONFIG_RIONET_RX_SIZE=128
 CONFIG_TUN=y
+# CONFIG_TUN_VNET_CROSS_LE is not set
 CONFIG_VETH=m
 CONFIG_VIRTIO_NET=y
 CONFIG_NLMON=m
@@ -2422,6 +2446,7 @@ CONFIG_VHOST_NET=m
 CONFIG_VHOST_SCSI=m
 CONFIG_VHOST_RING=m
 CONFIG_VHOST=m
+# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
 
 #
 # Distributed Switch Architecture drivers
@@ -2469,6 +2494,11 @@ CONFIG_BNX2X=m
 CONFIG_BNX2X_SRIOV=y
 CONFIG_NET_VENDOR_BROCADE=y
 CONFIG_BNA=m
+CONFIG_NET_VENDOR_CAVIUM=m
+CONFIG_THUNDER_NIC_PF=m
+CONFIG_THUNDER_NIC_VF=m
+CONFIG_THUNDER_NIC_BGX=m
+CONFIG_LIQUIDIO=m
 CONFIG_NET_VENDOR_CHELSIO=y
 CONFIG_CHELSIO_T1=m
 CONFIG_CHELSIO_T1_1G=y
@@ -2500,7 +2530,9 @@ CONFIG_SUNDANCE=m
 # CONFIG_SUNDANCE_MMIO is not set
 CONFIG_NET_VENDOR_EMULEX=y
 CONFIG_BE2NET=m
+CONFIG_BE2NET_HWMON=y
 CONFIG_BE2NET_VXLAN=y
+CONFIG_NET_VENDOR_EZCHIP=y
 CONFIG_NET_VENDOR_EXAR=y
 CONFIG_S2IO=m
 CONFIG_VXGE=m
@@ -2548,6 +2580,7 @@ CONFIG_MLX4_EN_VXLAN=y
 CONFIG_MLX4_CORE=m
 CONFIG_MLX4_DEBUG=y
 CONFIG_MLX5_CORE=m
+CONFIG_MLX5_CORE_EN=y
 CONFIG_NET_VENDOR_MICREL=y
 CONFIG_KS8842=m
 CONFIG_KS8851=m
@@ -2593,6 +2626,7 @@ CONFIG_8139TOO_PIO=y
 CONFIG_8139TOO_8129=y
 # CONFIG_8139_OLD_RX_RESET is not set
 CONFIG_R8169=m
+CONFIG_NET_VENDOR_RENESAS=y
 CONFIG_NET_VENDOR_RDC=y
 CONFIG_R6040=m
 CONFIG_NET_VENDOR_ROCKER=y
@@ -2608,6 +2642,7 @@ CONFIG_SFC=m
 CONFIG_SFC_MTD=y
 CONFIG_SFC_MCDI_MON=y
 CONFIG_SFC_SRIOV=y
+CONFIG_SFC_MCDI_LOGGING=y
 CONFIG_NET_VENDOR_SMSC=y
 CONFIG_PCMCIA_SMC91C92=m
 CONFIG_EPIC100=m
@@ -2617,6 +2652,7 @@ CONFIG_SMSC9420=m
 CONFIG_NET_VENDOR_STMICRO=y
 CONFIG_STMMAC_ETH=m
 CONFIG_STMMAC_PLATFORM=m
+CONFIG_DWMAC_GENERIC=m
 # CONFIG_STMMAC_PCI is not set
 CONFIG_NET_VENDOR_SUN=y
 CONFIG_HAPPYMEAL=m
@@ -2669,6 +2705,7 @@ CONFIG_NATIONAL_PHY=m
 CONFIG_STE10XP=m
 CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MICREL_PHY=m
+CONFIG_DP83867_PHY=m
 CONFIG_FIXED_PHY=y
 CONFIG_MDIO_BITBANG=m
 CONFIG_MDIO_GPIO=m
@@ -2928,6 +2965,8 @@ CONFIG_RT2X00_LIB_CRYPTO=y
 CONFIG_RT2X00_LIB_LEDS=y
 # CONFIG_RT2X00_LIB_DEBUGFS is not set
 # CONFIG_RT2X00_DEBUG is not set
+CONFIG_WL_MEDIATEK=y
+CONFIG_MT7601U=m
 CONFIG_RTL_CARDS=m
 CONFIG_RTL8192CE=m
 CONFIG_RTL8192SE=m
@@ -3002,6 +3041,7 @@ CONFIG_IEEE802154_FAKELB=m
 CONFIG_IEEE802154_AT86RF230=m
 CONFIG_IEEE802154_MRF24J40=m
 CONFIG_IEEE802154_CC2520=m
+CONFIG_IEEE802154_ATUSB=m
 CONFIG_XEN_NETDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_BACKEND=m
 CONFIG_VMXNET3=m
@@ -3142,6 +3182,7 @@ CONFIG_ISDN_HDLC=m
 # Input device support
 #
 CONFIG_INPUT=y
+CONFIG_INPUT_LEDS=m
 CONFIG_INPUT_FF_MEMLESS=m
 CONFIG_INPUT_POLLDEV=m
 CONFIG_INPUT_SPARSEKMAP=m
@@ -3292,6 +3333,7 @@ CONFIG_TOUCHSCREEN_TOUCHWIN=m
 CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
 CONFIG_TOUCHSCREEN_UCB1400=m
 CONFIG_TOUCHSCREEN_PIXCIR=m
+CONFIG_TOUCHSCREEN_WDT87XX_I2C=m
 CONFIG_TOUCHSCREEN_WM831X=m
 CONFIG_TOUCHSCREEN_WM97XX=m
 CONFIG_TOUCHSCREEN_WM9705=y
@@ -3371,6 +3413,7 @@ CONFIG_INPUT_PWM_BEEPER=m
 CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 CONFIG_INPUT_DA9052_ONKEY=m
 CONFIG_INPUT_DA9055_ONKEY=m
+CONFIG_INPUT_DA9063_ONKEY=m
 CONFIG_INPUT_WM831X_ON=m
 CONFIG_INPUT_PCAP=m
 CONFIG_INPUT_ADXL34X=m
@@ -3383,6 +3426,7 @@ CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
 CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
 CONFIG_INPUT_SOC_BUTTON_ARRAY=m
 CONFIG_INPUT_DRV260X_HAPTICS=m
+CONFIG_INPUT_DRV2665_HAPTICS=m
 CONFIG_INPUT_DRV2667_HAPTICS=m
 
 #
@@ -3472,7 +3516,10 @@ CONFIG_CONSOLE_POLL=y
 CONFIG_SERIAL_JSM=m
 CONFIG_SERIAL_SCCNXP=y
 CONFIG_SERIAL_SCCNXP_CONSOLE=y
+CONFIG_SERIAL_SC16IS7XX_CORE=m
 CONFIG_SERIAL_SC16IS7XX=m
+CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_SPI=y
 CONFIG_SERIAL_ALTERA_JTAGUART=m
 CONFIG_SERIAL_ALTERA_UART=m
 CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
@@ -3653,6 +3700,7 @@ CONFIG_SPI_PXA2XX_PCI=m
 CONFIG_SPI_SC18IS602=m
 CONFIG_SPI_XCOMM=m
 # CONFIG_SPI_XILINX is not set
+CONFIG_SPI_ZYNQMP_GQSPI=m
 CONFIG_SPI_DESIGNWARE=m
 CONFIG_SPI_DW_PCI=m
 CONFIG_SPI_DW_MID_DMA=y
@@ -3843,6 +3891,7 @@ CONFIG_BATTERY_BQ27X00_PLATFORM=y
 CONFIG_BATTERY_DA9030=m
 CONFIG_BATTERY_DA9052=m
 CONFIG_CHARGER_DA9150=m
+CONFIG_AXP288_CHARGER=m
 CONFIG_AXP288_FUEL_GAUGE=m
 CONFIG_BATTERY_MAX17040=m
 CONFIG_BATTERY_MAX17042=m
@@ -3863,11 +3912,14 @@ CONFIG_CHARGER_MAX8997=m
 CONFIG_CHARGER_MAX8998=m
 CONFIG_CHARGER_BQ2415X=m
 CONFIG_CHARGER_BQ24190=m
+CONFIG_CHARGER_BQ24257=m
 CONFIG_CHARGER_BQ24735=m
+CONFIG_CHARGER_BQ25890=m
 CONFIG_CHARGER_SMB347=m
 CONFIG_CHARGER_TPS65090=m
 CONFIG_BATTERY_GAUGE_LTC2941=m
 CONFIG_BATTERY_RT5033=m
+CONFIG_CHARGER_RT9455=m
 CONFIG_POWER_RESET=y
 CONFIG_POWER_RESET_RESTART=y
 CONFIG_POWER_AVS=y
@@ -3905,6 +3957,7 @@ CONFIG_SENSORS_ASB100=m
 CONFIG_SENSORS_ATXP1=m
 CONFIG_SENSORS_DS620=m
 CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_DELL_SMM=m
 CONFIG_SENSORS_DA9052_ADC=m
 CONFIG_SENSORS_DA9055=m
 CONFIG_SENSORS_I5K_AMB=m
@@ -4007,6 +4060,7 @@ CONFIG_SENSORS_ADS7871=m
 CONFIG_SENSORS_AMC6821=m
 CONFIG_SENSORS_INA209=m
 CONFIG_SENSORS_INA2XX=m
+CONFIG_SENSORS_TC74=m
 CONFIG_SENSORS_THMC50=m
 CONFIG_SENSORS_TMP102=m
 CONFIG_SENSORS_TMP103=m
@@ -4037,16 +4091,20 @@ CONFIG_SENSORS_ACPI_POWER=m
 CONFIG_SENSORS_ATK0110=m
 CONFIG_THERMAL=y
 CONFIG_THERMAL_HWMON=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
 CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
 # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
 # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set
 CONFIG_THERMAL_GOV_FAIR_SHARE=y
 CONFIG_THERMAL_GOV_STEP_WISE=y
 CONFIG_THERMAL_GOV_BANG_BANG=y
 CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
 CONFIG_THERMAL_EMULATION=y
 CONFIG_INTEL_POWERCLAMP=m
 CONFIG_X86_PKG_TEMP_THERMAL=m
+CONFIG_INTEL_SOC_DTS_IOSF_CORE=m
 CONFIG_INTEL_SOC_DTS_THERMAL=m
 CONFIG_INT340X_THERMAL=m
 CONFIG_ACPI_THERMAL_REL=m
@@ -4073,6 +4131,7 @@ CONFIG_CADENCE_WATCHDOG=m
 CONFIG_DW_WATCHDOG=m
 CONFIG_RN5T618_WATCHDOG=m
 CONFIG_TWL4030_WATCHDOG=m
+CONFIG_MAX63XX_WATCHDOG=m
 CONFIG_RETU_WATCHDOG=m
 CONFIG_ACQUIRE_WDT=m
 CONFIG_ADVANTECH_WDT=m
@@ -4166,6 +4225,7 @@ CONFIG_MFD_BCM590XX=m
 CONFIG_MFD_AXP20X=y
 CONFIG_MFD_CROS_EC=m
 CONFIG_MFD_CROS_EC_I2C=m
+CONFIG_MFD_CROS_EC_SPI=m
 CONFIG_PMIC_DA903X=y
 CONFIG_PMIC_DA9052=y
 CONFIG_MFD_DA9052_SPI=y
@@ -4309,6 +4369,7 @@ CONFIG_REGULATOR_PCAP=m
 CONFIG_REGULATOR_PCF50633=m
 CONFIG_REGULATOR_PFUZE100=m
 CONFIG_REGULATOR_PWM=m
+CONFIG_REGULATOR_QCOM_SPMI=m
 CONFIG_REGULATOR_RC5T583=m
 CONFIG_REGULATOR_RN5T618=m
 CONFIG_REGULATOR_RT5033=m
@@ -4352,6 +4413,7 @@ CONFIG_VIDEO_V4L2=m
 # CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
 CONFIG_VIDEO_TUNER=m
 CONFIG_V4L2_MEM2MEM_DEV=m
+CONFIG_V4L2_FLASH_LED_CLASS=m
 CONFIG_VIDEOBUF_GEN=m
 CONFIG_VIDEOBUF_DMA_SG=m
 CONFIG_VIDEOBUF_VMALLOC=m
@@ -4590,6 +4652,7 @@ CONFIG_VIDEO_HEXIUM_ORION=m
 CONFIG_VIDEO_MXB=m
 CONFIG_VIDEO_SOLO6X10=m
 CONFIG_VIDEO_TW68=m
+CONFIG_VIDEO_DT3155=m
 
 #
 # Media capture/analog/hybrid TV support
@@ -4615,6 +4678,7 @@ CONFIG_VIDEO_SAA7134_RC=y
 CONFIG_VIDEO_SAA7134_DVB=m
 CONFIG_VIDEO_SAA7134_GO7007=m
 CONFIG_VIDEO_SAA7164=m
+CONFIG_VIDEO_COBALT=m
 
 #
 # Media digital TV PCI Adapters
@@ -4735,6 +4799,8 @@ CONFIG_VIDEO_SAA6588=m
 #
 # Video decoders
 #
+CONFIG_VIDEO_ADV7604=m
+CONFIG_VIDEO_ADV7842=m
 CONFIG_VIDEO_BT819=m
 CONFIG_VIDEO_BT856=m
 CONFIG_VIDEO_BT866=m
@@ -4760,6 +4826,7 @@ CONFIG_VIDEO_SAA7127=m
 CONFIG_VIDEO_SAA7185=m
 CONFIG_VIDEO_ADV7170=m
 CONFIG_VIDEO_ADV7175=m
+CONFIG_VIDEO_ADV7511=m
 
 #
 # Camera sensor devices
@@ -4886,6 +4953,7 @@ CONFIG_DVB_TDA826X=m
 CONFIG_DVB_TUA6100=m
 CONFIG_DVB_CX24116=m
 CONFIG_DVB_CX24117=m
+CONFIG_DVB_CX24120=m
 CONFIG_DVB_SI21XX=m
 CONFIG_DVB_TS2020=m
 CONFIG_DVB_DS3000=m
@@ -5022,6 +5090,9 @@ CONFIG_DRM_R128=m
 CONFIG_DRM_RADEON=m
 # CONFIG_DRM_RADEON_USERPTR is not set
 # CONFIG_DRM_RADEON_UMS is not set
+CONFIG_DRM_AMDGPU=m
+CONFIG_DRM_AMDGPU_CIK=y
+CONFIG_DRM_AMDGPU_USERPTR=y
 CONFIG_DRM_NOUVEAU=m
 CONFIG_NOUVEAU_DEBUG=5
 CONFIG_NOUVEAU_DEBUG_DEFAULT=3
@@ -5030,7 +5101,7 @@ CONFIG_DRM_I810=m
 CONFIG_DRM_I915=m
 CONFIG_DRM_I915_KMS=y
 CONFIG_DRM_I915_FBDEV=y
-CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y
+# CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set
 CONFIG_DRM_MGA=m
 CONFIG_DRM_SIS=m
 CONFIG_DRM_VIA=m
@@ -5047,6 +5118,7 @@ CONFIG_DRM_AST=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_QXL=m
 # CONFIG_DRM_BOCHS is not set
+CONFIG_DRM_VIRTIO_GPU=m
 CONFIG_DRM_PANEL=y
 
 #
@@ -5249,11 +5321,11 @@ CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
 CONFIG_SND_DYNAMIC_MINORS=y
 CONFIG_SND_MAX_CARDS=32
 CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_PROC_FS=y
 CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_VERBOSE_PRINTK is not set
 # CONFIG_SND_DEBUG is not set
 CONFIG_SND_VMASTER=y
-CONFIG_SND_KCTL_JACK=y
 CONFIG_SND_DMA_SGBUF=y
 CONFIG_SND_RAWMIDI_SEQ=m
 CONFIG_SND_OPL3_LIB_SEQ=m
@@ -5355,20 +5427,16 @@ CONFIG_SND_YMFPCI=m
 #
 CONFIG_SND_HDA=m
 CONFIG_SND_HDA_INTEL=m
-CONFIG_SND_HDA_DSP_LOADER=y
-CONFIG_SND_HDA_PREALLOC_SIZE=64
 CONFIG_SND_HDA_HWDEP=y
 CONFIG_SND_HDA_RECONFIG=y
 CONFIG_SND_HDA_INPUT_BEEP=y
 CONFIG_SND_HDA_INPUT_BEEP_MODE=0
-CONFIG_SND_HDA_INPUT_JACK=y
 CONFIG_SND_HDA_PATCH_LOADER=y
 CONFIG_SND_HDA_CODEC_REALTEK=m
 CONFIG_SND_HDA_CODEC_ANALOG=m
 CONFIG_SND_HDA_CODEC_SIGMATEL=m
 CONFIG_SND_HDA_CODEC_VIA=m
 CONFIG_SND_HDA_CODEC_HDMI=m
-CONFIG_SND_HDA_I915=y
 CONFIG_SND_HDA_CODEC_CIRRUS=m
 CONFIG_SND_HDA_CODEC_CONEXANT=m
 CONFIG_SND_HDA_CODEC_CA0110=m
@@ -5379,6 +5447,9 @@ CONFIG_SND_HDA_CODEC_SI3054=m
 CONFIG_SND_HDA_GENERIC=m
 CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
 CONFIG_SND_HDA_CORE=m
+CONFIG_SND_HDA_DSP_LOADER=y
+CONFIG_SND_HDA_I915=y
+CONFIG_SND_HDA_PREALLOC_SIZE=64
 CONFIG_SND_SPI=y
 CONFIG_SND_USB=y
 CONFIG_SND_USB_AUDIO=m
@@ -5407,6 +5478,7 @@ CONFIG_SND_PCMCIA=y
 CONFIG_SND_VXPOCKET=m
 CONFIG_SND_PDAUDIOCF=m
 CONFIG_SND_SOC=m
+CONFIG_SND_SOC_AC97_BUS=y
 CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
 CONFIG_SND_ATMEL_SOC=m
 CONFIG_SND_DESIGNWARE_I2S=m
@@ -5438,6 +5510,7 @@ CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
 CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
 CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
 CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
 CONFIG_SND_SOC_QCOM=m
 CONFIG_SND_SOC_XTFPGA_I2S=m
 CONFIG_SND_SOC_I2C_AND_SPI=m
@@ -5445,6 +5518,7 @@ CONFIG_SND_SOC_I2C_AND_SPI=m
 #
 # CODEC drivers
 #
+CONFIG_SND_SOC_AC97_CODEC=m
 CONFIG_SND_SOC_ADAU1701=m
 CONFIG_SND_SOC_AK4104=m
 CONFIG_SND_SOC_AK4554=m
@@ -5473,6 +5547,7 @@ CONFIG_SND_SOC_PCM512x=m
 CONFIG_SND_SOC_PCM512x_I2C=m
 CONFIG_SND_SOC_PCM512x_SPI=m
 CONFIG_SND_SOC_RL6231=m
+CONFIG_SND_SOC_RL6347A=m
 CONFIG_SND_SOC_RT286=m
 CONFIG_SND_SOC_RT5631=m
 CONFIG_SND_SOC_RT5640=m
@@ -5493,6 +5568,7 @@ CONFIG_SND_SOC_STA32X=m
 CONFIG_SND_SOC_STA350=m
 CONFIG_SND_SOC_TAS2552=m
 CONFIG_SND_SOC_TAS5086=m
+CONFIG_SND_SOC_TAS571X=m
 CONFIG_SND_SOC_TFA9879=m
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC23_I2C=m
@@ -5653,6 +5729,7 @@ CONFIG_USB_DYNAMIC_MINORS=y
 # CONFIG_USB_OTG_WHITELIST is not set
 # CONFIG_USB_OTG_BLACKLIST_HUB is not set
 # CONFIG_USB_OTG_FSM is not set
+CONFIG_USB_ULPI_BUS=m
 CONFIG_USB_MON=m
 CONFIG_USB_WUSB=m
 CONFIG_USB_WUSB_CBAF=m
@@ -5743,6 +5820,7 @@ CONFIG_USB_MUSB_DUAL_ROLE=y
 #
 CONFIG_MUSB_PIO_ONLY=y
 CONFIG_USB_DWC3=m
+CONFIG_USB_DWC3_ULPI=y
 # CONFIG_USB_DWC3_HOST is not set
 # CONFIG_USB_DWC3_GADGET is not set
 CONFIG_USB_DWC3_DUAL_ROLE=y
@@ -5762,7 +5840,6 @@ CONFIG_USB_DWC2_HOST=y
 #
 # Gadget/Dual-role mode requires USB Gadget support to be enabled
 #
-CONFIG_USB_DWC2_PLATFORM=y
 CONFIG_USB_DWC2_PCI=y
 # CONFIG_USB_DWC2_DEBUG is not set
 # CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
@@ -6027,6 +6104,7 @@ CONFIG_MMC_USDHI6ROL0=m
 CONFIG_MMC_REALTEK_PCI=m
 CONFIG_MMC_REALTEK_USB=m
 CONFIG_MMC_TOSHIBA_PCI=m
+CONFIG_MMC_MTK=m
 CONFIG_MEMSTICK=m
 # CONFIG_MEMSTICK_DEBUG is not set
 
@@ -6060,11 +6138,10 @@ CONFIG_LEDS_PCA9532=m
 CONFIG_LEDS_PCA9532_GPIO=y
 CONFIG_LEDS_GPIO=m
 CONFIG_LEDS_LP3944=m
-CONFIG_LEDS_LP55XX_COMMON=m
-CONFIG_LEDS_LP5521=m
-CONFIG_LEDS_LP5523=m
-CONFIG_LEDS_LP5562=m
-CONFIG_LEDS_LP8501=m
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_LP5562 is not set
+# CONFIG_LEDS_LP8501 is not set
 CONFIG_LEDS_LP8788=m
 CONFIG_LEDS_LP8860=m
 CONFIG_LEDS_CLEVO_MAIL=m
@@ -6084,6 +6161,7 @@ CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_DELL_NETBOOKS=m
 CONFIG_LEDS_MC13783=m
 CONFIG_LEDS_TCA6507=m
+CONFIG_LEDS_TLC591XX=m
 CONFIG_LEDS_MAX8997=m
 CONFIG_LEDS_LM355x=m
 CONFIG_LEDS_MENF21BMC=m
@@ -6141,6 +6219,8 @@ CONFIG_INFINIBAND_SRP=m
 CONFIG_INFINIBAND_SRPT=m
 CONFIG_INFINIBAND_ISER=m
 CONFIG_INFINIBAND_ISERT=m
+CONFIG_EDAC_ATOMIC_SCRUB=y
+CONFIG_EDAC_SUPPORT=y
 CONFIG_EDAC=y
 # CONFIG_EDAC_LEGACY_SYSFS is not set
 # CONFIG_EDAC_DEBUG is not set
@@ -6164,8 +6244,9 @@ CONFIG_EDAC_SBRIDGE=m
 CONFIG_RTC_LIB=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_SYSTOHC=y
 CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_SYSTOHC=y
+CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
 # CONFIG_RTC_DEBUG is not set
 
 #
@@ -6277,7 +6358,7 @@ CONFIG_RTC_DRV_AB3100=m
 #
 CONFIG_RTC_DRV_PCAP=m
 CONFIG_RTC_DRV_MC13XXX=m
-CONFIG_RTC_DRV_XGENE=y
+CONFIG_RTC_DRV_MT6397=m
 
 #
 # HID Sensor RTC drivers
@@ -6321,6 +6402,7 @@ CONFIG_UIO_AEC=m
 CONFIG_UIO_SERCOS3=m
 CONFIG_UIO_PCI_GENERIC=m
 CONFIG_UIO_NETX=m
+CONFIG_UIO_PRUSS=m
 CONFIG_UIO_MF624=m
 CONFIG_VFIO_IOMMU_TYPE1=m
 CONFIG_VFIO_VIRQFD=m
@@ -6507,6 +6589,7 @@ CONFIG_COMEDI_USBDUXSIGMA=m
 CONFIG_COMEDI_VMK80XX=m
 CONFIG_COMEDI_8254=m
 CONFIG_COMEDI_8255=m
+CONFIG_COMEDI_8255_SA=m
 CONFIG_COMEDI_KCOMEDILIB=m
 CONFIG_COMEDI_AMPLC_DIO200=m
 CONFIG_COMEDI_AMPLC_PC236=m
@@ -6658,9 +6741,6 @@ CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m
 CONFIG_STAGING_MEDIA=y
 CONFIG_I2C_BCM2048=m
 CONFIG_DVB_CXD2099=m
-CONFIG_VIDEO_DT3155=m
-# CONFIG_DT3155_CCIR is not set
-CONFIG_DT3155_STREAMING=y
 CONFIG_DVB_MN88472=m
 CONFIG_DVB_MN88473=m
 CONFIG_LIRC_STAGING=y
@@ -6703,18 +6783,15 @@ CONFIG_DGAP=m
 CONFIG_GS_FPGABOOT=m
 CONFIG_CRYPTO_SKEIN=y
 CONFIG_UNISYSSPAR=y
-CONFIG_UNISYS_VISORUTIL=m
-CONFIG_UNISYS_VISORCHANNEL=m
-CONFIG_UNISYS_VISORCHIPSET=m
-CONFIG_UNISYS_UISLIB=m
-CONFIG_UNISYS_VIRTPCI=m
-CONFIG_UNISYS_VIRTHBA=m
+CONFIG_UNISYS_VISORBUS=m
+CONFIG_UNISYS_VISORNIC=m
 CONFIG_FB_TFT=m
 CONFIG_FB_TFT_AGM1264K_FL=m
 CONFIG_FB_TFT_BD663474=m
 CONFIG_FB_TFT_HX8340BN=m
 CONFIG_FB_TFT_HX8347D=m
 CONFIG_FB_TFT_HX8353D=m
+CONFIG_FB_TFT_HX8357D=m
 CONFIG_FB_TFT_ILI9163=m
 CONFIG_FB_TFT_ILI9320=m
 CONFIG_FB_TFT_ILI9325=m
@@ -6738,16 +6815,6 @@ CONFIG_FB_TFT_UPD161704=m
 CONFIG_FB_TFT_WATTEROTT=m
 CONFIG_FB_FLEX=m
 CONFIG_FB_TFT_FBTFT_DEVICE=m
-CONFIG_I2O=m
-CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
-CONFIG_I2O_EXT_ADAPTEC=y
-CONFIG_I2O_EXT_ADAPTEC_DMA64=y
-CONFIG_I2O_CONFIG=m
-# CONFIG_I2O_CONFIG_OLD_IOCTL is not set
-CONFIG_I2O_BUS=m
-CONFIG_I2O_BLOCK=m
-CONFIG_I2O_SCSI=m
-CONFIG_I2O_PROC=m
 CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACER_WMI=m
 CONFIG_ACERHDF=m
@@ -6757,6 +6824,7 @@ CONFIG_DELL_LAPTOP=m
 CONFIG_DELL_WMI=m
 CONFIG_DELL_WMI_AIO=m
 CONFIG_DELL_SMO8800=m
+CONFIG_DELL_RBTN=m
 CONFIG_FUJITSU_LAPTOP=m
 # CONFIG_FUJITSU_LAPTOP_DEBUG is not set
 CONFIG_FUJITSU_TABLET=m
@@ -6800,11 +6868,13 @@ CONFIG_APPLE_GMUX=m
 CONFIG_INTEL_RST=m
 CONFIG_INTEL_SMARTCONNECT=m
 CONFIG_PVPANIC=m
+CONFIG_INTEL_PMC_IPC=m
 CONFIG_CHROME_PLATFORMS=y
 CONFIG_CHROMEOS_LAPTOP=m
 CONFIG_CHROMEOS_PSTORE=m
 CONFIG_CROS_EC_CHARDEV=m
 CONFIG_CROS_EC_LPC=m
+CONFIG_CROS_EC_PROTO=y
 CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
@@ -6868,6 +6938,7 @@ CONFIG_STE_MODEM_RPROC=m
 #
 # SOC (System On Chip) specific Drivers
 #
+# CONFIG_SUNXI_SRAM is not set
 CONFIG_SOC_TI=y
 CONFIG_PM_DEVFREQ=y
 
@@ -6890,6 +6961,7 @@ CONFIG_EXTCON=y
 #
 CONFIG_EXTCON_ADC_JACK=m
 CONFIG_EXTCON_ARIZONA=m
+CONFIG_EXTCON_AXP288=m
 CONFIG_EXTCON_GPIO=m
 CONFIG_EXTCON_MAX14577=m
 CONFIG_EXTCON_MAX77693=m
@@ -6923,6 +6995,8 @@ CONFIG_KXCJK1013=m
 CONFIG_MMA9551_CORE=m
 CONFIG_MMA9551=m
 CONFIG_MMA9553=m
+CONFIG_STK8312=m
+CONFIG_STK8BA50=m
 
 #
 # Analog to digital converters
@@ -6992,6 +7066,7 @@ CONFIG_AD5755=m
 CONFIG_AD5764=m
 CONFIG_AD5791=m
 CONFIG_AD7303=m
+CONFIG_M62332=m
 CONFIG_MAX517=m
 CONFIG_MCP4725=m
 CONFIG_MCP4922=m
@@ -7045,9 +7120,11 @@ CONFIG_IIO_ADIS_LIB_BUFFER=y
 #
 # Light sensors
 #
+CONFIG_ACPI_ALS=m
 CONFIG_ADJD_S311=m
 CONFIG_AL3320A=m
 CONFIG_APDS9300=m
+CONFIG_BH1750=m
 CONFIG_CM32181=m
 CONFIG_CM3232=m
 CONFIG_CM3323=m
@@ -7059,6 +7136,7 @@ CONFIG_HID_SENSOR_PROX=m
 CONFIG_JSA1212=m
 CONFIG_SENSORS_LM3533=m
 CONFIG_LTR501=m
+CONFIG_STK3310=m
 CONFIG_TCS3414=m
 CONFIG_TCS3472=m
 CONFIG_SENSORS_TSL2563=m
@@ -7072,9 +7150,11 @@ CONFIG_AK8975=m
 CONFIG_AK09911=m
 CONFIG_MAG3110=m
 CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
+CONFIG_MMC35240=m
 CONFIG_IIO_ST_MAGN_3AXIS=m
 CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
 CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
+CONFIG_BMC150_MAGN=m
 
 #
 # Inclinometer sensors
@@ -7119,6 +7199,10 @@ CONFIG_SX9500=m
 CONFIG_MLX90614=m
 CONFIG_TMP006=m
 CONFIG_NTB=m
+CONFIG_NTB_INTEL=m
+CONFIG_NTB_PINGPONG=m
+CONFIG_NTB_TOOL=m
+CONFIG_NTB_TRANSPORT=m
 CONFIG_VME_BUS=y
 
 #
@@ -7159,11 +7243,14 @@ CONFIG_FMC_CHARDEV=m
 # PHY Subsystem
 #
 CONFIG_GENERIC_PHY=y
+CONFIG_PHY_PXA_28NM_HSIC=m
+CONFIG_PHY_PXA_28NM_USB2=m
 CONFIG_BCM_KONA_USB2_PHY=m
 CONFIG_PHY_SAMSUNG_USB2=m
 # CONFIG_PHY_EXYNOS4210_USB2 is not set
 # CONFIG_PHY_EXYNOS4X12_USB2 is not set
 # CONFIG_PHY_EXYNOS5250_USB2 is not set
+CONFIG_PHY_TUSB1210=m
 CONFIG_POWERCAP=y
 CONFIG_INTEL_RAPL=m
 CONFIG_MCB=m
@@ -7175,6 +7262,11 @@ CONFIG_THUNDERBOLT=m
 # Android
 #
 # CONFIG_ANDROID is not set
+CONFIG_LIBNVDIMM=y
+CONFIG_BLK_DEV_PMEM=m
+CONFIG_ND_BLK=m
+CONFIG_ND_BTT=m
+CONFIG_BTT=y
 
 #
 # Firmware Drivers
@@ -7195,6 +7287,7 @@ CONFIG_ISCSI_IBFT=m
 # EFI (Extensible Firmware Interface) Support
 #
 CONFIG_EFI_VARS=y
+CONFIG_EFI_ESRT=y
 CONFIG_EFI_VARS_PSTORE=m
 # CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
 CONFIG_EFI_RUNTIME_MAP=y
@@ -7255,6 +7348,7 @@ CONFIG_F2FS_FS_XATTR=y
 CONFIG_F2FS_FS_POSIX_ACL=y
 CONFIG_F2FS_FS_SECURITY=y
 # CONFIG_F2FS_CHECK_FS is not set
+CONFIG_F2FS_FS_ENCRYPTION=y
 # CONFIG_F2FS_IO_TRACE is not set
 CONFIG_FS_DAX=y
 CONFIG_FS_POSIX_ACL=y
@@ -7320,6 +7414,7 @@ CONFIG_PROC_KCORE=y
 CONFIG_PROC_VMCORE=y
 CONFIG_PROC_SYSCTL=y
 CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_PROC_CHILDREN=y
 CONFIG_KERNFS=y
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
@@ -7442,8 +7537,7 @@ CONFIG_SUNRPC_BACKCHANNEL=y
 CONFIG_SUNRPC_SWAP=y
 CONFIG_RPCSEC_GSS_KRB5=m
 CONFIG_SUNRPC_DEBUG=y
-CONFIG_SUNRPC_XPRT_RDMA_CLIENT=m
-CONFIG_SUNRPC_XPRT_RDMA_SERVER=m
+CONFIG_SUNRPC_XPRT_RDMA=m
 CONFIG_CEPH_FS=m
 CONFIG_CEPH_FSCACHE=y
 CONFIG_CEPH_FS_POSIX_ACL=y
@@ -7459,6 +7553,7 @@ CONFIG_CIFS_DEBUG=y
 # CONFIG_CIFS_DEBUG2 is not set
 CONFIG_CIFS_DFS_UPCALL=y
 CONFIG_CIFS_SMB2=y
+CONFIG_CIFS_SMB311=y
 CONFIG_CIFS_FSCACHE=y
 CONFIG_NCP_FS=m
 CONFIG_NCPFS_PACKET_SIGNING=y
@@ -7586,7 +7681,6 @@ CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
 CONFIG_HAVE_ARCH_KMEMCHECK=y
 CONFIG_HAVE_ARCH_KASAN=y
 # CONFIG_KASAN is not set
-CONFIG_KASAN_SHADOW_OFFSET=0xdffffc0000000000
 # CONFIG_DEBUG_SHIRQ is not set
 
 #
@@ -7606,6 +7700,7 @@ CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
 CONFIG_PANIC_ON_OOPS_VALUE=0
 CONFIG_PANIC_TIMEOUT=0
 CONFIG_SCHED_DEBUG=y
+CONFIG_SCHED_INFO=y
 CONFIG_SCHEDSTATS=y
 CONFIG_SCHED_STACK_END_CHECK=y
 # CONFIG_DEBUG_TIMEKEEPING is not set
@@ -7643,6 +7738,7 @@ CONFIG_TORTURE_TEST=m
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_CPU_STALL_INFO is not set
 # CONFIG_RCU_TRACE is not set
+# CONFIG_RCU_EQS_DEBUG is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 CONFIG_NOTIFIER_ERROR_INJECTION=m
 CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
@@ -7762,8 +7858,11 @@ CONFIG_DEFAULT_IO_DELAY_TYPE=1
 # CONFIG_DEBUG_BOOT_PARAMS is not set
 # CONFIG_CPA_DEBUG is not set
 CONFIG_OPTIMIZE_INLINING=y
+# CONFIG_DEBUG_ENTRY is not set
 # CONFIG_DEBUG_NMI_SELFTEST is not set
 # CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set
+CONFIG_X86_DEBUG_FPU=y
+CONFIG_PUNIT_ATOM_DEBUG=m
 
 #
 # Security options
@@ -7853,8 +7952,12 @@ CONFIG_CRYPTO_HASH=y
 CONFIG_CRYPTO_HASH2=y
 CONFIG_CRYPTO_RNG=y
 CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_RNG_DEFAULT=m
 CONFIG_CRYPTO_PCOMP=m
 CONFIG_CRYPTO_PCOMP2=y
+CONFIG_CRYPTO_AKCIPHER2=y
+CONFIG_CRYPTO_AKCIPHER=m
+CONFIG_CRYPTO_RSA=m
 CONFIG_CRYPTO_MANAGER=y
 CONFIG_CRYPTO_MANAGER2=y
 CONFIG_CRYPTO_USER=m
@@ -7875,7 +7978,9 @@ CONFIG_CRYPTO_GLUE_HELPER_X86=m
 #
 CONFIG_CRYPTO_CCM=m
 CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_CHACHA20POLY1305=m
 CONFIG_CRYPTO_SEQIV=m
+CONFIG_CRYPTO_ECHAINIV=m
 
 #
 # Block modes
@@ -7906,6 +8011,7 @@ CONFIG_CRYPTO_CRC32_PCLMUL=m
 CONFIG_CRYPTO_CRCT10DIF=y
 CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m
 CONFIG_CRYPTO_GHASH=m
+CONFIG_CRYPTO_POLY1305=m
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_MICHAEL_MIC=m
@@ -7950,6 +8056,7 @@ CONFIG_CRYPTO_FCRYPT=m
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_SALSA20=m
 CONFIG_CRYPTO_SALSA20_X86_64=m
+CONFIG_CRYPTO_CHACHA20=m
 CONFIG_CRYPTO_SEED=m
 CONFIG_CRYPTO_SERPENT=m
 CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
@@ -7968,6 +8075,7 @@ CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_ZLIB=m
 CONFIG_CRYPTO_LZO=y
+CONFIG_CRYPTO_842=m
 CONFIG_CRYPTO_LZ4=m
 CONFIG_CRYPTO_LZ4HC=m
 
@@ -7980,10 +8088,12 @@ CONFIG_CRYPTO_DRBG_HMAC=y
 CONFIG_CRYPTO_DRBG_HASH=y
 CONFIG_CRYPTO_DRBG_CTR=y
 CONFIG_CRYPTO_DRBG=m
+CONFIG_CRYPTO_JITTERENTROPY=m
 CONFIG_CRYPTO_USER_API=m
 CONFIG_CRYPTO_USER_API_HASH=m
 CONFIG_CRYPTO_USER_API_SKCIPHER=m
 CONFIG_CRYPTO_USER_API_RNG=m
+CONFIG_CRYPTO_USER_API_AEAD=m
 CONFIG_CRYPTO_HASH_INFO=y
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_PADLOCK=y
@@ -8053,6 +8163,8 @@ CONFIG_LIBCRC32C=m
 CONFIG_CRC8=m
 # CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set
 # CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_842_COMPRESS=m
+CONFIG_842_DECOMPRESS=m
 CONFIG_ZLIB_INFLATE=y
 CONFIG_ZLIB_DEFLATE=y
 CONFIG_LZO_COMPRESS=y
@@ -8112,3 +8224,4 @@ CONFIG_FONT_SUPPORT=y
 CONFIG_FONT_8x8=y
 CONFIG_FONT_8x16=y
 CONFIG_ARCH_HAS_SG_CHAIN=y
+CONFIG_ARCH_HAS_PMEM_API=y
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index c863592332..9da3a21427 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -210,7 +210,7 @@ for SYSTEM, or #f if there is no configuration for SYSTEM."
      #f)))
 
 (define-public linux-libre
-  (let* ((version "4.1.6")
+  (let* ((version "4.2")
          (build-phase
           '(lambda* (#:key system inputs #:allow-other-keys #:rest args)
              ;; Apply the neat patch.
@@ -283,7 +283,7 @@ for SYSTEM, or #f if there is no configuration for SYSTEM."
              (uri (linux-libre-urls version))
              (sha256
               (base32
-               "07gmpy32v90bx78bm1khc1hw7x0akdh2sxpkxkavwj4fjc6f732v"))))
+               "0jfgbr9qc92bk7hyfdvw030xyic2bg834l8cxp25rw9qbbdck3rs"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)
                      ("bc" ,bc)
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 6e0cfdfd32..5853b370ac 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -405,6 +405,40 @@ attachments, create new maildirs, and so on.")
 ing, and tagging large collections of email messages.")
     (license gpl3+)))
 
+(define-public python2-notmuch
+  (package
+    (name "python2-notmuch")
+    (version "0.15.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://pypi.python.org/packages/source/n/notmuch/notmuch-"
+                    version
+                    ".tar.gz"))
+              (sha256
+               (base32
+                "18g8701ibr153ngsz258kgcd42wqnbf9ifpqig1bijy6b0zx9xn5"))))
+    (build-system python-build-system)
+    (inputs `(("notmuch" ,notmuch)))
+    (arguments
+     `(#:python ,python-2
+       #:phases (modify-phases %standard-phases
+                  (add-before
+                   'build 'set-libnotmuch-file-name
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (let ((notmuch (assoc-ref inputs "notmuch")))
+                       (substitute* "notmuch/globals.py"
+                         (("libnotmuch\\.so\\.[0-9]")
+                          (string-append notmuch "/lib/libnotmuch.so.4")))
+                       #t))))
+       #:tests? #f))                              ;no "test" target
+    (home-page "http://notmuchmail.org/")
+    (synopsis "Python bindings of the Notmuch mail indexing library")
+    (description
+     "This package provides Python bindings to use the Notmuch mail indexing
+and search library.")
+    (license gpl3+)))
+
 (define-public getmail
   (package
     (name "getmail")
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index 91f8bf8955..b3c86dbebf 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -269,7 +269,7 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (synopsis "Statically-linked bootstrap binaries")
     (description
      "Binaries used to bootstrap the distribution.")
-    (license #f)
+    (license gpl3+)
     (home-page #f)))
 
 (define %binutils-static
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 11ffe4e781..45fda144be 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -1926,3 +1926,39 @@ in finite element programs.")
            "-DMPI_Fortran_COMPILER=mpifort"
            ,@,cf))))
     (synopsis "Finite element library (with MPI support)")))
+
+(define-public flann
+  (package
+    (name "flann")
+    (version "1.8.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri
+          (string-append
+            "http://www.cs.ubc.ca/research/flann/uploads/FLANN/flann-"
+            version "-src.zip"))
+        (sha256
+          (base32
+            "022w8hph7bli5zbpnk3z1qh1c2sl5hm8fw2ccim651ynn0hr7fyz"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (inputs
+     `(("hdf5" ,hdf5)
+       ("octave" ,octave)
+       ("python" ,python-2) ; print syntax
+       ;; ("python2-numpy" ,python2-numpy) ; only required for the tests
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:tests? #f)) ; The test data are downloaded from the Internet.
+    (home-page "http://www.cs.ubc.ca/research/flann/")
+    (synopsis "Library for approximate nearest neighbors computation")
+    (description "FLANN is a library for performing fast approximate
+nearest neighbor searches in high dimensional spaces.  It implements a
+collection of algorithms and a system for automatically choosing the best
+algorithm and optimum parameters depending on the dataset.
+
+FLANN is written in C++ and contains bindings for C, Octave and Python.")
+    (license (license:non-copyleft "file://COPYING"
+                                "See COPYING in the distribution."))))
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index fa8cccbb35..05a490574b 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -24,8 +24,10 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system python)
   #:use-module (guix build-system waf)
   #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base) ;libbdf
@@ -54,6 +56,7 @@
   #:use-module (gnu packages man)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages netpbm)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio) ;libsndfile
@@ -66,6 +69,7 @@
   #:use-module (gnu packages texlive)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages zip)
   #:use-module ((srfi srfi-1) #:select (last)))
@@ -647,3 +651,65 @@ equipment.  Pd is suitable for learning basic multimedia processing and visual
 programming methods as well as for realizing complex systems for large-scale
 projects.")
     (license license:bsd-3)))
+
+(define-public frescobaldi
+  (package
+    (name "frescobaldi")
+    (version "2.18.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/wbsoft/frescobaldi/releases/download/v"
+                    version "/frescobaldi-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1hflc6gck6dn17czc2ldai5j0ynfg3df8lqcggdry06qxsdbnns7"))))
+    (build-system python-build-system)
+    (inputs
+     `(("lilypond" ,lilypond)
+       ("python-pyqt-4" ,python-pyqt-4)
+       ("python-ly" ,python-ly)
+       ("poppler" ,poppler)
+       ("python-poppler-qt4" ,python-poppler-qt4)
+       ("python-sip" ,python-sip)))
+    (home-page "http://www.frescobaldi.org/")
+    (synopsis "LilyPond sheet music text editor")
+    (description
+     "Frescobaldi is a LilyPond sheet music text editor with syntax
+highlighting and automatic completion.  Among other things, it can render
+scores next to the source, can capture input from MIDI or read MusicXML and
+ABC files, has a MIDI player for proof-listening, and includes a documentation
+browser.")
+    (license license:gpl2+)))
+
+(define-public zynaddsubfx
+  (package
+    (name "zynaddsubfx")
+    (version "2.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/zynaddsubfx/zynaddsubfx/"
+                    version "/zynaddsubfx-" version ".tar.gz"))
+              (sha256
+               (base32
+                "01c4v5lbzard6y00cjq3b6a50cafqwfwibzng9gdsajczhnbkqz2"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("liblo" ,liblo)
+       ("ntk" ,ntk)
+       ("alsa-lib" ,alsa-lib)
+       ("jack" ,jack-1)
+       ("fftw" ,fftw)
+       ("minixml" ,minixml)
+       ("libxpm" ,libxpm)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://zynaddsubfx.sf.net/")
+    (synopsis "Software synthesizer")
+    (description
+     "ZynAddSubFX is a feature heavy realtime software synthesizer.  It offers
+three synthesizer engines, multitimbral and polyphonic synths, microtonal
+capabilities, custom envelopes, effects, etc.")
+    (license license:gpl2)))
diff --git a/gnu/packages/ncdu.scm b/gnu/packages/ncdu.scm
index 6c3d6178c3..da4b587822 100644
--- a/gnu/packages/ncdu.scm
+++ b/gnu/packages/ncdu.scm
@@ -26,23 +26,24 @@
 
 (define-public ncdu
   (package
-   (name "ncdu")
-   (version "1.10")
-   (source (origin
-	    (method url-fetch)
-	    (uri (string-append "http://dev.yorhel.nl/download/ncdu-"
-				version ".tar.gz"))
-	    (sha256
-	     (base32
-	      "0rqc5wpqcbfqpcwxgh3jxwa0yw2py0hv0acpsf0a9g6v9144m6gm"))))
-   (inputs
-    `(("ncurses" ,ncurses)))
-   (build-system gnu-build-system)
-   (synopsis "Ncurses based disk usage analyzer")
-   (description "A disk usage analyzer with an ncurses interface, aimed to be
+    (name "ncdu")
+    (version "1.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://dev.yorhel.nl/download/ncdu-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0yxv87hpal05p6nii6rlnai5a8958689l9vz020w4qvlwiragbnh"))))
+    (build-system gnu-build-system)
+    (inputs `(("ncurses" ,ncurses)))
+    (synopsis "Ncurses based disk usage analyzer")
+    (description "A disk usage analyzer with an ncurses interface, aimed to be
 run on a remote server where you don't have an entire graphical setup, but have
 to do with a simple SSH connection. ncdu aims to be fast, simple and easy to
 use, and should be able to run in any minimal POSIX-like environment with
 ncurses installed.")
-   (license (x11-style "http://g.blicky.net/ncdu.git/plain/COPYING?id=v1.10"))
-   (home-page "http://dev.yorhel.nl/ncdu")))
+    (license (x11-style
+              (string-append "http://g.blicky.net/ncdu.git/plain/COPYING?id=v"
+                             version)))
+    (home-page "http://dev.yorhel.nl/ncdu")))
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
new file mode 100644
index 0000000000..91686441ba
--- /dev/null
+++ b/gnu/packages/openstack.scm
@@ -0,0 +1,216 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages openstack)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages version-control)
+  #:use-module (guix build-system python)
+  #:use-module (guix download)
+  #:use-module ((guix licenses)
+                #:select (asl2.0))
+  #:use-module (guix packages))
+
+(define-public python-mox3
+  (package
+    (name "python-mox3")
+    (version "0.8.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://pypi.python.org/packages/source/m/mox3/mox3-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1dwj9lkifdqvrcympqa47bj55l0n0j9jhzv2gj03h0dpzg6mgfkj"))))
+    (build-system python-build-system)
+    (inputs
+      `(("python-fixtures" ,python-fixtures)
+        ("python-pbr" ,python-pbr)
+        ("python-setuptools" ,python-setuptools)
+        ("python-six" ,python-six)
+        ("python-testtools" ,python-testtools)))
+    (home-page "http://www.openstack.org/")
+    (synopsis "Mock object framework for Python")
+    (description
+      "Mox3 is an unofficial port of the Google mox framework
+(http://code.google.com/p/pymox/) to Python 3. It was meant to be as compatible
+with mox as possible, but small enhancements have been made. The library was
+tested on Python version 3.2, 2.7 and 2.6.")
+    (license asl2.0)))
+
+(define-public python-os-client-config
+  (package
+    (name "python-os-client-config")
+    (version "1.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://pypi.python.org/packages/source/o/os-client-config/os-client-config-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "14png6ml3zbbilh8bihav24f8vig9lyijwynnjcvazdxxrzvwq9j"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ;; Circular dependency with python-oslotest
+    (inputs
+      `(("python-appdirs" ,python-appdirs)
+        ("python-fixtures" ,python-fixtures)
+        ("python-mimeparse" ,python-mimeparse)
+        ("python-pbr" ,python-pbr)
+        ("python-pyyaml" ,python-pyyaml)
+        ("python-testrepository" ,python-testrepository)
+        ("python-setuptools" ,python-setuptools)
+        ("python-testscenarios" ,python-testscenarios)
+        ("python-testtools" ,python-testtools)))
+    (home-page "http://www.openstack.org/")
+    (synopsis
+      "OpenStack Client Configuration Library")
+    (description
+      "The OpenStack Client Configuration Library is a library for collecting
+  client configuration for using an OpenStack cloud in a consistent and
+  comprehensive manner.")
+    (license asl2.0)))
+
+(define-public python2-os-client-config
+  (package-with-python2 python-os-client-config))
+
+(define-public python2-mox3
+  (package-with-python2 python-mox3))
+
+(define-public python-pbr
+  (package
+    (name "python-pbr")
+    (version "1.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://pypi.python.org/packages/source/p/pbr/pbr-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1lg1klrczvzfan89y3bl9ykrknl3nb01vvai37fkww24apzyibjf"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ;; Most tests seem to use the Internet.
+    (propagated-inputs
+      `(("python-testrepository" ,python-testrepository)
+        ("git" ,git))) ;; pbr actually uses the "git" binary.
+    (inputs
+      `(("python-fixtures" ,python-fixtures)
+        ("python-mimeparse" ,python-mimeparse)
+        ("python-mock" ,python-mock)
+        ("python-setuptools" ,python-setuptools)
+        ("python-six" ,python-six)
+        ("python-sphinx" ,python-sphinx)
+        ("python-testrepository" ,python-testrepository)
+        ("python-testresources" ,python-testresources)
+        ("python-testscenarios" ,python-testscenarios)
+        ("python-testtools" ,python-testtools)
+        ("python-virtualenv" ,python-virtualenv)))
+    (home-page "https://launchpad.net/pbr")
+    (synopsis "Change the default behavior of Python’s setuptools")
+    (description
+      "Python Build Reasonableness (PBR) is a library that injects some useful
+and sensible default behaviors into your setuptools run.")
+    (license asl2.0)))
+
+(define-public python2-pbr
+  (package-with-python2 python-pbr))
+
+;; Packages from the Oslo library
+(define-public python-oslo.i18n
+  (package
+    (name "python-oslo.i18n")
+    (version "2.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://pypi.python.org/packages/source/o/oslo.i18n/oslo.i18n-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1kg72mqldlri3x0bhxai7j979czrd7mf8s3iflvvv0x9kn9ah4cw"))))
+    (build-system python-build-system)
+    (propagated-inputs
+      `(("python-babel" ,python-babel)
+        ("python-six" ,python-six)))
+    (inputs
+      `(("python-pbr" ,python-pbr)
+        ("python-setuptools" ,python-setuptools)
+        ;; Tests
+        ("python-mock" ,python-mock)
+        ("python-mox3" ,python-mox3)
+        ("python-oslotest" ,python-oslotest)
+        ("python-testscenarios" ,python-testscenarios)))
+    (home-page "http://launchpad.net/oslo")
+    (synopsis "Oslo internationalization (i18n) library")
+    (description
+      "The oslo.i18n library contain utilities for working with
+internationalization (i18n) features, especially translation for text strings
+in an application or library.")
+    (license asl2.0)))
+
+(define-public python2-oslo.i18n
+  (package-with-python2 python-oslo.i18n))
+
+(define-public python-oslotest
+  (package
+    (name "python-oslotest")
+    (version "1.10.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://pypi.python.org/packages/source/o/oslotest/oslotest-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0l3ny48ddz5xbf0v4r0jv1yhbdzinc2vy0lybhdkmx3xy0b886fs"))))
+    (build-system python-build-system)
+    (propagated-inputs
+      `(("python-fixtures" ,python-fixtures)
+        ("python-mock" ,python-mock)
+        ("python-six" ,python-six)))
+    (inputs
+      `(("python-pbr" ,python-pbr)
+        ("python-mox3" ,python-mox3)
+        ("python-os-client-config" ,python-os-client-config)
+        ("python-setuptools" ,python-setuptools)
+        ("python-subunit" ,python-subunit)
+        ("python-testrepository" ,python-testrepository)
+        ("python-testscenarios" ,python-testscenarios)
+        ("python-testtools" ,python-testtools)))
+    (home-page "http://launchpad.net/oslo")
+    (synopsis "Oslo test framework")
+    (description
+      "The Oslo Test framework provides common fixtures, support for debugging,
+and better support for mocking results.")
+    (license asl2.0)))
+
+(define-public python2-oslotest
+  (package-with-python2 python-oslotest))
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 55e5037aba..f7af1a30da 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -200,18 +200,7 @@ the Nix package manager.")
                             (chmod po #o666))
                           (find-files "." "\\.po$"))
 
-                (zero? (system* "sh" "bootstrap"))))
-             (add-after
-              'unpack 'disable-container-tests
-              ;; XXX FIXME: These tests fail within the build container.
-              (lambda _
-                (substitute* "tests/syscalls.scm"
-                  (("^\\(test-assert \"(clone|setns|pivot-root)\"" all)
-                   (string-append "(test-skip 1)\n" all)))
-                (substitute* "tests/containers.scm"
-                  (("^\\(test-assert" all)
-                   (string-append "(test-skip 1)\n" all)))
-                #t))))))
+                (zero? (system* "sh" "bootstrap"))))))))
       (native-inputs
        `(("autoconf" ,(autoconf-wrapper))
          ("automake" ,automake)
diff --git a/gnu/packages/patches/cpio-CVE-2014-9112-pt1.patch b/gnu/packages/patches/cpio-CVE-2014-9112-pt1.patch
deleted file mode 100644
index 1224c6c22d..0000000000
--- a/gnu/packages/patches/cpio-CVE-2014-9112-pt1.patch
+++ /dev/null
@@ -1,231 +0,0 @@
-Partially fix CVE-2014-9112, part 1/5.  Backported to 2.11.
-
-From 746f3ff670dcfcdd28fcc990e79cd6fccc7ae48d Mon Sep 17 00:00:00 2001
-From: Sergey Poznyakoff <gray@gnu.org.ua>
-Date: Mon, 01 Dec 2014 13:15:28 +0000
-Subject: Fix memory overrun on reading improperly created link records.
-
-See http://lists.gnu.org/archive/html/bug-cpio/2014-11/msg00007.html
-
-* src/copyin.c (get_link_name): New function.
-(list_file, copyin_link): use get_link_name
-
-* tests/symlink-bad-length.at: New file.
-* tests/symlink-long.at: New file.
-* tests/Makefile.am: Add new files.
-* tests/testsuite.at: Likewise.
----
-diff --git a/src/copyin.c b/src/copyin.c
-index 38d809f..c502c7d 100644
---- a/src/copyin.c
-+++ b/src/copyin.c
-@@ -124,10 +124,30 @@ tape_skip_padding (int in_file_des, off_t offset)
-   if (pad != 0)
-     tape_toss_input (in_file_des, pad);
- }
--
-+
-+static char *
-+get_link_name (struct cpio_file_stat *file_hdr, int in_file_des)
-+{
-+  off_t n = file_hdr->c_filesize + 1;
-+  char *link_name;
-+  
-+  if (n == 0 || n > SIZE_MAX)
-+    {
-+      error (0, 0, _("%s: stored filename length too big"), file_hdr->c_name);
-+      link_name = NULL;
-+    }
-+  else
-+    {
-+      link_name = xmalloc (n);
-+      tape_buffered_read (link_name, in_file_des, file_hdr->c_filesize);
-+      link_name[file_hdr->c_filesize] = '\0';
-+      tape_skip_padding (in_file_des, file_hdr->c_filesize);
-+    }
-+  return link_name;
-+}
- 
- static void
--list_file(struct cpio_file_stat* file_hdr, int in_file_des)
-+list_file (struct cpio_file_stat* file_hdr, int in_file_des)
- {
-   if (verbose_flag)
-     {
-@@ -136,21 +156,16 @@ list_file(struct cpio_file_stat* file_hdr, int in_file_des)
- 	{
- 	  if (archive_format != arf_tar && archive_format != arf_ustar)
- 	    {
--	      char *link_name = NULL;	/* Name of hard and symbolic links.  */
--
--	      link_name = (char *) xmalloc ((unsigned int) file_hdr->c_filesize + 1);
--	      link_name[file_hdr->c_filesize] = '\0';
--	      tape_buffered_read (link_name, in_file_des, file_hdr->c_filesize);
--	      long_format (file_hdr, link_name);
--	      free (link_name);
--	      tape_skip_padding (in_file_des, file_hdr->c_filesize);
--	      return;
-+	      char *link_name = get_link_name (file_hdr, in_file_des);
-+	      if (link_name)
-+		{
-+		  long_format (file_hdr, link_name);
-+		  free (link_name);
-+		}
- 	    }
- 	  else
--	    {
--	      long_format (file_hdr, file_hdr->c_tar_linkname);
--	      return;
--	    }
-+	    long_format (file_hdr, file_hdr->c_tar_linkname);
-+	  return;
- 	}
-       else
- #endif
-@@ -650,10 +665,7 @@ copyin_link(struct cpio_file_stat *file_
- 
-   if (archive_format != arf_tar && archive_format != arf_ustar)
-     {
--      link_name = (char *) xmalloc ((unsigned int) file_hdr->c_filesize + 1);
--      link_name[file_hdr->c_filesize] = '\0';
--      tape_buffered_read (link_name, in_file_des, file_hdr->c_filesize);
--      tape_skip_padding (in_file_des, file_hdr->c_filesize);
-+      link_name = get_link_name (file_hdr, in_file_des);
-     }
-   else
-     {
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 3f714d1..b4ca92d 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -52,6 +52,8 @@ TESTSUITE_AT = \
-  setstat04.at\
-  setstat05.at\
-  symlink.at\
-+ symlink-bad-length.at\
-+ symlink-long.at\
-  version.at
- 
- TESTSUITE = $(srcdir)/testsuite
-diff --git a/tests/symlink-bad-length.at b/tests/symlink-bad-length.at
-new file mode 100644
-index 0000000..6f804b1
---- a/dev/null
-+++ b/tests/symlink-bad-length.at
-@@ -0,0 +1,49 @@
-+# Process this file with autom4te to create testsuite.  -*- Autotest -*-
-+# Copyright (C) 2014 Free Software Foundation, Inc.
-+
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 3, or (at your option)
-+# any later version.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+# 02110-1301 USA.
-+
-+# Cpio v2.11 did segfault with badly set symlink length.
-+# References:
-+# http://lists.gnu.org/archive/html/bug-cpio/2014-11/msg00007.html
-+
-+AT_SETUP([symlink-bad-length])
-+AT_KEYWORDS([symlink-long copyout])
-+
-+AT_DATA([ARCHIVE.base64],
-+[x3EjAIBAtIEtJy8nAQAAAHRUYW0FAAAADQBGSUxFAABzb21lIGNvbnRlbnQKAMdxIwBgQ/+hLScv
-+JwEAAAB0VEhuBQD/////TElOSwAARklMRcdxAAAAAAAAAAAAAAEAAAAAAAAACwAAAAAAVFJBSUxF
-+UiEhIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-+])
-+
-+AT_CHECK([
-+base64 -d ARCHIVE.base64 > ARCHIVE || AT_SKIP_TEST
-+cpio -ntv < ARCHIVE
-+test $? -eq 2
-+],
-+[0],
-+[-rw-rw-r--   1 10029    10031          13 Nov 25 13:52 FILE
-+],[cpio: LINK: stored filename length too big
-+cpio: premature end of file
-+])
-+
-+AT_CLEANUP
-diff --git a/tests/symlink-long.at b/tests/symlink-long.at
-new file mode 100644
-index 0000000..d3def2d
---- a/dev/null
-+++ b/tests/symlink-long.at
-@@ -0,0 +1,46 @@
-+# Process this file with autom4te to create testsuite.  -*- Autotest -*-
-+# Copyright (C) 2014 Free Software Foundation, Inc.
-+
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 3, or (at your option)
-+# any later version.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+# 02110-1301 USA.
-+
-+# Cpio v2.11.90 changed the way symlink name is read from archive.
-+# References:
-+# http://lists.gnu.org/archive/html/bug-cpio/2014-11/msg00007.html
-+
-+AT_SETUP([symlink-long])
-+AT_KEYWORDS([symlink-long copyout])
-+
-+AT_CHECK([
-+
-+# len(dirname) > READBUFSIZE
-+dirname=
-+for i in {1..52}; do
-+    dirname="xxxxxxxxx/$dirname"
-+    mkdir "$dirname"
-+done
-+ln -s "$dirname" x || AT_SKIP_TEST
-+
-+echo x | cpio -o > ar
-+list=`cpio -tv < ar | sed 's|.*-> ||'`
-+test "$list" = "$dirname" && echo success || echo fail
-+],
-+[0],
-+[success
-+],[2 blocks
-+2 blocks
-+])
-+
-+AT_CLEANUP
-diff --git a/tests/testsuite.at b/tests/testsuite.at
-index e67689f..3b5377e 100644
---- a/tests/testsuite.at
-+++ b/tests/testsuite.at
-@@ -31,6 +31,8 @@ m4_include([version.at])
- 
- m4_include([inout.at])
- m4_include([symlink.at])
-+m4_include([symlink-bad-length.at])
-+m4_include([symlink-long.at])
- m4_include([interdir.at])
- 
- m4_include([setstat01.at])
---
-cgit v0.9.0.2
diff --git a/gnu/packages/patches/cpio-CVE-2014-9112-pt2.patch b/gnu/packages/patches/cpio-CVE-2014-9112-pt2.patch
deleted file mode 100644
index 77c531cb54..0000000000
--- a/gnu/packages/patches/cpio-CVE-2014-9112-pt2.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Partially fix CVE-2014-9112, part 2/5.
-
-From 54d1c42ac2cb91389fca04a5018ad573e4ae265a Mon Sep 17 00:00:00 2001
-From: Sergey Poznyakoff <gray@gnu.org.ua>
-Date: Mon, 01 Dec 2014 19:10:39 +0000
-Subject: Bugfix
-
-* src/copyin.c (get_link_name): Fix range checking.
-* tests/symlink-bad-length.at: Change expected error message.
----
-diff --git a/src/copyin.c b/src/copyin.c
-index c502c7d..042cc41 100644
---- a/src/copyin.c
-+++ b/src/copyin.c
-@@ -128,17 +128,17 @@ tape_skip_padding (int in_file_des, off_t offset)
- static char *
- get_link_name (struct cpio_file_stat *file_hdr, int in_file_des)
- {
--  off_t n = file_hdr->c_filesize + 1;
-   char *link_name;
-   
--  if (n == 0 || n > SIZE_MAX)
-+  if (file_hdr->c_filesize < 0 || file_hdr->c_filesize > SIZE_MAX-1)
-     {
--      error (0, 0, _("%s: stored filename length too big"), file_hdr->c_name);
-+      error (0, 0, _("%s: stored filename length is out of range"),
-+	     file_hdr->c_name);
-       link_name = NULL;
-     }
-   else
-     {
--      link_name = xmalloc (n);
-+      link_name = xmalloc (file_hdr->c_filesize);
-       tape_buffered_read (link_name, in_file_des, file_hdr->c_filesize);
-       link_name[file_hdr->c_filesize] = '\0';
-       tape_skip_padding (in_file_des, file_hdr->c_filesize);
-diff --git a/tests/symlink-bad-length.at b/tests/symlink-bad-length.at
-index 6f804b1..cbf4aa7 100644
---- a/tests/symlink-bad-length.at
-+++ b/tests/symlink-bad-length.at
-@@ -42,7 +42,7 @@ test $? -eq 2
- ],
- [0],
- [-rw-rw-r--   1 10029    10031          13 Nov 25 13:52 FILE
--],[cpio: LINK: stored filename length too big
-+],[cpio: LINK: stored filename length is out of range
- cpio: premature end of file
- ])
- 
---
-cgit v0.9.0.2
diff --git a/gnu/packages/patches/cpio-CVE-2014-9112-pt3.patch b/gnu/packages/patches/cpio-CVE-2014-9112-pt3.patch
deleted file mode 100644
index 644dc6f9ef..0000000000
--- a/gnu/packages/patches/cpio-CVE-2014-9112-pt3.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Partially fix CVE-2014-9112, part 3/5.
-
-From 58df4f1b44a1142bba500f980fd26806413b1728 Mon Sep 17 00:00:00 2001
-From: Sergey Poznyakoff <gray@gnu.org.ua>
-Date: Tue, 02 Dec 2014 09:33:29 +0000
-Subject: Fix typo
-
----
-diff --git a/src/copyin.c b/src/copyin.c
-index 042cc41..264bfcb 100644
---- a/src/copyin.c
-+++ b/src/copyin.c
-@@ -138,7 +138,7 @@ get_link_name (struct cpio_file_stat *file_hdr, int in_file_des)
-     }
-   else
-     {
--      link_name = xmalloc (file_hdr->c_filesize);
-+      link_name = xmalloc (file_hdr->c_filesize + 1);
-       tape_buffered_read (link_name, in_file_des, file_hdr->c_filesize);
-       link_name[file_hdr->c_filesize] = '\0';
-       tape_skip_padding (in_file_des, file_hdr->c_filesize);
---
-cgit v0.9.0.2
diff --git a/gnu/packages/patches/cpio-CVE-2014-9112-pt4.patch b/gnu/packages/patches/cpio-CVE-2014-9112-pt4.patch
deleted file mode 100644
index fa2e8530b2..0000000000
--- a/gnu/packages/patches/cpio-CVE-2014-9112-pt4.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-Partially fix CVE-2014-9112, part 4/5.  Backported to 2.11.
-
-From fd262d116c4564c1796be9be2799619cf7785d07 Mon Sep 17 00:00:00 2001
-From: Sergey Poznyakoff <gray@gnu.org.ua>
-Date: Thu, 11 Dec 2014 10:51:21 +0000
-Subject: Fix error recovery in copy-in mode
-
-* src/copyin.c (copyin_link): Fix null dereference.
-(read_in_header): Fix error recovery (bug introduced by
-27e0ae55).
-* tests/symlink-bad-length.at: Test error recovery.
-Catch various architecture-dependent error messages (suggested
-by Pavel Raiskup).
----
-diff --git a/src/copyin.c b/src/copyin.c
-index 264bfcb..ca12356 100644
---- a/src/copyin.c
-+++ b/src/copyin.c
-@@ -655,7 +655,7 @@ copyin_device (struct cpio_file_stat* file_hdr)
- }
- 
- static void
--copyin_link(struct cpio_file_stat *file_hdr, int in_file_des)
-+copyin_link (struct cpio_file_stat *file_hdr, int in_file_des)
- {
-   char *link_name = NULL;	/* Name of hard and symbolic links.  */
-   int res;			/* Result of various function calls.  */
-@@ -666,6 +666,8 @@ copyin_link(struct cpio_file_stat *file_
-   if (archive_format != arf_tar && archive_format != arf_ustar)
-     {
-       link_name = get_link_name (file_hdr, in_file_des);
-+      if (!link_name)
-+	return;
-     }
-   else
-     {
-@@ -1017,7 +1019,7 @@ read_in_header (struct cpio_file_stat *file_hdr, int in_des)
- 
-   file_hdr->c_tar_linkname = NULL;
- 
--  tape_buffered_read (magic.str, in_des, 6L);
-+  tape_buffered_read (magic.str, in_des, sizeof (magic.str));
-   while (1)
-     {
-       if (append_flag)
-@@ -1062,8 +1064,8 @@ read_in_header (struct cpio_file_stat *file_hdr, int in_des)
- 	  break;
- 	}
-       bytes_skipped++;
--      memmove (magic.str, magic.str + 1, 5);
--      tape_buffered_read (magic.str, in_des, 1L);
-+      memmove (magic.str, magic.str + 1, sizeof (magic.str) - 1);
-+      tape_buffered_read (magic.str + sizeof (magic.str) - 1, in_des, 1L);
-     }
- }
- 
-diff --git a/tests/symlink-bad-length.at b/tests/symlink-bad-length.at
-index cbf4aa7..4dbeaa3 100644
---- a/tests/symlink-bad-length.at
-+++ b/tests/symlink-bad-length.at
-@@ -24,9 +24,9 @@ AT_SETUP([symlink-bad-length])
- AT_KEYWORDS([symlink-long copyout])
- 
- AT_DATA([ARCHIVE.base64],
--[x3EjAIBAtIEtJy8nAQAAAHRUYW0FAAAADQBGSUxFAABzb21lIGNvbnRlbnQKAMdxIwBgQ/+hLScv
--JwEAAAB0VEhuBQD/////TElOSwAARklMRcdxAAAAAAAAAAAAAAEAAAAAAAAACwAAAAAAVFJBSUxF
--UiEhIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-+[x3ECCJ1jtIHoA2QAAQAAAIlUwl0FAAAADQBGSUxFAABzb21lIGNvbnRlbnQKAMdxAgidHv+h6ANk
-+AAEAAACJVHFtBQD/////TElOSwAARklMRcdxAgieHqSB6ANkAAEAAACJVDJuBgAAABIARklMRTIA
-+c29tZSBtb3JlIGNvbnRlbnQKx3EAAAAAAAAAAAAAAQAAAAAAAAALAAAAAABUUkFJTEVSISEhAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-@@ -37,13 +37,23 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
- 
- AT_CHECK([
- base64 -d ARCHIVE.base64 > ARCHIVE || AT_SKIP_TEST
--cpio -ntv < ARCHIVE
--test $? -eq 2
-+TZ=UTC cpio -ntv < ARCHIVE 2>stderr
-+rc=$?
-+cat stderr | grep -v \
-+    -e 'stored filename length is out of range' \
-+    -e 'premature end of file' \
-+    -e 'archive header has reverse byte-order' \
-+    -e 'memory exhausted' \
-+    >&2
-+echo >&2 STDERR
-+test "$rc" -ne 0
- ],
--[0],
--[-rw-rw-r--   1 10029    10031          13 Nov 25 13:52 FILE
--],[cpio: LINK: stored filename length is out of range
--cpio: premature end of file
-+[1],
-+[-rw-rw-r--   1 1000     100            13 Dec 11 09:02 FILE
-+-rw-r--r--   1 1000     100            18 Dec 11 10:13 FILE2
-+],[cpio: warning: skipped 4 bytes of junk
-+1 block
-+STDERR
- ])
- 
- AT_CLEANUP
---
-cgit v0.9.0.2
diff --git a/gnu/packages/patches/cpio-CVE-2014-9112-pt5.patch b/gnu/packages/patches/cpio-CVE-2014-9112-pt5.patch
deleted file mode 100644
index 75313cbefa..0000000000
--- a/gnu/packages/patches/cpio-CVE-2014-9112-pt5.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-Partially fix CVE-2014-9112, part 5/5.  Backported to 2.11.
-
-From f6a8a2cbd2d5ca40ea94900b55b845dd5ca87328 Mon Sep 17 00:00:00 2001
-From: Sergey Poznyakoff <gray@gnu.org.ua>
-Date: Thu, 11 Dec 2014 13:21:40 +0000
-Subject: Fix symlink-bad-length test for 64-bit architectures.
-
-* src/util.c: Return non-zero exit code if EOF is hit prematurely.
-* tests/symlink-bad-length.at: Revert to original archive: there's
-no use testing for recovery, because that depends on the host
-architecture.  Don't test for exit code as well (same reason).
-Account for eventual warning messages.
----
-diff --git a/src/util.c b/src/util.c
-index 6c483f8..39c9813 100644
---- a/src/util.c
-+++ b/src/util.c
-@@ -206,10 +206,7 @@ tape_fill_input_buffer (int in_des, int
-   if (input_size < 0)
-     error (1, errno, _("read error"));
-   if (input_size == 0)
--    {
--      error (0, 0, _("premature end of file"));
--      exit (1);
--    }
-+    error (PAXEXIT_FAILURE, 0, _("premature end of file"));
-   input_bytes += input_size;
- }
- 
-diff --git a/tests/symlink-bad-length.at b/tests/symlink-bad-length.at
-index 4dbeaa3..e1a7093 100644
---- a/tests/symlink-bad-length.at
-+++ b/tests/symlink-bad-length.at
-@@ -24,9 +24,9 @@ AT_SETUP([symlink-bad-length])
- AT_KEYWORDS([symlink-long copyout])
- 
- AT_DATA([ARCHIVE.base64],
--[x3ECCJ1jtIHoA2QAAQAAAIlUwl0FAAAADQBGSUxFAABzb21lIGNvbnRlbnQKAMdxAgidHv+h6ANk
--AAEAAACJVHFtBQD/////TElOSwAARklMRcdxAgieHqSB6ANkAAEAAACJVDJuBgAAABIARklMRTIA
--c29tZSBtb3JlIGNvbnRlbnQKx3EAAAAAAAAAAAAAAQAAAAAAAAALAAAAAABUUkFJTEVSISEhAAAA
-+[x3EjAIBAtIEtJy8nAQAAAHRUYW0FAAAADQBGSUxFAABzb21lIGNvbnRlbnQKAMdxIwBgQ/+hLScv
-+JwEAAAB0VEhuBQD/////TElOSwAARklMRcdxAAAAAAAAAAAAAAEAAAAAAAAACwAAAAAAVFJBSUxF
-+UiEhIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-@@ -35,25 +35,30 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
- ])
- 
-+# The exact error message and exit status depend on the host architecture,
-+# therefore strderr is filtered out and error code is not checked.
-+
-+# So far the only case when cpio would exit with code 0 is when it skips
-+# several bytes and encounters a valid record header.  Perhaps it should
-+# exit with code 2 (non-critical error), if at least one byte was skipped,
-+# but that could hurt backward compatibility.
-+
- AT_CHECK([
- base64 -d ARCHIVE.base64 > ARCHIVE || AT_SKIP_TEST
--TZ=UTC cpio -ntv < ARCHIVE 2>stderr
--rc=$?
-+TZ=UTC cpio -ntv < ARCHIVE 2>stderr 
- cat stderr | grep -v \
-     -e 'stored filename length is out of range' \
-     -e 'premature end of file' \
-     -e 'archive header has reverse byte-order' \
-     -e 'memory exhausted' \
-+    -e 'skipped [[0-9][0-9]*] bytes of junk' \
-+    -e '[[0-9][0-9]*] block' \
-     >&2
- echo >&2 STDERR
--test "$rc" -ne 0
- ],
--[1],
--[-rw-rw-r--   1 1000     100            13 Dec 11 09:02 FILE
---rw-r--r--   1 1000     100            18 Dec 11 10:13 FILE2
--],[cpio: warning: skipped 4 bytes of junk
--1 block
--STDERR
-+[0],
-+[-rw-rw-r--   1 10029    10031          13 Nov 25 11:52 FILE
-+],[STDERR
- ])
- 
- AT_CLEANUP
---
-cgit v0.9.0.2
diff --git a/gnu/packages/patches/cpio-fix-symlink-bad-length-test.patch b/gnu/packages/patches/cpio-fix-symlink-bad-length-test.patch
deleted file mode 100644
index 58a5a478c9..0000000000
--- a/gnu/packages/patches/cpio-fix-symlink-bad-length-test.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From bebf9662c406d1d137a66c567d8748b489d352e7 Mon Sep 17 00:00:00 2001
-From: Pavel Raiskup <praiskup@redhat.com>
-Date: Thu, 4 Jun 2015 13:27:42 +0200
-Subject: [PATCH] tests: fix expected output for old file
-
-Thanks Victor Rodriguez.  Upstream thread:
-http://lists.gnu.org/archive/html/bug-cpio/2015-06/msg00000.html
-
-* tests/symlink-bad-length.at (STDOUT): Expect the year string
-'2014' is printed and not time because the file in archive is
-older than 6 months.
-* Thanks: Mention Victor.
----
- THANKS                      | 1 +
- tests/symlink-bad-length.at | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/THANKS b/THANKS
-index 45b0dfb..3228df9 100644
---- a/THANKS
-+++ b/THANKS
-@@ -23,6 +23,7 @@ Mitsuru Chinen		<mchinen@yamato.ibm.com>
- Peter Breitenlohner     <peb@mppmu.mpg.de>
- Peter Vrabec            <pvrabec@redhat.com>
- Robert Millan           <rmh@aybabtu.com>
-+Victor Rodriguez        <vm.rod25@gmail.com>
- 
- Local Variables:
- mode: Fundamental
-diff --git a/tests/symlink-bad-length.at b/tests/symlink-bad-length.at
-index e1a7093..2cdc692 100644
---- a/tests/symlink-bad-length.at
-+++ b/tests/symlink-bad-length.at
-@@ -57,7 +57,7 @@ cat stderr | grep -v \
- echo >&2 STDERR
- ],
- [0],
--[-rw-rw-r--   1 10029    10031          13 Nov 25 11:52 FILE
-+[-rw-rw-r--   1 10029    10031          13 Nov 25  2014 FILE
- ],[STDERR
- ])
- 
--- 
-2.1.0
diff --git a/gnu/packages/patches/gnucash-price-quotes-perl.patch b/gnu/packages/patches/gnucash-price-quotes-perl.patch
new file mode 100644
index 0000000000..982763f0ec
--- /dev/null
+++ b/gnu/packages/patches/gnucash-price-quotes-perl.patch
@@ -0,0 +1,23 @@
+After wrapping gnc-fq-check and gnc-fq-helper we can no longer execute them
+with perl, so execute them directly instead.
+
+--- gnucash-2.6.6/src/scm/price-quotes.scm.orig	2014-04-27 17:42:28.000000000 -0500
++++ gnucash-2.6.6/src/scm/price-quotes.scm	2015-07-09 16:12:11.196218472 -0500
+@@ -74,7 +74,7 @@
+     (define (start-program)
+       (if (not (string-null? gnc:*finance-quote-check*))
+           (set! program (gnc-spawn-process-async
+-                         (list "perl" "-w" gnc:*finance-quote-check*) #t))))
++                         (list gnc:*finance-quote-check*) #t))))
+ 
+     (define (get-sources)
+       (if (not (null? program))
+@@ -158,7 +158,7 @@
+     (define (start-quoter)
+       (if (not (string-null? gnc:*finance-quote-helper*))
+           (set! quoter (gnc-spawn-process-async
+-                        (list "perl" "-w" gnc:*finance-quote-helper*) #t))))
++                        (list gnc:*finance-quote-helper*) #t))))
+ 
+     (define (get-quotes)
+       (if (not (null? quoter))
diff --git a/gnu/packages/patches/guile-present-coding.patch b/gnu/packages/patches/guile-present-coding.patch
new file mode 100644
index 0000000000..0655726158
--- /dev/null
+++ b/gnu/packages/patches/guile-present-coding.patch
@@ -0,0 +1,16 @@
+The tests/org-mode.scm tests expects 'jpl-outline-es' to be read as UTF-8.
+
+--- guile-present-0.3.0/tests/org-mode.scm	2014-09-23 22:29:51.426705753 +0200
++++ guile-present-0.3.0/tests/org-mode.scm	2014-09-23 22:30:09.634705548 +0200
+@@ -194,9 +194,10 @@
+                "(Just another hacker)"
+                "wingo@fluendo.com")
+             (p "Julien Moutte, CEO" "julien@fluendo.com")))
++   (with-fluids ((%default-port-encoding "UTF-8"))
+    (call-with-input-file
+        (in-vicinity *top-srcdir* "tests/jpl-outline-es")
+-     org->presentation)))
++       org->presentation))))
+ 
+ (setlocale LC_ALL "")
+ (exit-with-summary (run-all-defined-test-cases))
diff --git a/gnu/packages/patches/guile-rsvg-pkgconfig.patch b/gnu/packages/patches/guile-rsvg-pkgconfig.patch
new file mode 100644
index 0000000000..2272b4e1cd
--- /dev/null
+++ b/gnu/packages/patches/guile-rsvg-pkgconfig.patch
@@ -0,0 +1,16 @@
+This patch fixes a bug in guile-rsvg's build system, whereby the CFLAGS
+and LDFLAGS for Guile would not be captured.
+
+--- guile-rsvg-2.18.1/configure.ac	2015-08-31 22:30:30.578909480 +0200
++++ guile-rsvg-2.18.1/configure.ac	2015-08-31 22:32:15.071516084 +0200
+@@ -39,6 +39,10 @@ AC_SUBST(WARN_CFLAGS)
+ 
+ GUILE_PKG([2.2 2.0 1.8])
+ 
++dnl The above macro fails to set the 'GUILE_CFLAGS' and 'GUILE_LIBS'
++dnl substitution variables, hence this line.
++PKG_CHECK_MODULES(GUILE, guile-2.0)
++
+ PKG_CHECK_MODULES(GUILE_CAIRO, guile-cairo >= 1.4.0)
+ AC_SUBST(GUILE_CAIRO_LIBS)
+ AC_SUBST(GUILE_CAIRO_CFLAGS)
diff --git a/gnu/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch b/gnu/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch
new file mode 100644
index 0000000000..5f37bb0ba7
--- /dev/null
+++ b/gnu/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch
@@ -0,0 +1,15 @@
+Rather than unconditionally using Mozilla's CA certificates, let the user tell
+LWP's UserAgent where to find certificates with the PERL_LWP_SSL_CA_FILE,
+HTTPS_CA_FILE, PERL_LWP_SSL_CA_PATH, or HTTPS_CA_DIR environment variables
+instead.
+
+--- Finance-Quote-1.37/lib/Finance/Quote/Tiaacref.pm.orig	2015-02-01 13:24:41.000000000 -0600
++++ Finance-Quote-1.37/lib/Finance/Quote/Tiaacref.pm	2015-07-07 20:09:47.278885944 -0500
+@@ -30,7 +30,6 @@
+ package Finance::Quote::Tiaacref;
+ require 5.005;
+ require LWP::Protocol::https;
+-require Mozilla::CA;
+ 
+ use strict;
+ 
diff --git a/gnu/packages/patches/xfce4-settings-defaults.patch b/gnu/packages/patches/xfce4-settings-defaults.patch
new file mode 100644
index 0000000000..fe91ae5f70
--- /dev/null
+++ b/gnu/packages/patches/xfce4-settings-defaults.patch
@@ -0,0 +1,29 @@
+This patch make Xfce use "gnome" as the default icon theme and enable font antialias.
+
+Taken from ArchLinux.
+
+diff -upr xfce4-settings-4.12.0.orig/xfsettingsd/xsettings.xml xfce4-settings-4.12.0/xfsettingsd/xsettings.xml
+--- xfce4-settings-4.12.0.orig/xfsettingsd/xsettings.xml	2015-02-24 03:33:11.000000000 +0200
++++ xfce4-settings-4.12.0/xfsettingsd/xsettings.xml	2015-03-01 09:52:24.376869688 +0200
+@@ -6,8 +6,8 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <channel name="xsettings" version="1.0">
+   <property name="Net" type="empty">
+     <property name="ThemeName" type="empty"/>
+-    <property name="IconThemeName" type="empty"/>
++    <property name="IconThemeName" type="string" value="gnome"/>
+     <property name="DoubleClickTime" type="int" value="400"/>
+     <property name="DoubleClickDistance" type="int" value="5"/>
+     <property name="DndDragThreshold" type="int" value="8"/>
+@@ -19,9 +19,9 @@
+   </property>
+   <property name="Xft" type="empty">
+     <property name="DPI" type="empty"/>
+-    <property name="Antialias" type="int" value="-1"/>
++    <property name="Antialias" type="int" value="1"/>
+     <property name="Hinting" type="int" value="-1"/>
+-    <property name="HintStyle" type="string" value="hintnone"/>
++    <property name="HintStyle" type="string" value="hintfull"/>
+     <property name="RGBA" type="string" value="none"/>
+     <!-- <property name="Lcdfilter" type="string" value="none"/> -->
+   </property>
diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm
index cf8a6e494b..319ccb21c2 100644
--- a/gnu/packages/patchutils.scm
+++ b/gnu/packages/patchutils.scm
@@ -20,7 +20,9 @@
   #:use-module (guix packages)
   #:use-module (guix licenses)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages ed)
   #:use-module (gnu packages base)
@@ -29,6 +31,8 @@
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages less)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages mail)
   #:use-module (gnu packages xml))
 
 (define-public patchutils
@@ -170,3 +174,31 @@ refreshed, and more.")
      "Colordiff is Perl script wrapper on top of diff command which provides
 'syntax highlighting' for various patch formats.")
     (license gpl2+)))
+
+(define-public patches
+  (let ((commit "26d7dbc"))
+    (package
+      (name "patches")
+      (version (string-append "0.0." commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/aliguori/patches")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1bah6y84nlii5yif189ns28dz1m9vmsyw66jyk2vr5yf0njf7mzh"))))
+      (build-system python-build-system)
+      (inputs `(("python-notmuch" ,python2-notmuch)))
+      (arguments
+       `(#:tests? #f                             ;no "test" target
+                  #:python ,python-2))           ;not compatible with Python 3
+      (home-page "https://github.com/aliguori/patches")
+      (synopsis "Patch tracking tool")
+      (description
+       "'Patches' is a patch-tracking tool initially written for the QEMU
+project.  It provides commands that build a database of patches from a mailing
+list, and commands that can search that database.  It allows users to track
+the status of a patch, apply patches, and search for patches---all that from
+the command-line or from Emacs via its Notmuch integration.")
+      (license gpl2+))))
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index a7f029e235..03ed5113b1 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -25,6 +25,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages fontutils)
@@ -36,6 +37,7 @@
   #:use-module (gnu packages lesstif)
   #:use-module (gnu packages image)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages glib)
@@ -103,6 +105,50 @@
    (license license:gpl2+)
    (home-page "http://poppler.freedesktop.org/")))
 
+(define-public poppler-qt4
+  (package (inherit poppler)
+   (name "poppler-qt4")
+   (inputs `(("qt-4" ,qt-4)
+             ,@(package-inputs poppler)))
+   (synopsis "Qt4 frontend for the Poppler PDF rendering library")))
+
+(define-public python-poppler-qt4
+  (package
+    (name "python-poppler-qt4")
+    (version "0.24.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://pypi.python.org/packages/source/p"
+                            "/python-poppler-qt4/python-poppler-qt4-"
+                            version ".tar.gz"))
+        (sha256
+         (base32
+          "0x63niylkk4q3h3ay8zrk3m1xiik0x3hlr4gvj7kswx48qi1vb99"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after
+          'unpack 'patch-poppler-include-paths
+          (lambda _
+            (substitute* (find-files "." "poppler-.*\\.sip")
+              (("qt4/poppler-.*\\.h" header)
+               (string-append "poppler/" header)))
+            #t)))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("python-sip" ,python-sip)
+       ("python-pyqt-4" ,python-pyqt-4)
+       ("poppler-qt4" ,poppler-qt4)))
+    (home-page "https://pypi.python.org/pypi/python-poppler-qt4")
+    (synopsis "Python bindings for Poppler-Qt4")
+    (description
+     "This package provides Python bindings for the Qt4 interface of the
+Poppler PDF rendering library.")
+    (license license:lgpl2.1+)))
+
 (define-public xpdf
   (package
    (name "xpdf")
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index d5015fd3ef..95aa596cf5 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1052,6 +1052,46 @@ contained in Appendix A of FIPS Publication 181, \"Standard for Automated
 Password Generator\".")
     (license (package-license perl))))
 
+(define-public perl-czplib
+  (package
+    (name "perl-czplib")
+    (version "1.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/czplib/czplib.v"
+                           version ".tgz"))
+       (sha256
+        (base32
+         "12kln8l5h406r1ss6zbazgcshmys9nvabkrhvk2zwrrgl1saq1kf"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove .git directory
+           (delete-file-recursively ".git")
+           #t))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace
+          'install
+          (lambda* (#:key outputs #:allow-other-keys)
+            (copy-recursively "."
+                              (string-append (assoc-ref outputs "out")
+                                             "/plib/perl5/site_perl/"
+                                             ,(package-version perl)
+                                             "/czplib/"))
+            #t)))))
+    (home-page "http://sourceforge.net/projects/czplib/")
+    (synopsis "Library for genomic analysis")
+    (description "Chaolin Zhang's Perl Library (czplib) contains assorted
+functions and data structures for processing and analysing genomic and
+bioinformatics data.")
+    (license gpl3+)))
+
 (define-public perl-data-dump
   (package
     (name "perl-data-dump")
@@ -1293,6 +1333,31 @@ applicable).")
 Date::Calc.")
     (license (list (package-license perl) lgpl2.0+))))
 
+(define-public perl-date-manip
+  (package
+    (name "perl-date-manip")
+    (version "6.50")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://cpan.metacpan.org/authors/id/S/SB/SBECK/"
+                           "Date-Manip-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0zd0wbf91i49753rnf7m1lw197hdl5r97mxy0n43zdmcmhvkb3qq"))))
+    (build-system perl-build-system)
+    (arguments
+     ;; Tests would require tzdata for timezone information, but tzdata is in
+     ;; (gnu packages base) which would create a circular dependency.  TODO:
+     ;; Maybe put this package elsewhere so we can turn on tests.
+     '(#:tests? #f))
+    (home-page "http://search.cpan.org/dist/Date-Manip")
+    (synopsis "Date manipulation routines")
+    (description "Date::Manip is a series of modules for common date/time
+operations, such as comparing two times, determining a date a given amount of
+time from another, or parsing international times.")
+    (license (package-license perl))))
+
 (define-public perl-datetime
   (package
     (name "perl-datetime")
@@ -1666,7 +1731,7 @@ particular command is available.")
     (home-page "http://search.cpan.org/dist/Devel-GlobalDestruction")
     (synopsis "Provides equivalent of ${^GLOBAL_PHASE} eq 'DESTRUCT' for older perls")
     (description "Devel::GlobalDestruction provides a function returning the
-equivalent of \"${^GLOBAL_PHASE} eq 'DESTRUCT'\" for older perls.")
+equivalent of \"$@{^GLOBAL_PHASE@} eq 'DESTRUCT'\" for older perls.")
     (license (package-license perl))))
 
 (define-public perl-devel-lexalias
@@ -1910,7 +1975,7 @@ constructors, which speeds code up at runtime by a significant amount.  String
 eval is not without its issues however - it's difficult to control the scope
 it's used in (which determines which variables are in scope inside the eval),
 and it's easy to miss compilation errors, since eval catches them and sticks
-them in $@ instead.  This module attempts to solve these problems.  It
+them in $@@ instead.  This module attempts to solve these problems.  It
 provides an eval_closure function, which evals a string in a clean
 environment, other than a fixed list of specified variables.  Compilation
 errors are rethrown automatically.")
@@ -1954,7 +2019,7 @@ in your modules in a \"Java-esque\" manner.")
     (description
      "Exporter::Lite is an alternative to Exporter, intended to provide a
 lightweight subset of the most commonly-used functionality.  It supports
-import(), @EXPORT and @EXPORT_OK and not a whole lot else.")
+import(), @@EXPORT and @@EXPORT_OK and not a whole lot else.")
     (home-page (string-append "http://search.cpan.org/~neilb/"
                               "Exporter-Lite-" version))
     (license (package-license perl))))
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index bf3c76c51e..6af4e4a214 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -1,5 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,18 +19,50 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages photo)
-  #:use-module (guix licenses)
-  #:use-module (guix packages)
-  #:use-module (guix download)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
-  #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages libusb)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (gnu packages autotools)
-  #:use-module (gnu packages readline)
-  #:use-module (gnu packages popt)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages graphics)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages libusb)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages base))
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages popt)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xfig)
+  #:use-module (gnu packages xml))
+
+(define-public libraw
+  (package
+    (name "libraw")
+    (version "0.17.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://www.libraw.org/data/LibRaw-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "043kckxjqanw8dl3m9f6kvsf0l20ywxmgxd1xb0slj6m8l4w4hz6"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.libraw.org")
+    (synopsis "Raw image decoder")
+    (description
+     "LibRaw is a library for reading RAW files obtained from digital photo
+cameras (CRW/CR2, NEF, RAF, DNG, and others).")
+    (license license:lgpl2.1+)))
 
 (define-public libexif
   (package
@@ -47,7 +81,7 @@
     (description
      "The libexif C library allows applications to read, edit, and save EXIF
 data as produced by digital cameras.")
-    (license lgpl2.1+)))
+    (license license:lgpl2.1+)))
 
 (define-public libgphoto2
   (package
@@ -77,7 +111,7 @@ MTP, and other vendor specific protocols for controlling and transferring data
 from digital cameras.")
 
     ;; 'COPYING' says LGPLv2.1+, but in practices files are under LGPLv2+.
-    (license lgpl2.1+)))
+    (license license:lgpl2.1+)))
 
 (define-public gphoto2
   (package
@@ -120,7 +154,7 @@ number of different digital cameras.  Through libgphoto2, it supports PTP,
 MTP, and much more.")
 
     ;; Files are typically under LGPLv2+, but 'COPYING' says GPLv2+.
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public perl-image-exiftool
   (package
@@ -154,3 +188,73 @@ MTP, and much more.")
      "This package provides the 'exiftool' command and the 'Image::ExifTool'
 Perl library to manipulate EXIF tags of digital images.")
     (license (package-license perl))))
+
+(define-public libpano13
+  (package
+    (name "libpano13")
+    (version "2.9.19")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/panotools/libpano13/"
+                                  "libpano13-" version "/"
+                                  "libpano13-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1a4m3plmfcrrplqs9zfzhc5apibn10m5sajpizm1sd3q74w5fwq3"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)
+       ("zlib" ,zlib)))
+    (home-page "http://panotools.sourceforge.net/")
+    (synopsis "Library for panoramic images")
+    (description
+     "The libpano13 package contains the backend library written by the
+Panorama Tools project for building panoramic images from a set of
+overlapping images, as well as some command line tools.")
+    (license license:gpl2+)))
+
+(define-public enblend-enfuse
+  (package
+    (name "enblend-enfuse")
+    (version "4.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/enblend/"
+                                  name "/"
+                                  name "-" (version-major+minor version) "/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1b7r1nnwaind0344ckwggy0ghl0ipbk9jzylsxcjfl05rnasw00w"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("perl" ,perl)
+       ("perl-timedate" ,perl-timedate)
+       ;; for building the documentation
+       ("gnuplot" ,gnuplot)
+       ("imagemagick" ,imagemagick)
+       ("libxml2" ,libxml2)
+       ("tidy" ,tidy)
+       ("transfig" ,transfig)))
+    (inputs
+     `(("boost" ,boost)
+       ("gsl" ,gsl)
+       ("lcms" ,lcms)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)
+       ("openexr" ,openexr)
+       ("vigra" ,vigra)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:configure-flags `("--enable-openmp")))
+    (home-page "http://enblend.sourceforge.net/")
+    (synopsis "Tools for combining and blending images")
+    (description
+     "Enblend blends away the seams in a panoramic image mosaic using a
+multi-resolution spline.  Enfuse merges different exposures of the same
+scene to produce an image that looks much like a tone-mapped image.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/polkit.scm b/gnu/packages/polkit.scm
index 172b0e128d..13db7b6e65 100644
--- a/gnu/packages/polkit.scm
+++ b/gnu/packages/polkit.scm
@@ -1,5 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,6 +25,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnuzilla)
   #:use-module (gnu packages linux)
@@ -44,19 +47,77 @@
              (sha256
               (base32
                "109w86kfqrgz83g9ivggplmgc77rz8kx8646izvm2jb57h4rbh71"))
-             (patches (list (search-patch "polkit-drop-test.patch")))))
+             (patches (list (search-patch "polkit-drop-test.patch")))
+             (modules '((guix build utils)))
+             (snippet
+              '(begin
+                 (use-modules (guix build utils))
+                 (substitute* "configure"
+                   ;; Replace libsystemd-login with libelogind.
+                   (("libsystemd-login") "libelogind")
+                   ;; Skip the sanity check that the current system runs
+                   ;; systemd.
+                   (("test ! -d /sys/fs/cgroup/systemd/") "false"))
+                 (substitute* "src/polkit/polkitunixsession-systemd.c"
+                   (("systemd") "elogind"))
+                 (substitute* "src/polkitbackend/polkitbackendsessionmonitor-systemd.c"
+                   (("systemd") "elogind"))
+                 (substitute* "src/polkitbackend/polkitbackendjsauthority.c"
+                   (("systemd") "elogind"))
+
+                 (substitute* "src/polkitagent/polkitagentsession.c"
+                   (("PACKAGE_PREFIX \"/lib/polkit-1/polkit-agent-helper-1\"")
+                    "\"/run/setuid-programs/polkit-agent-helper-1\""))
+                 (substitute* "src/polkitbackend/polkitbackendinteractiveauthority.c"
+                   (("PACKAGE_DATA_DIR \"/polkit-1/actions\"")
+                    "\"/run/current-system/profile/share/polkit-1/actions\""))
+                 (substitute* "src/polkitbackend/polkitbackendjsauthority.c"
+                   (("PACKAGE_SYSCONF_DIR \"/polkit-1/rules.d\"")
+                    "\"/run/current-system/profile/etc/polkit-1/rules.d\""))
+                 (substitute* "src/polkitbackend/polkitbackendjsauthority.c"
+                   (("PACKAGE_DATA_DIR \"/polkit-1/rules.d\"")
+                    "\"/run/current-system/profile/share/polkit-1/rules.d\""))))))
     (build-system gnu-build-system)
     (inputs
-      `(("expat" ,expat)
-        ("glib:bin" ,glib "bin") ; for glib-mkenums
-        ("intltool" ,intltool)
-        ("linux-pam" ,linux-pam)
-        ("mozjs" ,mozjs)
-        ("nspr" ,nspr)))
+     `(("expat" ,expat)
+       ("linux-pam" ,linux-pam)
+       ("elogind" ,elogind)
+       ("mozjs" ,mozjs)
+       ("nspr" ,nspr)))
     (propagated-inputs
-      `(("glib" ,glib))) ; required by polkit-gobject-1.pc
+     `(("glib" ,glib))) ; required by polkit-gobject-1.pc
     (native-inputs
-      `(("pkg-config", pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ("glib:bin" ,glib "bin") ; for glib-mkenums
+       ("intltool" ,intltool)
+       ("gobject-introspection" ,gobject-introspection)))
+    (arguments
+     `(#:configure-flags '("--sysconfdir=/etc"
+                           "--enable-man-pages")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after
+          'unpack 'fix-introspection-install-dir
+          (lambda* (#:key outputs #:allow-other-keys)
+            (let ((out (assoc-ref outputs "out")))
+              (substitute* (find-files "." "Makefile.in")
+                (("@INTROSPECTION_GIRDIR@")
+                 (string-append out "/share/gir-1.0/"))
+                (("@INTROSPECTION_TYPELIBDIR@")
+                 (string-append out "/lib/girepository-1.0/"))))))
+         (replace
+          'install
+          (lambda* (#:key outputs (make-flags '()) #:allow-other-keys)
+            ;; Override sysconfdir during "make install", to avoid attempting
+            ;; to install in /etc, and to instead install the skeletons in the
+            ;; output directory.
+            (let ((out (assoc-ref outputs "out")))
+             (zero? (apply system*
+                           "make" "install"
+                           (string-append "sysconfdir=" out "/etc")
+                           (string-append "polkit_actiondir="
+                                          out "/share/polkit-1/actions")
+                           make-flags))))))))
     (home-page "http://www.freedesktop.org/wiki/Software/polkit/")
     (synopsis "Authorization API for privilege management")
     (description "Polkit is an application-level toolkit for defining and
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index be638909a2..f57bd839ab 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
+;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,6 +34,7 @@
                           isc psfl public-domain x11-style))
   #:use-module ((guix licenses) #:select (expat zlib) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages attr)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages fontutils)
@@ -45,6 +47,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages networking)
@@ -1171,7 +1174,7 @@ other Python program.")
      "EmPy is a system for embedding Python expressions and statements in
 template text; it takes an EmPy source file, processes it, and produces
 output.  This is accomplished via expansions, which are special signals to the
-EmPy system and are set off by a special prefix (by default the at sign, @).
+EmPy system and are set off by a special prefix (by default the at sign, @@).
 EmPy can expand arbitrary Python expressions and statements in this way, as
 well as a variety of special forms.  Textual data not explicitly delimited in
 this way is sent unaffected to the output, allowing Python to be used in
@@ -1711,11 +1714,12 @@ Python tests.")
         (base32
          "1ssqb07c277010i6gzzkbdd46gd9mrj0bi0i8vn560n2k2y4j93m"))))
     (build-system python-build-system)
+    (propagated-inputs
+     `(("python-fixtures" ,python-fixtures)
+       ("python-testtools" ,python-testtools)))
     (inputs
      `(("python-setuptools" ,python-setuptools)
-       ("python-testtools" ,python-testtools)
        ("python-subunit" ,python-subunit)
-       ("python-fixtures" ,python-fixtures)
        ("python-mimeparse" ,python-mimeparse)))
     (home-page "https://launchpad.net/testrepository")
     (synopsis "Database for Python test results")
@@ -4658,3 +4662,109 @@ from an XML-based format.")
 
 (define-public python2-fonttools
   (package-with-python2 python-fonttools))
+
+(define-public python-ly
+  (package
+    (name "python-ly")
+    (version "0.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://pypi.python.org/packages/source/p/python-ly/python-ly-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1bsjg4q9ihr8bfdclrcmb8yjcg8xm9dznh58f3zsyrkrjzwbhcd2"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (synopsis "Tool and library for manipulating LilyPond files")
+    (description "This package provides a Python library to parse, manipulate
+or create documents in LilyPond format.  A command line program ly is also
+provided that can be used to do various manipulations with LilyPond files.")
+    (home-page "https://pypi.python.org/pypi/python-ly")
+    (license gpl2+)))
+
+(define-public python-appdirs
+  (package
+    (name "python-appdirs")
+    (version "1.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://pypi.python.org/packages/source/a/appdirs/appdirs-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1iddva7v3fq0aqzsahkazxr7vpw28mqcrsy818z4wyiqnkplbhlg"))))
+    (build-system python-build-system)
+    (inputs
+      `(("python-setuptools" ,python-setuptools)))
+    (home-page "http://github.com/ActiveState/appdirs")
+    (synopsis
+      "Determine platform-specific dirs, e.g. a \"user data dir\"")
+    (description
+      "This module provides a portable way of finding out where user data
+should be stored on various operating systems.")
+    (license license:expat)))
+
+(define-public python2-appdirs
+  (package-with-python2 python-appdirs))
+
+(define-public python-llfuse
+  (package
+    (name "python-llfuse")
+    (version "0.41")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://bitbucket.org/nikratio/python-llfuse/downloads/"
+                    "llfuse-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0yzy8ixpmxk00kdq6lx5vvwbs0n6s59qnja5q0js2ahbqyxiz2hb"))))
+    (build-system python-build-system)
+    (inputs
+     `(("fuse" ,fuse)
+       ("attr" ,attr)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("python-setuptools" ,python-setuptools)))
+    (synopsis "Python bindings for FUSE")
+    (description
+     "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
+    (home-page "https://bitbucket.org/nikratio/python-llfuse/")
+    ;; Python-LLFUSE includes underscore.js, which is MIT (expat) licensed.
+    ;; The rest of the package is licensed under LGPL2.0 or later.
+    (license (list license:expat lgpl2.0+))))
+
+(define-public python2-llfuse
+  (package-with-python2 python-llfuse))
+
+(define-public python-msgpack
+  (package
+    (name "python-msgpack")
+    (version "0.4.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://pypi.python.org/packages/source/m/"
+                    "msgpack-python/msgpack-python-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1527c76b6fn4zzkgfq5xvhh7x9a9686g7fjiz717rw5vklf5ik5z"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (synopsis "MessagePack (de)serializer")
+    (description "MessagePack is a fast, compact binary serialization format,
+suitable for similar data to JSON.  This package provides CPython bindings for
+reading and writing MessagePack data.")
+    (home-page "https://pypi.python.org/pypi/msgpack-python/")
+    (license asl2.0)))
+
+(define-public python2-msgpack
+  (package-with-python2 python-msgpack))
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 9a702dd454..ee0acc8639 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -1,8 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Pjotr Prins <pjotr.guix@thebird.nl>
+;;; Copyright © 2014, 2015 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014 David Thompson <davet@gnu.org>
+;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,8 +24,10 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages java)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages gdbm)
   #:use-module (gnu packages tls)
@@ -34,6 +37,7 @@
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
+  #:use-module (gnu packages xml)
   #:use-module (guix build-system ruby))
 
 (define-public ruby
@@ -192,16 +196,16 @@ packaging native C and Java extensions in Ruby.")
 (define-public ruby-i18n
   (package
     (name "ruby-i18n")
-    (version "0.6.11")
+    (version "0.7.0")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "i18n" version))
               (sha256
                (base32
-                "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk"))))
+                "1i5z1ykl8zhszsxcs8mzl8d0dxgs3ylz8qlzrw74jb0gplkx6758"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:tests? #f)) ; requires bundler
+     '(#:tests? #f)) ; no tests
     (synopsis "Internationalization library for Ruby")
     (description "Ruby i18n is an internationalization and localization
 solution for Ruby programs.  It features translation and localization,
@@ -254,7 +258,7 @@ groups.")
     (home-page "https://github.com/rspec/rspec-core")
     (license license:expat)))
 
-(define ruby-diff-lcs-for-rspec
+(define-public ruby-diff-lcs
   (package
     (name "ruby-diff-lcs")
     (version "1.2.5")
@@ -290,7 +294,7 @@ standard diff-like tool.")
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
      `(("ruby-rspec-support" ,ruby-rspec-support)
-       ("ruby-diff-lcs" ,ruby-diff-lcs-for-rspec)))
+       ("ruby-diff-lcs" ,ruby-diff-lcs)))
     (synopsis "RSpec expectations library")
     (description "Rspec-expectations provides a simple API to express expected
 outcomes of a code example.")
@@ -312,7 +316,7 @@ outcomes of a code example.")
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
      `(("ruby-rspec-support" ,ruby-rspec-support)
-       ("ruby-diff-lcs" ,ruby-diff-lcs-for-rspec)))
+       ("ruby-diff-lcs" ,ruby-diff-lcs)))
     (synopsis "RSpec stubbing and mocking library")
     (description "Rspec-mocks provides RSpec's \"test double\" framework, with
 support for stubbing and mocking.")
@@ -348,13 +352,13 @@ expectations and mocks frameworks.")
 (define-public bundler
   (package
     (name "bundler")
-    (version "1.9.9")
+    (version "1.10.6")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "bundler" version))
               (sha256
                (base32
-                "12qk1569pswa9mmid6lsqy2napn9fmkbmv0k7xkl52nyfh8rsy4d"))))
+                "1vlzfq0bkkj4jyq6av0y55mh5nj5n0f3mfbmmifwgkh44g8k6agv"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -364,6 +368,143 @@ specified in a \"Gemfile\", as well as their dependencies.")
     (home-page "http://bundler.io/")
     (license license:expat)))
 
+(define-public ruby-builder
+  (package
+    (name "ruby-builder")
+    (version "3.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "builder" version))
+              (sha256
+               (base32
+                "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'do-not-use-rvm
+          (lambda _
+            (substitute* "rakelib/tags.rake"
+              (("RVM_GEMDIR = .*") "RVM_GEMDIR = 'no-rvm-please'\n"))
+            #t)))))
+    (synopsis "Ruby library to create structured data")
+    (description "Builder provides a number of builder objects that make it
+easy to create structured data.  Currently the following builder objects are
+supported: XML Markup and XML Events.")
+    (home-page "https://github.com/jimweirich/builder")
+    (license license:expat)))
+
+(define-public ruby-rjb
+  (package
+    (name "ruby-rjb")
+    (version "1.5.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rjb" version))
+              (sha256
+               (base32
+                "0gzs92dagk981s4vrymnqg0vll783b9k564j0cdgp167nc5a2zg4"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f ; no rakefile
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-java-home
+          (lambda* (#:key inputs #:allow-other-keys)
+            (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
+            #t)))))
+    (native-inputs
+     `(("jdk" ,icedtea7 "jdk")))
+    (synopsis "Ruby-to-Java bridge using the Java Native Interface")
+    (description "RJB is a bridge program that connects Ruby and Java via the
+Java Native Interface.")
+    (home-page "http://www.artonx.org/collabo/backyard/?RubyJavaBridge")
+    (license license:lgpl2.1+)))
+
+(define-public ruby-atoulme-antwrap
+  (package
+    (name "ruby-atoulme-antwrap")
+    (version "0.7.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "atoulme-Antwrap" version))
+              (sha256
+               (base32
+                "05s3iw44lqa81f8nfy5f0xjj808600h82zb9bsh46b9kcq2w2kmz"))))
+    (build-system ruby-build-system)
+    ;; Test data required for most of the tests are not included.
+    (arguments `(#:tests? #f))
+    (native-inputs
+     `(("ruby-hoe" ,ruby-hoe)))
+    (inputs
+     `(("ruby-rjb" ,ruby-rjb)))
+    (synopsis "Ruby wrapper for the Ant build tool")
+    (description "Antwrap is a Ruby module that wraps the Apache Ant build
+tool.  Antwrap can be used to invoke Ant tasks from a Ruby or a JRuby
+script.")
+    (home-page "http://rubyforge.org/projects/antwrap/")
+    (license license:expat)))
+
+(define-public ruby-orderedhash
+  (package
+    (name "ruby-orderedhash")
+    (version "0.0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "orderedhash" version))
+              (sha256
+               (base32
+                "0fryy7f9jbpx33jq5m402yqj01zcg563k9fsxlqbhmq638p4bzd7"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no test suite
+    (synopsis "Ruby library providing an order-preserving hash")
+    (description "Orderedhash is a Ruby library providing a hash
+implementation that preserves the order of items and features some array-like
+extensions.")
+    (home-page "http://codeforpeople.com/lib/ruby/orderedhash/")
+    (license license:public-domain)))
+
+(define-public ruby-xml-simple
+  (package
+    (name "ruby-xml-simple")
+    (version "1.1.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "xml-simple" version))
+              (sha256
+               (base32
+                "0xlqplda3fix5pcykzsyzwgnbamb3qrqkgbrhhfz2a2fxhrkvhw8"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no test suite
+    (synopsis "Simple Ruby library for XML processing")
+    (description "This library provides a simple API for XML processing in
+Ruby.")
+    (home-page "https://github.com/maik/xml-simple")
+    (license license:ruby)))
+
+(define-public ruby-thor
+  (package
+    (name "ruby-thor")
+    (version "0.19.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "thor" version))
+              (sha256
+               (base32
+                "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no test suite
+    (native-inputs
+     `(("bundler" ,bundler)))
+    (synopsis "Ruby toolkit for building command-line interfaces")
+    (description "Thor is a toolkit for building powerful command-line
+interfaces.")
+    (home-page "http://whatisthor.com/")
+    (license license:expat)))
+
 (define-public ruby-useragent
   (package
     (name "ruby-useragent")
@@ -592,6 +733,16 @@ options and parsing command line flags.")
     (home-page "https://github.com/leejarvis/slop")
     (license license:expat)))
 
+(define-public ruby-slop-3
+  (package (inherit ruby-slop)
+    (version "3.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "slop" version))
+              (sha256
+               (base32
+                "00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n"))))))
+
 (define-public ruby-multipart-post
   (package
     (name "ruby-multipart-post")
@@ -628,3 +779,348 @@ net/http library.")
     (description "Arel is a SQL AST manager for Ruby.  It simplifies the
 generation of complex SQL queries and is compatible with various RDBMSes.")
     (license license:expat)))
+
+(define-public ruby-minitar
+  (package
+    (name "ruby-minitar")
+    (version "0.5.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "minitar" version))
+       (sha256
+        (base32
+         "1vpdjfmdq1yc4i620frfp9af02ia435dnpj8ybsd7dc3rypkvbka"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; missing a gemspec
+    (synopsis "Ruby library and utility for handling tar archives")
+    (description
+     "Archive::Tar::Minitar is a pure-Ruby library and command-line utility
+that provides the ability to deal with POSIX tar archive files.")
+    (home-page "http://www.github.com/atoulme/minitar")
+    (license (list license:gpl2+ license:ruby))))
+
+(define-public ruby-mini-portile
+  (package
+    (name "ruby-mini-portile")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mini_portile" version))
+       (sha256
+        (base32
+         "0h3xinmacscrnkczq44s6pnhrp4nqma7k056x5wv5xixvf2wsq2w"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; tests require network access
+    (synopsis "Ports system for Ruby developers")
+    (description "Mini-portile is a port/recipe system for Ruby developers.
+It provides a standard way to compile against specific versions of libraries
+to reproduce user environments.")
+    (home-page "http://github.com/flavorjones/mini_portile")
+    (license license:expat)))
+
+(define-public ruby-nokogiri
+  (package
+    (name "ruby-nokogiri")
+    (version "1.6.6.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "nokogiri" version))
+              (sha256
+               (base32
+                "1j4qv32qjh67dcrc1yy1h8sqjnny8siyy4s44awla8d6jk361h30"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; Tests fail because Nokogiri can only test with an installed extension,
+     ;; and also because many test framework dependencies are missing.
+     '(#:tests? #f
+       #:gem-flags (list "--" "--use-system-libraries"
+                         (string-append "--with-xml2-include="
+                                        (assoc-ref %build-inputs "libxml2")
+                                        "/include/libxml2" ))))
+    (native-inputs
+     `(("ruby-hoe" ,ruby-hoe)
+       ("ruby-rake-compiler", ruby-rake-compiler)))
+    (inputs
+     `(("zlib" ,zlib)
+       ("libxml2" ,libxml2)
+       ("libxslt" ,libxslt)))
+    (propagated-inputs
+     `(("ruby-mini-portile" ,ruby-mini-portile)))
+    (synopsis "HTML, XML, SAX, and Reader parser for Ruby")
+    (description "Nokogiri (鋸) parses and searches XML/HTML, and features
+both CSS3 selector and XPath 1.0 support.")
+    (home-page "http://www.nokogiri.org/")
+    (license license:expat)))
+
+(define-public ruby-method-source
+  (package
+    (name "ruby-method-source")
+    (version "0.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "method_source" version))
+       (sha256
+        (base32
+         "1g5i4w0dmlhzd18dijlqw5gk27bv6dj2kziqzrzb7mpgxgsd1sf2"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     `(("ruby-bacon" ,ruby-bacon)
+       ("git" ,git)))
+    (synopsis "Retrieve the source code for Ruby methods")
+    (description "Method_source retrieves the source code for Ruby methods.
+Additionally, it can extract source code from Proc and Lambda objects or just
+extract comments.")
+    (home-page "https://github.com/banister/method_source")
+    (license license:expat)))
+
+(define-public ruby-coderay
+  (package
+    (name "ruby-coderay")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "coderay" version))
+       (sha256
+        (base32
+         "059wkzlap2jlkhg460pkwc1ay4v4clsmg1bp4vfzjzkgwdckr52s"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; missing test files
+    (synopsis "Ruby syntax highlighting library")
+    (description "Coderay is a Ruby library that provides syntax highlighting
+for select languages.")
+    (home-page "http://coderay.rubychan.de")
+    (license license:expat)))
+
+(define-public ruby-pry
+  (package
+    (name "ruby-pry")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "pry" version))
+       (sha256
+        (base32
+         "1j0r5fm0wvdwzbh6d6apnp7c0n150hpm9zxpm5xvcgfqr36jaj8z"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no tests
+    (propagated-inputs
+     `(("ruby-coderay" ,ruby-coderay)
+       ("ruby-method-source" ,ruby-method-source)
+       ("ruby-slop" ,ruby-slop-3)))
+    (synopsis "Ruby REPL")
+    (description "Pry is an IRB alternative and runtime developer console for
+Ruby.  It features syntax highlighting, a plugin architecture, runtime
+invocation, and source and documentation browsing.")
+    (home-page "http://pryrepl.org")
+    (license license:expat)))
+
+(define-public ruby-thread-safe
+  (package
+    (name "ruby-thread-safe")
+    (version "0.3.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "thread_safe" version))
+       (sha256
+        (base32
+         "1hq46wqsyylx5afkp6jmcihdpv4ynzzq9ygb6z2pb1cbz5js0gcr"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; needs simplecov, among others
+    (synopsis "Thread-safe utilities for Ruby")
+    (description "The thread_safe library provides thread-safe collections and
+utilities for Ruby.")
+    (home-page "https://github.com/ruby-concurrency/thread_safe")
+    (license license:asl2.0)))
+
+(define-public ruby-tzinfo
+  (package
+    (name "ruby-tzinfo")
+    (version "1.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "tzinfo" version))
+       (sha256
+        (base32
+         "1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     `(("ruby-thread-safe" ,ruby-thread-safe)))
+    (synopsis "Time zone library for Ruby")
+    (description "TZInfo is a Ruby library that provides daylight savings
+aware transformations between times in different time zones.")
+    (home-page "http://tzinfo.github.io")
+    (license license:expat)))
+
+(define-public ruby-json
+  (package
+    (name "ruby-json")
+    (version "1.8.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "json" version))
+       (sha256
+        (base32
+         "1nsby6ry8l9xg3yw4adlhk2pnc7i0h0rznvcss4vk3v74qg0k8lc"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f)) ; dependency cycle with sdoc
+    (synopsis "JSON library for Ruby")
+    (description "This Ruby library provides a JSON implementation written as
+a native C extension.")
+    (home-page "http://json-jruby.rubyforge.org/")
+    (license (list license:ruby license:gpl2)))) ; GPL2 only
+
+(define-public ruby-activesupport
+  (package
+    (name "ruby-activesupport")
+    (version "4.2.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "activesupport" version))
+       (sha256
+        (base32
+         "19n38rj6r1gyxgka18qvcxyla0fwan8a5p3ghq0pp8aj93sbmr6f"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no tests
+    (propagated-inputs
+     `(("ruby-i18n" ,ruby-i18n)
+       ("ruby-json" ,ruby-json)
+       ("ruby-minitest" ,ruby-minitest)
+       ("ruby-thread-safe" ,ruby-thread-safe)
+       ("ruby-tzinfo" ,ruby-tzinfo)))
+    (synopsis "Ruby on Rails utility library")
+    (description "ActiveSupport is a toolkit of support libraries and Ruby
+core extensions extracted from the Rails framework.  It includes support for
+multibyte strings, internationalization, time zones, and testing.")
+    (home-page "http://www.rubyonrails.org")
+    (license license:expat)))
+
+(define-public ruby-ox
+  (package
+    (name "ruby-ox")
+    (version "2.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ox" version))
+       (sha256
+        (base32
+         "00i11xd4ayh7349rhgskajfxn0qzkb74ab01217zix9qcapssxax"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no tests
+    (synopsis "Optimized XML library for Ruby")
+    (description
+     "Optimized XML (Ox) is a fast XML parser and object serializer for Ruby
+written as a native C extension.  It was designed to be an alternative to
+Nokogiri and other Ruby XML parsers for generic XML parsing and as an
+alternative to Marshal for Object serialization. ")
+    (home-page "http://www.ohler.com/ox")
+    (license license:expat)))
+
+(define-public ruby-pg
+  (package
+    (name "ruby-pg")
+    (version "0.18.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "pg" version))
+       (sha256
+        (base32
+         "1axxbf6ij1iqi3i1r3asvjc80b0py5bz0m2wy5kdi5xkrpr82kpf"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"))
+    (native-inputs
+     `(("ruby-rake-compiler" ,ruby-rake-compiler)
+       ("ruby-hoe" ,ruby-hoe)
+       ("ruby-rspec" ,ruby-rspec)))
+    (inputs
+     `(("postgresql" ,postgresql)))
+    (synopsis "Ruby interface to PostgreSQL")
+    (description "Pg is the Ruby interface to the PostgreSQL RDBMS.  It works
+with PostgreSQL 8.4 and later.")
+    (home-page "https://bitbucket.org/ged/ruby-pg")
+    (license license:ruby)))
+
+(define-public ruby-byebug
+  (package
+    (name "ruby-byebug")
+    (version "6.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "byebug" version))
+       (sha256
+        (base32
+         "0537h9qbhr6csahmzyn4lk1g5b2lcligbzd21gfy93nx9lbfdnzc"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no tests
+    (synopsis "Debugger for Ruby 2")
+    (description "Byebug is a Ruby 2 debugger implemented using the Ruby 2
+TracePoint C API for execution control and the Debug Inspector C API for call
+stack navigation.  The core component provides support that front-ends can
+build on.  It provides breakpoint handling and bindings for stack frames among
+other things and it comes with a command line interface.")
+    (home-page "http://github.com/deivid-rodriguez/byebug")
+    (license license:bsd-2)))
+
+(define-public ruby-rack
+  (package
+    (name "ruby-rack")
+    (version "1.6.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rack" version))
+       (sha256
+        (base32
+         "09bs295yq6csjnkzj7ncj50i6chfxrhmzg1pk6p0vd2lb9ac8pj5"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-tests
+           (lambda _
+             ;; A few of the tests use the length of a file on disk for
+             ;; Content-Length and Content-Range headers.  However, this file
+             ;; has a shebang in it which an earlier phase patches, growing
+             ;; the file size from 193 to 239 bytes when the store prefix is
+             ;; "/gnu/store".
+             (let ((size-diff (- (string-length (which "ruby"))
+                                 (string-length "/usr/bin/env ruby"))))
+               (substitute* '("test/spec_file.rb")
+                 (("193")
+                  (number->string (+ 193 size-diff)))
+                 (("bytes(.)22-33" all delimiter)
+                  (string-append "bytes"
+                                 delimiter
+                                 (number->string (+ 22 size-diff))
+                                 "-"
+                                 (number->string (+ 33 size-diff))))))
+             #t)))))
+    (native-inputs
+     `(("ruby-bacon" ,ruby-bacon)))
+    (synopsis "Unified web application interface for Ruby")
+    (description "Rack provides a minimal, modular and adaptable interface for
+developing web applications in Ruby.  By wrapping HTTP requests and responses,
+it unifies the API for web servers, web frameworks, and software in between
+into a single method call.")
+    (home-page "http://rack.github.io/")
+    (license license:expat)))
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index f9a3a42e14..61ab96adee 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -43,24 +43,15 @@
 (define-public libssh
   (package
     (name "libssh")
-    (version "0.6.3")
+    (version "0.6.5")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://red.libssh.org/attachments/download/87/libssh-"
-                                  version ".tar.xz"))
+              (uri (string-append
+                    "https://red.libssh.org/attachments/download/121/libssh-"
+                    version ".tar.xz"))
               (sha256
                (base32
-                "1jyaj9h1iglvn02hrvcchbx8ycjpj8b91h8mi459k7q5jp2xgd9b"))
-              (patches
-               ;; Apply the patch as discussed at
-               ;; <http://lists.gnu.org/archive/html/guix-devel/2014-10/msg00180.html>.
-               (list (origin
-                       (uri
-                        "http://git.libssh.org/projects/libssh.git/patch/?id=a033b93c616f4a81afc3fc6a017396d507d96c19")
-                       (method url-fetch)
-                       (sha256
-                        (base32
-                         "16fdkjcnhc6j7qxz9575fzr9044927ws5259yh0xb9yv1q14j0vh")))))))
+                "0b6wyx6bwbb8jpn8x4rhlrdiqwqrwrs0mxjmrnqykm9kw1ijgm8g"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags '("-DWITH_GCRYPT=ON")
@@ -68,10 +59,7 @@
        ;; TODO: Add 'CMockery' and '-DWITH_TESTING=ON' for the test suite.
        #:tests? #f))
     (inputs `(("zlib" ,zlib)
-               ;; Link against an older gcrypt, because libssh tries to access
-               ;; fields of 'gcry_thread_cbs' that are now private:
-               ;; src/threads.c:72:26: error: 'struct gcry_thread_cbs' has no member named 'mutex_init'
-              ("libgcrypt", libgcrypt-1.5)))
+              ("libgcrypt", libgcrypt)))
     (synopsis "SSH client library")
     (description
      "libssh is a C library implementing the SSHv2 and SSHv1 protocol for
@@ -188,15 +176,17 @@ Additionally, various channel-specific options can be negotiated.")
 (define-public guile-ssh
   (package
     (name "guile-ssh")
-    (version "0.7.2")
+    (version "0.8.0")
     (source (origin
+              ;; ftp://memory-heap.org/software/guile-ssh/guile-ssh-VERSION.tar.gz
+              ;; exists, but the server appears to be too slow and unreliable.
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/artyom-poptsov/libguile-ssh.git")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "1wcv10xv7ayrhrg77zyng6flknnlkzhni24nf8x9nic00zha8znk"))))
+                "1ld2khzylaylhqfsfcvbxs95frvm8pkr7dq40ia1wwn9c349fcdv"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (alist-cons-after
@@ -235,7 +225,7 @@ Additionally, various channel-specific options can be negotiated.")
                      ("which" ,which)))
     (inputs `(("guile" ,guile-2.0)
               ("libssh" ,libssh)
-              ("libgcrypt" ,libgcrypt-1.5)))
+              ("libgcrypt" ,libgcrypt)))
     (synopsis "Guile bindings to libssh")
     (description
      "Guile-SSH is a library that provides access to the SSH protocol for
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index ac7cb4677e..29cd34a4f3 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -22,6 +22,7 @@
   #:use-module (guix download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system r)
   #:use-module (gnu packages)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gcc)
@@ -67,7 +68,11 @@
          (add-before
           'check 'set-timezone
           ;; Some tests require the timezone to be set.
-          (lambda _ (setenv "TZ" "UTC") #t)))
+          (lambda _ (setenv "TZ" "UTC") #t))
+         (add-after 'build 'make-info
+          (lambda _ (zero? (system* "make" "info"))))
+         (add-after 'build 'install-info
+          (lambda _ (zero? (system* "make" "install-info")))))
        #:configure-flags
        '("--with-blas=openblas"
          "--with-lapack"
@@ -83,11 +88,20 @@
          "--with-system-pcre"
          "--with-system-tre"
          "--with-system-xz")))
+    ;; R has some support for Java.  When the JDK is available at configure
+    ;; time environment variables pointing to the JDK will be recorded under
+    ;; $R_HOME/etc and ./tools/getsp.java will be compiled which is used by "R
+    ;; CMD javareconf".  "R CMD javareconf" appears to only be used to update
+    ;; the recorded environment variables in $R_HOME/etc.  Refer to
+    ;; https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Java-support
+    ;; for additional information.
+
+    ;; As the JDK is a rather large input with only very limited effects on R,
+    ;; we decided to drop it.
     (native-inputs
      `(("bzip2" ,bzip2)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
-       ("texlive" ,texlive) ; needed to make vignettes
        ("texinfo" ,texinfo) ; for building HTML manuals
        ("which" ,which) ; for tests/Examples/base-Ex.R
        ("xz" ,xz)))
@@ -96,7 +110,6 @@
        ("cairo" ,cairo)
        ("gfortran" ,gfortran)
        ("icu4c" ,icu4c)
-       ("icedtea6" ,icedtea6 "jdk")
        ("lapack" ,lapack)
        ("libjpeg" ,libjpeg)
        ("libpng" ,libpng)
@@ -119,3 +132,369 @@ and clustering.  It also provides robust support for producing
 publication-quality data plots.  A large amount of 3rd-party packages are
 available, greatly increasing its breadth and scope.")
     (license license:gpl3+)))
+
+(define-public r-colorspace
+  (package
+    (name "r-colorspace")
+    (version "1.2-6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/colorspace_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0y8n4ljwhbdvkysdwgqzcnpv107pb3px1jip3k6svv86p72nacds"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/colorspace")
+    (synopsis "Color space manipulation")
+    (description
+     "This package carries out a mapping between assorted color spaces
+including RGB, HSV, HLS, CIEXYZ, CIELUV, HCL (polar CIELUV), CIELAB and polar
+CIELAB.  Qualitative, sequential, and diverging color palettes based on HCL
+colors are provided.")
+    (license license:bsd-3)))
+
+(define-public r-dichromat
+  (package
+    (name "r-dichromat")
+    (version "2.0-0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/dichromat_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "1l8db1nk29ccqg3mkbafvfiw0775iq4gapysf88xq2zp6spiw59i"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/dichromat")
+    (synopsis "Color schemes for dichromats")
+    (description
+     "Dichromat collapses red-green or green-blue distinctions to simulate the
+effects of different types of color-blindness.")
+    (license license:gpl2+)))
+
+(define-public r-digest
+  (package
+    (name "r-digest")
+    (version "0.6.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/digest_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0m9grqv67hhf51lz10whymhw0g0d98466ka694kya5x95hn44qih"))))
+    (build-system r-build-system)
+    (home-page "http://dirk.eddelbuettel.com/code/digest.html")
+    (synopsis "Create cryptographic hash digests of R objects")
+    (description
+     "This package contains an implementation of a function 'digest()' for the
+creation of hash digests of arbitrary R objects (using the md5, sha-1,
+sha-256, crc32, xxhash and murmurhash algorithms) permitting easy comparison
+of R language objects, as well as a function 'hmac()' to create hash-based
+message authentication code.
+
+Please note that this package is not meant to be deployed for cryptographic
+purposes for which more comprehensive (and widely tested) libraries such as
+OpenSSL should be used.")
+    (license license:gpl2+)))
+
+(define-public r-gtable
+  (package
+    (name "r-gtable")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/gtable_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0k9hfj6r5y238gqh92s3cbdn34biczx3zfh79ix5xq0c5vkai2xh"))))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/gtable")
+    (synopsis "R library to arrange grobs in tables")
+    (description
+     "Gtable is a collection of tools to make it easier to work with
+\"tables\" of grobs.")
+    (license license:gpl2+)))
+
+(define-public r-labeling
+  (package
+    (name "r-labeling")
+    (version "0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/labeling_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "13sk7zrrrzry6ky1bp8mmnzcl9jhvkig8j4id9nny7z993mnk00d"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/labeling")
+    (synopsis "Axis labeling algorithms")
+    (description "The labeling package provides a range of axis labeling
+algorithms.")
+    (license license:expat)))
+
+(define-public r-magrittr
+  (package
+    (name "r-magrittr")
+    (version "1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/magrittr_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "1s1ar6rag8m277qcqmdp02gn4awn9bdj9ax0r8s32i59mm1mki05"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/magrittr/index.html")
+    (synopsis "A forward-pipe operator for R")
+    (description
+     "Magrittr provides a mechanism for chaining commands with a new
+forward-pipe operator, %>%.  This operator will forward a value, or the result
+of an expression, into the next function call/expression.  There is flexible
+support for the type of right-hand side expressions.  For more information,
+see package vignette.  To quote Rene Magritte, \"Ceci n'est pas un pipe.\"")
+    (license license:expat)))
+
+(define-public r-munsell
+  (package
+    (name "r-munsell")
+    (version "0.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/munsell_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "1bi5yi0i80778bbzx2rm4f0glpc34kvh24pwwfhm4v32izsqgrw4"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-colorspace" ,r-colorspace)))
+    (home-page "http://cran.r-project.org/web/packages/munsell")
+    (synopsis "Munsell colour system")
+    (description
+     "The Munsell package contains Functions for exploring and using the
+Munsell colour system.")
+    (license license:expat)))
+
+(define-public r-rcpp
+  (package
+    (name "r-rcpp")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/Rcpp_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "182109z0yc1snqgd833ssl2cix6cbq83bcxmy5344b15ym820y38"))))
+    (build-system r-build-system)
+    (home-page "http://www.rcpp.org")
+    (synopsis "Seamless R and C++ Integration")
+    (description
+     "The Rcpp package provides R functions as well as C++ classes which offer
+a seamless integration of R and C++.  Many R data types and objects can be
+mapped back and forth to C++ equivalents which facilitates both writing of new
+code as well as easier integration of third-party libraries.  Documentation
+about Rcpp is provided by several vignettes included in this package, via the
+'Rcpp Gallery' site at <http://gallery.rcpp.org>, the paper by Eddelbuettel
+and Francois (2011, JSS), and the book by Eddelbuettel (2013, Springer); see
+'citation(\"Rcpp\")' for details on these last two.")
+    (license license:gpl2+)))
+
+(define-public r-plyr
+  (package
+    (name "r-plyr")
+    (version "1.8.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/plyr_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "06v4zxawpjz37rp2q2ii5q43g664z9s29j4ydn0cz3crn7lzl6pk"))))
+    (build-system r-build-system)
+    (native-inputs `(("r-rcpp" ,r-rcpp)))
+    (home-page "http://had.co.nz/plyr")
+    (synopsis "Tools for Splitting, Applying and Combining Data")
+    (description
+     "Plyr is a set of tools that solves a common set of problems: you need to
+break a big problem down into manageable pieces, operate on each piece and
+then put all the pieces back together.  For example, you might want to fit a
+model to each spatial location or time point in your study, summarise data by
+panels or collapse high-dimensional arrays to simpler summary statistics.")
+    (license license:expat)))
+
+(define-public r-proto
+  (package
+    (name "r-proto")
+    (version "0.3-10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/proto_" version ".tar.gz"))
+       (sha256
+        (base32 "03mvzi529y6kjcp9bkpk7zlgpcakb3iz73hca6rpjy14pyzl3nfh"))))
+    (build-system r-build-system)
+    (home-page "http://r-proto.googlecode.com")
+    (synopsis "Prototype object-based programming")
+    (description
+     "Proto is an object oriented system using object-based, also called
+prototype-based, rather than class-based object oriented ideas.")
+    (license license:gpl2+)))
+
+(define-public r-rcolorbrewer
+  (package
+    (name "r-rcolorbrewer")
+    (version "1.1-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/RColorBrewer_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "1pfcl8z1pnsssfaaz9dvdckyfnnc6rcq56dhislbf571hhg7isgk"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/RColorBrewer")
+    (synopsis "ColorBrewer palettes")
+    (description
+     "This package provides color schemes for maps (and other graphics)
+designed by Cynthia Brewer as described at http://colorbrewer2.org")
+    ;; Includes code licensed under bsd-4
+    (license license:asl2.0)))
+
+(define-public r-stringi
+  (package
+    (name "r-stringi")
+    (version "0.5-5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cran/src/contrib/stringi_"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "183wrrjhpgl1wbnn9lhghyvhz7l2mc64mpcmzplckal7y9j7pmhw"))))
+    (build-system r-build-system)
+    (inputs `(("icu4c" ,icu4c)))
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (home-page "http://stringi.rexamine.com/")
+    (synopsis "Character string processing facilities")
+    (description
+     "This package allows for fast, correct, consistent, portable, as well as
+convenient character string/text processing in every locale and any native
+encoding.  Owing to the use of the ICU library, the package provides R users
+with platform-independent functions known to Java, Perl, Python, PHP, and Ruby
+programmers.  Among available features there are: pattern searching
+ (e.g.  via regular expressions), random string generation, string collation,
+transliteration, concatenation, date-time formatting and parsing, etc.")
+    (license license:bsd-3)))
+
+(define-public r-stringr
+  (package
+    (name "r-stringr")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/stringr_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0jnz6r9yqyf7dschr2fnn1slg4wn6b4ik5q00j4zrh43bfw7s9pq"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-magrittr" ,r-magrittr)
+       ("r-stringi" ,r-stringi)))
+    (home-page "https://github.com/hadley/stringr")
+    (synopsis "Simple, consistent wrappers for common string operations")
+    (description
+     "Stringr is a consistent, simple and easy to use set of wrappers around
+the fantastic 'stringi' package.  All function and argument names (and
+positions) are consistent, all functions deal with \"NA\"'s and zero length
+vectors in the same way, and the output from one function is easy to feed into
+the input of another.")
+    (license license:gpl2+)))
+
+(define-public r-reshape2
+  (package
+    (name "r-reshape2")
+    (version "1.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/reshape2_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0hl082dyk3pk07nqprpn5dvnrkqhnf6zjnjig1ijddxhlmsrzm7v"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-plyr" ,r-plyr)
+       ("r-rcpp" ,r-rcpp)
+       ("r-stringr" ,r-stringr)))
+    (home-page "https://github.com/hadley/reshape")
+    (synopsis "Flexibly reshape data: a reboot of the \"reshape\" package")
+    (description
+     "Reshape2 is an R library to flexibly restructure and aggregate data
+using just two functions: melt and dcast (or acast).")
+    (license license:expat)))
+
+(define-public r-scales
+  (package
+    (name "r-scales")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/scales_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "12xrmn1vh64dl46bq7n7pa427aicb2ifjrby9in3m32nyvir0kac"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-dichromat" ,r-dichromat)
+       ("r-labeling" ,r-labeling)
+       ("r-munsell" ,r-munsell)
+       ("r-plyr" ,r-plyr)
+       ("r-rcolorbrewer" ,r-rcolorbrewer)
+       ("r-rcpp" ,r-rcpp)))
+    (home-page "https://github.com/hadley/scales")
+    (synopsis "Scale functions for visualization")
+    (description
+     "This package provides graphical scales that map data to aesthetics, and
+provides methods for automatically determining breaks and labels for axes and
+legends.")
+    (license license:expat)))
+
+(define-public r-ggplot2
+  (package
+    (name "r-ggplot2")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cran/src/contrib/ggplot2_"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0794kjqi3lrxb33lr1mykd58959hlgkhdn259vj8fxrh65mqw920"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-digest" ,r-digest)
+       ("r-gtable" ,r-gtable)
+       ("r-plyr" ,r-plyr)
+       ("r-proto" ,r-proto)
+       ("r-reshape2" ,r-reshape2)
+       ("r-scales" ,r-scales)))
+    (home-page "http://ggplot2.org")
+    (synopsis "An implementation of the grammar of graphics")
+    (description
+     "Ggplot2 is an implementation of the grammar of graphics in R.  It
+combines the advantages of both base and lattice graphics: conditioning and
+shared axes are handled automatically, and you can still build up a plot step
+by step from multiple data sources.  It also implements a sophisticated
+multidimensional conditioning system and a consistent interface to map data to
+aesthetic attributes.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 4d7c37fb4f..7f4f7f8f0e 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -98,24 +98,6 @@ changes to project files over time.  It supports both a distributed workflow
 as well as the classic centralized workflow.")
     (license gpl2+)))
 
-(define (package-transitive-propagated-labels* package)
-  "Return a list of the input labels of PACKAGE and its transitive inputs."
-  (let ((name (package-name package)))
-    `(,name
-      ,@(map (match-lambda
-               ((label (? package? _) . _)
-                label))
-             (package-transitive-propagated-inputs package)))))
-
-(define (package-propagated-input-refs inputs packages)
-  "Return a list of (assoc-ref INPUTS <package-name>) for each package in
-PACKAGES and their propagated inputs."
-  (map (lambda (l)
-         `(assoc-ref ,inputs ,l))
-       (delete-duplicates                  ;XXX: efficiency
-        (append-map package-transitive-propagated-labels*
-                    packages))))
-
 (define-public git
   ;; Keep in sync with 'git-manpages'!
   (package
@@ -238,11 +220,13 @@ PACKAGES and their propagated inputs."
                 `("PERL5LIB" ":" prefix
                   ,(map (lambda (o) (string-append o "/lib/perl5/site_perl"))
                         (list
-                         ,@(package-propagated-input-refs
+                         ,@(transitive-input-references
                             'inputs
-                            (list perl-authen-sasl
-                                  perl-net-smtp-ssl
-                                  perl-io-socket-ssl))))))
+                            (map (lambda (l)
+                                   (assoc l (inputs)))
+                                 '("perl-authen-sasl"
+                                   "perl-net-smtp-ssl"
+                                   "perl-io-socket-ssl")))))))
 
               ;; Tell 'git-submodule' where Perl is.
               (wrap-program git-sm
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index c2f88e22cc..fbcfc12624 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -370,14 +370,14 @@ standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).")
 (define-public ffmpeg
   (package
     (name "ffmpeg")
-    (version "2.7.2")
+    (version "2.8")
     (source (origin
              (method url-fetch)
-             (uri (string-append "http://www.ffmpeg.org/releases/ffmpeg-"
-                                 version ".tar.bz2"))
+             (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
+                                 version ".tar.xz"))
              (sha256
               (base32
-               "1wlygd0jp34dk4qagi4h9psn4yk8zgyj7zy9lrpm5332mm87bsvw"))))
+               "10l1iwc01k1algk2v4vzsrahdvqjmjfi3qazm2cwism0d8hsfg4r"))))
     (build-system gnu-build-system)
     (inputs
      `(("fontconfig" ,fontconfig)
@@ -403,7 +403,6 @@ standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).")
        ("zlib", zlib)))
     (native-inputs
      `(("bc" ,bc)
-       ("bzip2" ,bzip2)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo)
@@ -692,7 +691,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
      `(("alsa-lib" ,alsa-lib)
        ("enca" ,enca)
        ("ffmpeg" ,ffmpeg)
-       ("jack" ,jack-2)
+       ("jack" ,jack-1)
        ("ladspa" ,ladspa)
        ("lcms" ,lcms)
        ("libass" ,libass)
@@ -792,15 +791,15 @@ projects while introducing many more.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2015.08.16.1")
+    (version "2015.09.03")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://youtube-dl.org/downloads/"
+              (uri (string-append "https://youtube-dl.org/downloads/"
                                   version "/youtube-dl-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "04g78anvy519pj8m8ys1ifmnmp1x3i9bw3afwqjch71n9f77papy"))))
+                "0wxjbqr07rm26iih12yhv0qwspfrg9safhgnrp8misqjjk4fz86z"))))
     (build-system python-build-system)
     (inputs `(("setuptools" ,python-setuptools)))
     (home-page "http://youtube-dl.org")
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index 0c538daf58..4cd5cd9b11 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -169,6 +169,10 @@ traversing network address translators (NATs) and firewalls.")
                (base32
                 "08ds8s32cjslms1q227ihd6jz35583v378ij4pknfa5xngfijhrb"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags
+       '("--sysconfdir=/etc"
+         "--localstatedir=/var")))
     (inputs `(("zlib" ,zlib)
               ("lzo" ,lzo)
               ("openssl" ,openssl)))
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 0a68d23da0..3e89a728d6 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -663,6 +663,59 @@ minimum to provide high performance operation.")
     ;; bundled CuTest framework uses a different non-copyleft license.
     (license (list l:asl2.0 (l:non-copyleft "file://test/CuTest-README.txt")))))
 
+(define-public sassc
+  ;; libsass must be statically linked and it isn't included in the sassc
+  ;; release tarballs, hence this odd package recipe.
+  (let* ((version "3.2.5")
+         (libsass
+          (origin
+            (method url-fetch)
+            (uri (string-append
+                  "https://github.com/sass/libsass/archive/"
+                  version ".tar.gz"))
+            (file-name (string-append "libsass-" version ".tar.gz"))
+            (sha256
+             (base32
+              "1x25k6p1s1yzsdpzb7bzh8japilmi1mk3z96q66pycbinj9z9is4")))))
+    (package
+      (name "sassc")
+      (version version)
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://github.com/sass/sassc/archive/"
+                                    version ".tar.gz"))
+                (file-name (string-append "sassc-" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "1xf3w75w840rj0nx375rxi7mcv1ngqqq8p3zrzjlyx8jfpnldmv5"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:make-flags '("CC=gcc")
+         #:test-target "test"
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (add-after 'unpack 'unpack-libsass-and-set-path
+             (lambda* (#:key inputs #:allow-other-keys)
+               (and (zero? (system* "tar" "xvf" (assoc-ref inputs "libsass")))
+                    (begin
+                      (setenv "SASS_LIBSASS_PATH"
+                              (string-append (getcwd) "/libsass-" ,version))
+                      #t))))
+           (replace 'install ; no install target
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (mkdir-p bin)
+                 (copy-file "bin/sassc" (string-append bin "/sassc"))
+                 #t))))))
+      (inputs
+       `(("libsass" ,libsass)))
+      (synopsis "CSS pre-processor")
+      (description "SassC is a compiler written in C for the CSS pre-processor
+language known as SASS.")
+      (home-page "http://sass-lang.com/libsass")
+      (license l:expat))))
+
 
 (define-public perl-apache-logformat-compiler
   (package
@@ -1620,6 +1673,39 @@ with Encode::decode(locale => $string).")
 which can be used to parse directory listings.")
     (home-page "http://search.cpan.org/~gaas/File-Listing/")))
 
+(define-public perl-finance-quote
+  (package
+   (name "perl-finance-quote")
+   (version "1.37")
+   (source
+    (origin
+      (method url-fetch)
+      (uri (string-append "https://cpan.metacpan.org/authors/id/E/EC/ECOCODE/"
+                          "Finance-Quote-" version ".tar.gz"))
+      (sha256
+       (base32
+        "1b6pbh7f76fb5sa4f0lhx085xy55pprz5v7z7li7pqiyw7i4f4bf"))
+      (patches (list
+                (search-patch "perl-finance-quote-unuse-mozilla-ca.patch")))))
+   (build-system perl-build-system)
+   (propagated-inputs
+    `(("perl-datetime" ,perl-datetime)
+      ("perl-html-parser" ,perl-html-parser)
+      ("perl-html-tableextract" ,perl-html-tableextract)
+      ("perl-html-tree" ,perl-html-tree)
+      ("perl-http-cookies" ,perl-http-cookies)
+      ("perl-http-message" ,perl-http-message)
+      ("perl-json" ,perl-json)
+      ("perl-libwww" ,perl-libwww)
+      ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
+      ("perl-uri" ,perl-uri)))
+   (home-page "http://search.cpan.org/dist/Finance-Quote")
+   (synopsis "Stock and mutual fund quotes")
+   (description
+    "Finance::Quote gets stock quotes from various internet sources, including
+Yahoo! Finance, Fidelity Investments, and the Australian Stock Exchange.")
+   (license l:gpl2)))
+
 (define-public perl-gssapi
   (package
     (name "perl-gssapi")
@@ -1643,6 +1729,28 @@ which can be used to parse directory listings.")
 described in RFC 2744.")
     (license (package-license perl))))
 
+(define-public perl-html-element-extended
+  (package
+    (name "perl-html-element-extended")
+    (version "1.18")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/M/MS/MSISK/"
+                           "HTML-Element-Extended-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0axknss8c368r5i082yhkfj8mq0w4nglfrpcxcayyzzj13qimvzk"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-html-tree" ,perl-html-tree)))
+    (home-page "http://search.cpan.org/dist/HTML-Element-Extended")
+    (synopsis "Manipulate tables of HTML::Element")
+    (description
+     "HTML::Element::Extended is a Perl extension for manipulating a table
+composed of HTML::Element style components.")
+    (license (package-license perl))))
+
 (define-public perl-html-form
   (package
     (name "perl-html-form")
@@ -1691,6 +1799,29 @@ described in RFC 2744.")
 syntactic legitmacy.")
     (license l:artistic2.0)))
 
+(define-public perl-html-tableextract
+  (package
+    (name "perl-html-tableextract")
+    (version "2.13")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://cpan.metacpan.org/authors/id/M/MS/MSISK/"
+                           "HTML-TableExtract-" version ".tar.gz"))
+       (sha256
+        (base32
+         "01jimmss3q68a89696wmclvqwb2ybz6xgabpnbp6mm6jcni82z8a"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-html-element-extended" ,perl-html-element-extended)
+       ("perl-html-parser" ,perl-html-parser)))
+    (home-page "http://search.cpan.org/dist/HTML-TableExtract")
+    (synopsis "Extract contents from HTML tables")
+    (description
+     "HTML::TableExtract is a Perl module for extracting the content contained
+in tables within an HTML document, either as text or encoded element trees.")
+    (license (package-license perl))))
+
 (define-public perl-html-tree
   (package
     (name "perl-html-tree")
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 6f05b88bbb..9ca5b96fe8 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -1,5 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
+;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu>
+;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +23,8 @@
   #:use-module (guix packages)
   #:use-module (gnu packages linux)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system haskell)
+  #:use-module (gnu packages haskell)
   #:use-module (gnu packages base)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages perl)
@@ -143,3 +147,78 @@ commands would.")
 from scratch.  i3 is primarily targeted at advanced users and
 developers.")
     (license bsd-3)))
+
+(define-public xmonad
+  (package
+    (name "xmonad")
+    (version "0.11.1")
+    (synopsis "Tiling window manager")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://hackage.haskell.org/package/xmonad/"
+                                  "xmonad-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1pfjssamiwpwjp1qqkm9m9p9s35pv381m0cwg6jxg0ppglibzq1r"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-mtl" ,ghc-mtl)
+       ("ghc-utf8-string" ,ghc-utf8-string)
+       ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
+       ("ghc-x11" ,ghc-x11)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after
+          'install 'install-xsession
+          (lambda _
+            (let* ((xsessions (string-append %output "/share/xsessions")))
+              (mkdir-p xsessions)
+              (call-with-output-file
+                  (string-append xsessions "/xmonad.desktop")
+                (lambda (port)
+                  (format port "~
+                    [Desktop Entry]~@
+                    Name=~a~@
+                    Comment=~a~@
+                    Exec=~a/bin/xmonad~@
+                    Type=Application~%" ,name ,synopsis %output)))))))))
+    (home-page "http://xmonad.org")
+    (description
+     "Xmonad is a tiling window manager for X.  Windows are arranged
+automatically to tile the screen without gaps or overlap, maximising screen
+use.  All features of the window manager are accessible from the keyboard: a
+mouse is strictly optional.  Xmonad is written and extensible in Haskell.
+Custom layout algorithms, and other extensions, may be written by the user in
+config files.  Layouts are applied dynamically, and different layouts may be
+used on each workspace.  Xinerama is fully supported, allowing windows to be
+tiled on several screens.")
+    (license bsd-3)))
+
+(define-public ghc-xmonad-contrib
+  (package
+    (name "ghc-xmonad-contrib")
+    (version "0.11.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://hackage.haskell.org/package/xmonad-contrib/"
+                           "xmonad-contrib-" version ".tar.gz"))
+       (sha256
+        (base32
+         "14h9vr33yljymswj50wbimav263y9abdcgi07mvfis0zd08rxqxa"))))
+    (build-system haskell-build-system)
+    (propagated-inputs
+     `(("ghc-mtl" ,ghc-mtl)
+       ("ghc-random" ,ghc-random)
+       ("ghc-utf8-string" ,ghc-utf8-string)
+       ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
+       ("ghc-x11" ,ghc-x11)
+       ("ghc-x11-xft" ,ghc-x11-xft)
+       ("xmonad" ,xmonad)))
+    (home-page "http://xmonad.org")
+    (synopsis "Third party extensions for xmonad")
+    (description
+     "Third party tiling algorithms, configurations, and scripts to Xmonad, a
+tiling window manager for X.")
+    (license bsd-3)))
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 2cbdeef794..e42c58050d 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -38,7 +38,8 @@
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages photo)
-  #:use-module (gnu packages pcre))
+  #:use-module (gnu packages pcre)
+  #:use-module (gnu packages pulseaudio))
 
 (define-public gtk-xfce-engine
   (package
@@ -146,8 +147,9 @@ storage system.")
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)))
     (propagated-inputs
-     ;; libxfce4kbd-private-2.pc refers to all these.
-     `(("gtk+" ,gtk+-2)
+     `(("gtk+-2" ,gtk+-2)  ; required by libxfce4ui-1.pc
+       ("gtk+-3" ,gtk+)    ; required by libxfce4ui-2.pc
+       ;; libxfce4kbd-private-2.pc refers to all these.
        ("libxfce4util" ,libxfce4util)
        ("xfconf" ,xfconf)))
     (inputs `(("libsm" ,libsm)
@@ -267,6 +269,8 @@ management D-Bus specification.")
                 "1c4p3ckghvsad1sj5v8wmar5mh9cbhail9mmhad2f9pwwb10z4ih"))
               (patches (list (search-patch "xfce4-panel-plugins.patch")))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("--enable-gtk3")))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)))
@@ -349,6 +353,37 @@ handle text and images, and has a feature to execute actions on specific text by
 matching them against regular expressions.")
     (license (list gpl2+))))
 
+(define-public xfce4-pulseaudio-plugin
+  (package
+    (name "xfce4-pulseaudio-plugin")
+    (version "0.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://archive.xfce.org/src/panel-plugins/"
+                                  name "/" (version-major+minor version) "/"
+                                  name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0crvb2gyxbnlf46712arg3m2vqx81dixqhqdwss0bngpijy3ca78"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("exo" ,exo)
+       ("libnotify" ,libnotify)
+       ("libxfce4ui" ,libxfce4ui)
+       ("pulseaudio" ,pulseaudio)
+       ("xfce4-panel" ,xfce4-panel)))
+    (home-page "http://git.xfce.org/panel-plugins/xfce4-pulseaudio-plugin/")
+    (synopsis "PulseAudio panel plugin for Xfce")
+    (description
+     "Xfce PulseAudio plugin is a plugin for the Xfce panel which provides a
+convenient way to adjust the audio volume of the PulseAudio sound system and
+to an auto mixer tool like pavucontrol.  It can optionally handle multimedia
+keys for controlling the audio volume.")
+    (license gpl2+)))
+
 (define-public xfce4-appfinder
   (package
     (name "xfce4-appfinder")
@@ -417,7 +452,9 @@ allows you to shutdown the computer from Xfce.")
                                   "/src/" name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "108za1cmjslwzkdl76x9kwxkq8z734kg9nz8rxk057f10pqwxgh4"))))
+                "108za1cmjslwzkdl76x9kwxkq8z734kg9nz8rxk057f10pqwxgh4"))
+              (patches
+               (list (search-patch "xfce4-settings-defaults.patch")))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -631,15 +668,17 @@ on your desktop.")
        ("thunar-volman"        ,thunar-volman)
        ("tumlber"              ,tumbler)
        ("xfce4-appfinder"      ,xfce4-appfinder)
-       ("xfce4-battery-plugin" ,xfce4-battery-plugin)
-       ("xfce4-clipman-plugin" ,xfce4-clipman-plugin)
        ("xfce4-panel"          ,xfce4-panel)
        ("xfce4-session"        ,xfce4-session)
        ("xfce4-settings"       ,xfce4-settings)
        ("xfce4-terminal"       ,xfce4-terminal)
        ("xfconf"               ,xfconf)
        ("xfdesktop"            ,xfdesktop)
-       ("xfwm4"                ,xfwm4)))
+       ("xfwm4"                ,xfwm4)
+       ;; Panel plugins.
+       ("xfce4-battery-plugin"    ,xfce4-battery-plugin)
+       ("xfce4-clipman-plugin"    ,xfce4-clipman-plugin)
+       ("xfce4-pulseaudio-plugin" ,xfce4-pulseaudio-plugin)))
     (home-page "http://www.xfce.org/")
     (synopsis "Desktop environment (meta-package)")
     (description
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index c4a1b15a15..5d65648bfb 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -467,3 +467,25 @@ Canonical XML (part of Libxml2) and Exclusive Canonical XML (part of
 Libxml2).")
     (license (license:x11-style "file://COPYING"
                                 "See 'COPYING' in the distribution."))))
+
+(define-public minixml
+  (package
+    (name "minixml")
+    (version "2.9")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://www.msweet.org/files/project3/mxml-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "14pzhlfidj5v1qbxy7a59yn4jz9pnjrs2zwalz228jsq7ijm9vfd"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f))  ;no "check" target
+    (home-page "http://www.minixml.org/")
+    (synopsis "Small XML parsing library")
+    (description
+     "Mini-XML is a small C library to read and write XML files and strings in
+UTF-8 and UTF-16 encoding.")
+    ;; LGPL 2.0+ with additional exceptions for static linking
+    (license license:lgpl2.0+)))
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 888e446dc0..7f37b3da00 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -884,6 +885,9 @@ This is the GNU operating system, welcome!\n\n")))
           ;; The LVM2 rules are needed as soon as LVM2 or the device-mapper is
           ;; used, so enable them by default.  The FUSE and ALSA rules are
           ;; less critical, but handy.
+          ;;
+          ;; XXX Keep this in sync with the 'udev-service' call in
+          ;; %desktop-services.
           (udev-service #:rules (list lvm2 fuse alsa-utils crda)))))
 
 ;;; base.scm ends here
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 4e4b49df3e..b91bdd8ad3 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,12 +25,18 @@
   #:use-module (gnu services xorg)
   #:use-module (gnu services networking)
   #:use-module (gnu system shadow)
+  #:use-module (gnu system linux) ; unix-pam-service
   #:use-module (gnu packages glib)
   #:use-module (gnu packages admin)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages wicd)
+  #:use-module (gnu packages polkit)
+  #:use-module ((gnu packages linux)
+                #:select (lvm2 fuse alsa-utils crda))
   #:use-module (guix monads)
+  #:use-module (guix records)
   #:use-module (guix store)
   #:use-module (guix gexp)
   #:use-module (ice-9 match)
@@ -39,6 +46,9 @@
             geoclue-application
             %standard-geoclue-applications
             geoclue-service
+            polkit-service
+            elogind-configuration
+            elogind-service
             %desktop-services))
 
 ;;; Commentary:
@@ -374,6 +384,199 @@ site} for more information."
 
 
 ;;;
+;;; Polkit privilege management service.
+;;;
+
+(define* (polkit-service #:key (polkit polkit))
+  "Return a service that runs the @command{polkit} privilege management
+service.  By querying the @command{polkit} service, a privileged system
+component can know when it should grant additional capabilities to ordinary
+users.  For example, an ordinary user can be granted the capability to suspend
+the system if the user is logged in locally."
+  (with-monad %store-monad
+    (return
+     (service
+      (documentation "Run the polkit privilege management service.")
+      (provision '(polkit-daemon))
+      (requirement '(dbus-system))
+
+      (start #~(make-forkexec-constructor
+                (list (string-append #$polkit "/lib/polkit-1/polkitd"))))
+      (stop #~(make-kill-destructor))
+
+      (user-groups (list (user-group
+                          (name "polkitd")
+                          (system? #t))))
+      (user-accounts (list (user-account
+                            (name "polkitd")
+                            (group "polkitd")
+                            (system? #t)
+                            (comment "Polkit daemon user")
+                            (home-directory "/var/empty")
+                            (shell
+                             "/run/current-system/profile/sbin/nologin"))))
+
+      (pam-services (list (unix-pam-service "polkit-1")))))))
+
+
+;;;
+;;; Elogind login and seat management service.
+;;;
+
+(define-record-type* <elogind-configuration> elogind-configuration
+  make-elogind-configuration
+  elogind-configuration
+  (kill-user-processes?            elogind-kill-user-processes?
+                                   (default #f))
+  (kill-only-users                 elogind-kill-only-users
+                                   (default '()))
+  (kill-exclude-users              elogind-kill-exclude-users
+                                   (default '("root")))
+  (inhibit-delay-max-seconds       elogind-inhibit-delay-max-seconds
+                                   (default 5))
+  (handle-power-key                elogind-handle-power-key
+                                   (default 'poweroff))
+  (handle-suspend-key              elogind-handle-suspend-key
+                                   (default 'suspend))
+  (handle-hibernate-key            elogind-handle-hibernate-key
+                                   ;; (default 'hibernate)
+                                   ;; XXX Ignore it for now, since we don't
+                                   ;; yet handle resume-from-hibernation in
+                                   ;; our initrd.
+                                   (default 'ignore))
+  (handle-lid-switch               elogind-handle-lid-switch
+                                   (default 'suspend))
+  (handle-lid-switch-docked        elogind-handle-lid-switch-docked
+                                   (default 'ignore))
+  (power-key-ignore-inhibited?     elogind-power-key-ignore-inhibited?
+                                   (default #f))
+  (suspend-key-ignore-inhibited?   elogind-suspend-key-ignore-inhibited?
+                                   (default #f))
+  (hibernate-key-ignore-inhibited? elogind-hibernate-key-ignore-inhibited?
+                                   (default #f))
+  (lid-switch-ignore-inhibited?    elogind-lid-switch-ignore-inhibited?
+                                   (default #t))
+  (holdoff-timeout-seconds         elogind-holdoff-timeout-seconds
+                                   (default 30))
+  (idle-action                     elogind-idle-action
+                                   (default 'ignore))
+  (idle-action-seconds             elogind-idle-action-seconds
+                                   (default (* 30 60)))
+  (runtime-directory-size-percent  elogind-runtime-directory-size-percent
+                                   (default 10))
+  (runtime-directory-size          elogind-runtime-directory-size
+                                   (default #f))
+  (remove-ipc?                     elogind-remove-ipc?
+                                   (default #t))
+
+  (suspend-state                   elogind-suspend-state
+                                   (default '("mem" "standby" "freeze")))
+  (suspend-mode                    elogind-suspend-mode
+                                   (default '()))
+  (hibernate-state                 elogind-hibernate-state
+                                   (default '("disk")))
+  (hibernate-mode                  elogind-hibernate-mode
+                                   (default '("platform" "shutdown")))
+  (hybrid-sleep-state              elogind-hybrid-sleep-state
+                                   (default '("disk")))
+  (hybrid-sleep-mode               elogind-hybrid-sleep-mode
+                                   (default
+                                     '("suspend" "platform" "shutdown"))))
+
+(define (elogind-configuration-file config)
+  (define (yesno x)
+    (match x
+      (#t "yes")
+      (#f "no")
+      (_ (error "expected #t or #f, instead got:" x))))
+  (define char-set:user-name
+    (string->char-set "abcdefghijklmnopqrstuvwxyz0123456789_-"))
+  (define (valid-list? l pred)
+    (and-map (lambda (x) (string-every pred x)) l))
+  (define (user-name-list users)
+    (unless (valid-list? users char-set:user-name)
+      (error "invalid user list" users))
+    (string-join users " "))
+  (define (enum val allowed)
+    (unless (memq val allowed)
+      (error "invalid value" val allowed))
+    (symbol->string val))
+  (define (non-negative-integer x)
+    (unless (exact-integer? x) (error "not an integer" x))
+    (when (negative? x) (error "negative number not allowed" x))
+    (number->string x))
+  (define handle-actions
+    '(ignore poweroff reboot halt kexec suspend hibernate hybrid-sleep lock))
+  (define (handle-action x)
+    (enum x handle-actions))
+  (define (sleep-list tokens)
+    (unless (valid-list? tokens char-set:user-name)
+      (error "invalid sleep list" tokens))
+    (string-join tokens " "))
+  (define-syntax ini-file-clause
+    (syntax-rules ()
+      ((_ config (prop (parser getter)))
+       (string-append prop "=" (parser (getter config)) "\n"))
+      ((_ config str)
+       (string-append str "\n"))))
+  (define-syntax-rule (ini-file config file clause ...)
+    (text-file file (string-append (ini-file-clause config clause) ...)))
+  (ini-file
+   config "logind.conf"
+   "[Login]"
+   ("KillUserProcesses" (yesno elogind-kill-user-processes?))
+   ("KillOnlyUsers" (user-name-list elogind-kill-only-users))
+   ("KillExcludeUsers" (user-name-list elogind-kill-exclude-users))
+   ("InhibitDelayMaxSecs" (non-negative-integer elogind-inhibit-delay-max-seconds))
+   ("HandlePowerKey" (handle-action elogind-handle-power-key))
+   ("HandleSuspendKey" (handle-action elogind-handle-suspend-key))
+   ("HandleHibernateKey" (handle-action elogind-handle-hibernate-key))
+   ("HandleLidSwitch" (handle-action elogind-handle-lid-switch))
+   ("HandleLidSwitchDocked" (handle-action elogind-handle-lid-switch-docked))
+   ("PowerKeyIgnoreInhibited" (yesno elogind-power-key-ignore-inhibited?))
+   ("SuspendKeyIgnoreInhibited" (yesno elogind-suspend-key-ignore-inhibited?))
+   ("HibernateKeyIgnoreInhibited" (yesno elogind-hibernate-key-ignore-inhibited?))
+   ("LidSwitchIgnoreInhibited" (yesno elogind-lid-switch-ignore-inhibited?))
+   ("HoldoffTimeoutSecs" (non-negative-integer elogind-holdoff-timeout-seconds))
+   ("IdleAction" (handle-action elogind-idle-action))
+   ("IdleActionSeconds" (non-negative-integer elogind-idle-action-seconds))
+   ("RuntimeDirectorySize"
+    (identity
+     (lambda (config)
+       (match (elogind-runtime-directory-size-percent config)
+         (#f (non-negative-integer (elogind-runtime-directory-size config)))
+         (percent (string-append (non-negative-integer percent) "%"))))))
+   ("RemoveIpc" (yesno elogind-remove-ipc?))
+   "[Sleep]"
+   ("SuspendState" (sleep-list elogind-suspend-state))
+   ("SuspendMode" (sleep-list elogind-suspend-mode))
+   ("HibernateState" (sleep-list elogind-hibernate-state))
+   ("HibernateMode" (sleep-list elogind-hibernate-mode))
+   ("HybridSleepState" (sleep-list elogind-hybrid-sleep-state))
+   ("HybridSleepMode" (sleep-list elogind-hybrid-sleep-mode))))
+
+(define* (elogind-service #:key (elogind elogind)
+                          (config (elogind-configuration)))
+  "Return a service that runs the @command{elogind} login and seat management
+service.  The @command{elogind} service integrates with PAM to allow other
+system components to know the set of logged-in users as well as their session
+types (graphical, console, remote, etc.).  It can also clean up after users
+when they log out."
+  (mlet %store-monad ((config-file (elogind-configuration-file config)))
+    (return
+     (service
+      (documentation "Run the elogind login and seat management service.")
+      (provision '(elogind))
+      (requirement '(dbus-system))
+
+      (start #~(make-forkexec-constructor
+                (list (string-append #$elogind "/libexec/elogind/elogind"))
+                #:environment-variables
+                (list (string-append "ELOGIND_CONF_FILE=" #$config-file))))
+      (stop #~(make-kill-destructor))))))
+
+
+;;;
 ;;; The default set of desktop services.
 ;;;
 (define %desktop-services
@@ -383,23 +586,38 @@ site} for more information."
          (avahi-service)
          (wicd-service)
          (upower-service)
-         ;; FIXME: The colord and geoclue services could all be bus-activated
-         ;; by default, so they don't run at program startup.  However, user
-         ;; creation and /var/lib.colord creation happen at service activation
-         ;; time, so we currently add them to the set of default services.
+         ;; FIXME: The colord, geoclue, and polkit services could all be
+         ;; bus-activated by default, so they don't run at program startup.
+         ;; However, user creation and /var/lib/colord creation happen at
+         ;; service activation time, so we currently add them to the set of
+         ;; default services.
          (colord-service)
          (geoclue-service)
-         (dbus-service (list avahi wicd upower colord geoclue))
+         (polkit-service)
+         (elogind-service)
+         (dbus-service (list avahi wicd upower colord geoclue polkit elogind))
 
          (ntp-service)
 
          (map (lambda (mservice)
-                ;; Provide an nscd ready to use nss-mdns.
                 (mlet %store-monad ((service mservice))
-                  (if (memq 'nscd (service-provision service))
-                      (nscd-service (nscd-configuration)
-                                    #:name-services (list nss-mdns))
-                      mservice)))
+                  (cond
+                   ;; Provide an nscd ready to use nss-mdns.
+                   ((memq 'nscd (service-provision service))
+                    (nscd-service (nscd-configuration)
+                                  #:name-services (list nss-mdns)))
+
+                   ;; Add more rules to udev-service.
+                   ;;
+                   ;; XXX Keep this in sync with the 'udev-service' call in
+                   ;; %base-services.  Here we intend only to add 'upower',
+                   ;; 'colord', and 'elogind'.
+                   ((memq 'udev (service-provision service))
+                    (udev-service #:rules
+                                  (list lvm2 fuse alsa-utils crda
+                                        upower colord elogind)))
+
+                   (else mservice))))
               %base-services)))
 
 ;;; desktop.scm ends here
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 003eb443d1..b177f93398 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -50,6 +50,7 @@
             %devtmpfs-file-system
             %immutable-store
             %control-groups
+            %elogind-file-systems
 
             %base-file-systems
             %container-file-systems
@@ -258,6 +259,26 @@ UUID representation."
                '("cpuset" "cpu" "cpuacct" "memory" "devices" "freezer"
                  "blkio" "perf_event" "hugetlb")))))
 
+(define %elogind-file-systems
+  ;; We don't use systemd, but these file systems are needed for elogind,
+  ;; which was extracted from systemd.
+  (list (file-system
+          (device "none")
+          (mount-point "/run/systemd")
+          (type "tmpfs")
+          (check? #f)
+          (flags '(no-suid no-dev no-exec))
+          (options "mode=0755")
+          (create-mount-point? #t))
+        (file-system
+          (device "none")
+          (mount-point "/run/user")
+          (type "tmpfs")
+          (check? #f)
+          (flags '(no-suid no-dev no-exec))
+          (options "mode=0755")
+          (create-mount-point? #t))))
+
 (define %base-file-systems
   ;; List of basic file systems to be mounted.  Note that /proc and /sys are
   ;; currently mounted by the initrd.
@@ -265,6 +286,7 @@ UUID representation."
                 %pseudo-terminal-file-system
                 %shared-memory-file-system
                 %immutable-store)
+          %elogind-file-systems
           %control-groups))
 
 ;; File systems for Linux containers differ from %base-file-systems in that
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 880236861e..c161526d77 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -349,7 +349,7 @@ Use Alt-F2 for documentation.
                      parted ddrescue
                      grub                  ;mostly so xrefs to its manual work
                      cryptsetup
-                     wireless-tools iw wpa-supplicant-light iproute
+                     wireless-tools iw wpa-supplicant-minimal iproute
                      ;; XXX: We used to have GNU fdisk here, but as of version
                      ;; 2.0.0a, that pulls Guile 1.8, which takes unreasonable
                      ;; space; furthermore util-linux's fdisk is already
diff --git a/gnu/system/locale.scm b/gnu/system/locale.scm
index be9abcb81d..393dd42354 100644
--- a/gnu/system/locale.scm
+++ b/gnu/system/locale.scm
@@ -83,6 +83,8 @@
   (letrec-syntax ((utf8-locale (syntax-rules ()
                                  ((_ name*)
                                   (locale-definition
+                                   ;; Note: We choose "utf8", which is the
+                                   ;; "normalized codeset".
                                    (name (string-append name* ".utf8"))
                                    (source name*)
                                    (charset "UTF-8")))))
diff --git a/guix/build-system/r.scm b/guix/build-system/r.scm
new file mode 100644
index 0000000000..4daec5eb66
--- /dev/null
+++ b/guix/build-system/r.scm
@@ -0,0 +1,134 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build-system r)
+  #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (guix packages)
+  #:use-module (guix derivations)
+  #:use-module (guix search-paths)
+  #:use-module (guix build-system)
+  #:use-module (guix build-system gnu)
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-26)
+  #:export (%r-build-system-modules
+            r-build
+            r-build-system))
+
+;; Commentary:
+;;
+;; Standard build procedure for R packages.
+;;
+;; Code:
+
+(define %r-build-system-modules
+  ;; Build-side modules imported by default.
+  `((guix build r-build-system)
+    ,@%gnu-build-system-modules))
+
+(define (default-r)
+  "Return the default R package."
+  ;; Lazily resolve the binding to avoid a circular dependency.
+  (let ((r-mod (resolve-interface '(gnu packages statistics))))
+    (module-ref r-mod 'r)))
+
+(define* (lower name
+                #:key source inputs native-inputs outputs system target
+                (r (default-r))
+                #:allow-other-keys
+                #:rest arguments)
+  "Return a bag for NAME."
+  (define private-keywords
+    '(#:source #:target #:inputs #:native-inputs))
+
+  (and (not target)                               ;XXX: no cross-compilation
+       (bag
+         (name name)
+         (system system)
+         (host-inputs `(,@(if source
+                              `(("source" ,source))
+                              '())
+                        ,@inputs
+
+                        ;; Keep the standard inputs of 'gnu-build-system'.
+                        ,@(standard-packages)))
+         (build-inputs `(("r" ,r)
+                         ,@native-inputs))
+         (outputs outputs)
+         (build r-build)
+         (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (r-build store name inputs
+                  #:key
+                  (tests? #t)
+                  (test-target "tests")
+                  (configure-flags ''())
+                  (phases '(@ (guix build r-build-system)
+                              %standard-phases))
+                  (outputs '("out"))
+                  (search-paths '())
+                  (system (%current-system))
+                  (guile #f)
+                  (imported-modules %r-build-system-modules)
+                  (modules '((guix build r-build-system)
+                             (guix build utils))))
+  "Build SOURCE with INPUTS."
+  (define builder
+    `(begin
+       (use-modules ,@modules)
+       (r-build #:name ,name
+                #:source ,(match (assoc-ref inputs "source")
+                            (((? derivation? source))
+                             (derivation->output-path source))
+                            ((source)
+                             source)
+                            (source
+                             source))
+                #:configure-flags ,configure-flags
+                #:system ,system
+                #:tests? ,tests?
+                #:test-target ,test-target
+                #:phases ,phases
+                #:outputs %outputs
+                #:search-paths ',(map search-path-specification->sexp
+                                      search-paths)
+                #:inputs %build-inputs)))
+
+  (define guile-for-build
+    (match guile
+      ((? package?)
+       (package-derivation store guile system #:graft? #f))
+      (#f                                         ; the default
+       (let* ((distro (resolve-interface '(gnu packages commencement)))
+              (guile  (module-ref distro 'guile-final)))
+         (package-derivation store guile system #:graft? #f)))))
+
+  (build-expression->derivation store name builder
+                                #:inputs inputs
+                                #:system system
+                                #:modules imported-modules
+                                #:outputs outputs
+                                #:guile-for-build guile-for-build))
+
+(define r-build-system
+  (build-system
+    (name 'r)
+    (description "The standard R build system")
+    (lower lower)))
+
+;;; r.scm ends here
diff --git a/guix/build/download.scm b/guix/build/download.scm
index ae59b0109c..6e85174bc9 100644
--- a/guix/build/download.scm
+++ b/guix/build/download.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015 Steve Sprang <scs@stevesprang.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -54,17 +55,46 @@ object, as an inexact number."
   (+ (time-second duration)
      (/ (time-nanosecond duration) 1e9)))
 
-(define (throughput->string throughput)
-  "Given THROUGHPUT, measured in bytes per second, return a string
-representing it in a human-readable way."
-  (if (> throughput 3e6)
-      (format #f "~,2f MiB/s" (/ throughput (expt 2. 20)))
-      (format #f "~,0f KiB/s" (/ throughput 1024.0))))
+(define (seconds->string duration)
+  "Given DURATION in seconds, return a string representing it in 'hh:mm:ss'
+format."
+  (if (not (number? duration))
+      "00:00:00"
+      (let* ((total-seconds (inexact->exact (round duration)))
+             (extra-seconds (modulo total-seconds 3600))
+             (hours         (quotient total-seconds 3600))
+             (mins          (quotient extra-seconds 60))
+             (secs          (modulo extra-seconds 60)))
+        (format #f "~2,'0d:~2,'0d:~2,'0d" hours mins secs))))
+
+(define (byte-count->string size)
+  "Given SIZE in bytes, return a string representing it in a human-readable
+way."
+  (let ((KiB 1024.)
+        (MiB (expt 1024. 2))
+        (GiB (expt 1024. 3))
+        (TiB (expt 1024. 4)))
+    (cond
+     ((< size KiB) (format #f "~dB" (inexact->exact size)))
+     ((< size MiB) (format #f "~dKiB" (inexact->exact (round (/ size KiB)))))
+     ((< size GiB) (format #f "~,1fMiB" (/ size MiB)))
+     ((< size TiB) (format #f "~,2fGiB" (/ size GiB)))
+     (else         (format #f "~,3fTiB" (/ size TiB))))))
+
+(define* (progress-bar % #:optional (bar-width 20))
+  "Return % as a string representing an ASCII-art progress bar.  The total
+width of the bar is BAR-WIDTH."
+  (let* ((fraction (/ % 100))
+         (filled   (inexact->exact (floor (* fraction bar-width))))
+         (empty    (- bar-width filled)))
+    (format #f "[~a~a]"
+            (make-string filled #\#)
+            (make-string empty #\space))))
 
 (define* (progress-proc file size #:optional (log-port (current-output-port)))
-  "Return a procedure to show the progress of FILE's download, which is
-SIZE byte long.  The returned procedure is suitable for use as an
-argument to `dump-port'.  The progress report is written to LOG-PORT."
+  "Return a procedure to show the progress of FILE's download, which is SIZE
+bytes long.  The returned procedure is suitable for use as an argument to
+`dump-port'.  The progress report is written to LOG-PORT."
   ;; XXX: Because of <http://bugs.gnu.org/19939> this procedure is often not
   ;; called as frequently as we'd like too; this is especially bad with Nginx
   ;; on hydra.gnu.org, which returns whole nars as a single chunk.
@@ -83,14 +113,24 @@ argument to `dump-port'.  The progress report is written to LOG-PORT."
       (if (number? size)
           (lambda (transferred cont)
             (with-elapsed-time elapsed
-              (let ((%          (* 100.0 (/ transferred size)))
-                    (throughput (if elapsed
-                                    (/ transferred elapsed)
-                                    0)))
+              (let* ((%          (* 100.0 (/ transferred size)))
+                     (throughput (if elapsed
+                                     (/ transferred elapsed)
+                                     0))
+                     (left       (format #f " ~a  ~a"
+                                         (basename file)
+                                         (byte-count->string size)))
+                     (right      (format #f "~a/s ~a ~a~6,1f%"
+                                         (byte-count->string throughput)
+                                         (seconds->string elapsed)
+                                         (progress-bar %) %))
+                     ;; TODO: Make this adapt to the actual terminal width.
+                     (cols       80)
+                     (num-spaces (max 1 (- cols (+ (string-length left)
+                                                   (string-length right)))))
+                     (gap        (make-string num-spaces #\space)))
+                (format log-port "~a~a~a" left gap right)
                 (display #\cr log-port)
-                (format log-port "~a\t~5,1f% of ~,1f KiB (~a)"
-                        file % (/ size 1024.0)
-                        (throughput->string throughput))
                 (flush-output-port log-port)
                 (cont))))
           (lambda (transferred cont)
@@ -99,9 +139,10 @@ argument to `dump-port'.  The progress report is written to LOG-PORT."
                                     (/ transferred elapsed)
                                     0)))
                 (display #\cr log-port)
-                (format log-port "~a\t~6,1f KiB transferred (~a)"
-                        file (/ transferred 1024.0)
-                        (throughput->string throughput))
+                (format log-port "~a\t~a transferred (~a/s)"
+                        file
+                        (byte-count->string transferred)
+                        (byte-count->string throughput))
                 (flush-output-port log-port)
                 (cont))))))))
 
diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm
index aacb5a4186..cb5bde3191 100644
--- a/guix/build/emacs-build-system.scm
+++ b/guix/build/emacs-build-system.scm
@@ -84,7 +84,7 @@ store in '.el' files."
          (elpa-name-ver (store-directory->elpa-name-version out))
          (el-dir (string-append out %install-suffix "/" elpa-name-ver))
          (name-ver (strip-store-file-name out))
-         (info-dir (string-append out "/share/info/" name-ver))
+         (info-dir (string-append out "/share/info/"))
          (info-files (find-files el-dir "\\.info$")))
     (unless (null? info-files)
       (mkdir-p info-dir)
diff --git a/guix/build/r-build-system.scm b/guix/build/r-build-system.scm
new file mode 100644
index 0000000000..3fc13eb835
--- /dev/null
+++ b/guix/build/r-build-system.scm
@@ -0,0 +1,112 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build r-build-system)
+  #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+  #:use-module (guix build utils)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 ftw)
+  #:use-module (ice-9 popen)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:export (%standard-phases
+            r-build))
+
+;; Commentary:
+;;
+;; Builder-side code of the standard build procedure for R packages.
+;;
+;; Code:
+
+(define (invoke-r command params)
+  (zero? (apply system* "R" "CMD" command params)))
+
+(define (pipe-to-r command params)
+  (let ((port (apply open-pipe* OPEN_WRITE "R" params)))
+    (display command port)
+    (zero? (status:exit-val (close-pipe port)))))
+
+(define (generate-site-path inputs)
+  (string-join (map (match-lambda
+                      ((_ . path)
+                       (string-append path "/site-library")))
+                    ;; Restrict to inputs beginning with "r-".
+                    (filter (match-lambda
+                              ((name . _)
+                               (string-prefix? "r-" name)))
+                            inputs))
+               ":"))
+
+(define* (check #:key test-target inputs outputs tests? #:allow-other-keys)
+  "Run the test suite of a given R package."
+  (let* ((libdir    (string-append (assoc-ref outputs "out") "/site-library/"))
+
+         ;; R package names are case-sensitive and cannot be derived from the
+         ;; Guix package name.  The exact package name is required as an
+         ;; argument to ‘tools::testInstalledPackage’, which runs the tests
+         ;; for a package given its name and the path to the “library” (a
+         ;; location for a collection of R packages) containing it.
+
+         ;; Since there can only be one R package in any collection (=
+         ;; “library”), the name of the only directory in the collection path
+         ;; is the original name of the R package.
+         (pkg-name  (car (scandir libdir (negate (cut member <> '("." ".."))))))
+         (testdir   (string-append libdir pkg-name "/" test-target))
+         (site-path (string-append libdir ":" (generate-site-path inputs))))
+    (if (and tests? (file-exists? testdir))
+        (begin
+          (setenv "R_LIBS_SITE" site-path)
+          (pipe-to-r (string-append "tools::testInstalledPackage(\"" pkg-name "\", "
+                                    "lib.loc = \"" libdir "\")")
+                     '("--no-save" "--slave")))
+        #t)))
+
+(define* (install #:key outputs inputs (configure-flags '())
+                  #:allow-other-keys)
+  "Install a given R package."
+  (let* ((out          (assoc-ref outputs "out"))
+         (site-library (string-append out "/site-library/"))
+         (params       (append configure-flags
+                               (list "--install-tests"
+                                     (string-append "--library=" site-library)
+                                     ".")))
+         (site-path    (string-append site-library ":"
+                                      (generate-site-path inputs))))
+    ;; If dependencies cannot be found at install time, R will refuse to
+    ;; install the package.
+    (setenv "R_LIBS_SITE" site-path)
+    ;; Some R packages contain a configure script for which the CONFIG_SHELL
+    ;; variable should be set.
+    (setenv "CONFIG_SHELL" (which "bash"))
+    (mkdir-p site-library)
+    (invoke-r "INSTALL" params)))
+
+(define %standard-phases
+  (modify-phases gnu:%standard-phases
+    (delete 'configure)
+    (delete 'build)
+    (delete 'check) ; tests must be run after installation
+    (replace 'install install)
+    (add-after 'install 'check check)))
+
+(define* (r-build #:key inputs (phases %standard-phases)
+                       #:allow-other-keys #:rest args)
+  "Build the given R package, applying all of PHASES in order."
+  (apply gnu:gnu-build #:inputs inputs #:phases phases args))
+
+;;; r-build-system.scm ends here
diff --git a/guix/build/ruby-build-system.scm b/guix/build/ruby-build-system.scm
index 90fab92f6a..4184ccc9ac 100644
--- a/guix/build/ruby-build-system.scm
+++ b/guix/build/ruby-build-system.scm
@@ -44,12 +44,16 @@ directory."
 (define* (unpack #:key source #:allow-other-keys)
   "Unpack the gem SOURCE and enter the resulting directory."
   (and (zero? (system* "gem" "unpack" source))
-       (begin
-         ;; The unpacked gem directory is named the same as the archive, sans
-         ;; the ".gem" extension.
-         (chdir (match:substring (string-match "^(.*)\\.gem$"
-                                               (basename source))
-                                 1))
+       ;; The unpacked gem directory is named the same as the archive, sans
+       ;; the ".gem" extension.  It is renamed to simply "gem" in an effort to
+       ;; keep file names shorter to avoid UNIX-domain socket file names and
+       ;; shebangs that exceed the system's fixed maximum length when running
+       ;; test suites.
+       (let ((dir (match:substring (string-match "^(.*)\\.gem$"
+                                                 (basename source))
+                                   1)))
+         (rename-file dir "gem")
+         (chdir "gem")
          #t)))
 
 (define* (build #:key source #:allow-other-keys)
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index fc801a5e9d..2c2fbde0a3 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -50,6 +50,8 @@
             mkdtemp!
             pivot-root
 
+            CLONE_CHILD_CLEARTID
+            CLONE_CHILD_SETTID
             CLONE_NEWNS
             CLONE_NEWUTS
             CLONE_NEWIPC
@@ -303,12 +305,14 @@ string TMPL and return its file name.  TMPL must end with 'XXXXXX'."
         (pointer->string result)))))
 
 ;; Linux clone flags, from linux/sched.h
-(define CLONE_NEWNS   #x00020000)
-(define CLONE_NEWUTS  #x04000000)
-(define CLONE_NEWIPC  #x08000000)
-(define CLONE_NEWUSER #x10000000)
-(define CLONE_NEWPID  #x20000000)
-(define CLONE_NEWNET  #x40000000)
+(define CLONE_CHILD_CLEARTID #x00200000)
+(define CLONE_CHILD_SETTID   #x01000000)
+(define CLONE_NEWNS          #x00020000)
+(define CLONE_NEWUTS         #x04000000)
+(define CLONE_NEWIPC         #x08000000)
+(define CLONE_NEWUSER        #x10000000)
+(define CLONE_NEWPID         #x20000000)
+(define CLONE_NEWNET         #x40000000)
 
 ;; The libc interface to sys_clone is not useful for Scheme programs, so the
 ;; low-level system call is wrapped instead.
@@ -325,7 +329,13 @@ string TMPL and return its file name.  TMPL must end with 'XXXXXX'."
       "Create a new child process by duplicating the current parent process.
 Unlike the fork system call, clone accepts FLAGS that specify which resources
 are shared between the parent and child processes."
-      (proc syscall-id flags %null-pointer))))
+      (let ((ret (proc syscall-id flags %null-pointer))
+            (err (errno)))
+        (if (= ret -1)
+            (throw 'system-error "clone" "~d: ~A"
+                   (list flags (strerror err))
+                   (list err))
+            ret)))))
 
 (define setns
   ;; Some systems may be using an old (pre-2.14) version of glibc where there
diff --git a/guix/download.scm b/guix/download.scm
index 6e91607196..42956772f5 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -202,6 +202,12 @@
        "http://ftp.fr.debian.org/debian/"
        "http://ftp.debian.org/debian/"))))
 
+(define %mirror-file
+  ;; Copy of the list of mirrors to a file.  This allows us to keep a single
+  ;; copy in the store, and computing it here avoids repeated calls to
+  ;; 'object->string'.
+  (plain-file "mirrors" (object->string %mirrors)))
+
 (define (gnutls-package)
   "Return the default GnuTLS package."
   (let ((module (resolve-interface '(gnu packages tls))))
@@ -210,16 +216,14 @@
 (define* (url-fetch url hash-algo hash
                     #:optional name
                     #:key (system (%current-system))
-                    (guile (default-guile))
-                    (mirrors %mirrors))
+                    (guile (default-guile)))
   "Return a fixed-output derivation that fetches URL (a string, or a list of
 strings denoting alternate URLs), which is expected to have hash HASH of type
 HASH-ALGO (a symbol).  By default, the file name is the base name of URL;
 optionally, NAME can specify a different file name.
 
 When one of the URL starts with mirror://, then its host part is
-interpreted as the name of a mirror scheme, taken from MIRRORS; MIRRORS
-must be a list of symbol/URL-list pairs.
+interpreted as the name of a mirror scheme, taken from %MIRROR-FILE.
 
 Alternately, when URL starts with file://, return the corresponding file name
 in the store."
@@ -239,10 +243,6 @@ in the store."
         ((url ...)
          (any https? url)))))
 
-  (define mirror-file
-    ;; Copy the list of mirrors to a file to keep a single copy in the store.
-    (plain-file "mirrors" (object->string mirrors)))
-
   (define builder
     #~(begin
         #+(if need-gnutls?
@@ -261,7 +261,7 @@ in the store."
         (url-fetch (call-with-input-string (getenv "guix download url")
                      read)
                    #$output
-                   #:mirrors (call-with-input-file #$mirror-file read))))
+                   #:mirrors (call-with-input-file #$%mirror-file read))))
 
   (let ((uri (and (string? url) (string->uri url))))
     (if (or (and (string? url) (not uri))
@@ -288,12 +288,11 @@ in the store."
                             ;; Honor the user's proxy settings.
                             #:leaked-env-vars '("http_proxy" "https_proxy")
 
-                            ;; In general, offloading downloads is not a good idea.
-                            ;;#:local-build? #t
-                            ;; FIXME: The above would also disable use of
-                            ;; substitutes on old daemons, so comment it out;
-                            ;; see <https://bugs.gnu.org/18747>.
-                            )))))
+                            ;; In general, offloading downloads is not a good
+                            ;; idea.  Daemons before 0.8.3 would also
+                            ;; interpret this as "do not substitute" (see
+                            ;; <https://bugs.gnu.org/18747>.)
+                            #:local-build? #t)))))
 
 (define* (download-to-store store url #:optional (name (basename url))
                             #:key (log (current-error-port)) recursive?)
diff --git a/guix/git-download.scm b/guix/git-download.scm
index 0f2218c13e..1e5c845e34 100644
--- a/guix/git-download.scm
+++ b/guix/git-download.scm
@@ -89,9 +89,7 @@ HASH-ALGO (a symbol).  Use NAME as the file name, or a generic name if #f."
   (mlet %store-monad ((guile (package->derivation guile system)))
     (gexp->derivation (or name "git-checkout") build
                       #:system system
-                      ;; FIXME: See <https://bugs.gnu.org/18747>.
-                      ;; Uncomment when fixed daemons are widely deployed.
-                      ;;#:local-build? #t
+                      #:local-build? #t           ;don't offload repo cloning
                       #:hash-algo hash-algo
                       #:hash hash
                       #:recursive? #t
diff --git a/guix/http-client.scm b/guix/http-client.scm
index dc8d3298fc..5cfe05f2e0 100644
--- a/guix/http-client.scm
+++ b/guix/http-client.scm
@@ -19,7 +19,6 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix http-client)
-  #:use-module (guix utils)
   #:use-module (web uri)
   #:use-module ((web client) #:hide (open-socket-for-uri))
   #:use-module (web response)
@@ -167,13 +166,15 @@ closes PORT, unless KEEP-ALIVE? is true."
    (define close
      (and (not keep-alive?)
           (lambda ()
-            (close port))))
+            (close-port port))))
 
    (make-custom-binary-input-port "delimited input port" read! #f #f close))
 
- (unless (guile-version>? "2.0.9")
+ (unless (guile-version>? "2.0.11")
    ;; Guile <= 2.0.9 had a bug whereby 'response-body-port' would read more
    ;; than what 'content-length' says.  See Guile commit 802a25b.
+   ;; Guile <= 2.0.12 had a bug whereby the 'close' method of the response
+   ;; body port would fail with wrong-arg-num.  See Guile commit 5a10e41.
    (module-set! (resolve-module '(web response))
                 'make-delimited-input-port make-delimited-input-port)))
 
diff --git a/guix/import/cran.scm b/guix/import/cran.scm
new file mode 100644
index 0000000000..8ed5e5407f
--- /dev/null
+++ b/guix/import/cran.scm
@@ -0,0 +1,188 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix import cran)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 regex)
+  #:use-module (srfi srfi-1)
+  #:use-module (sxml simple)
+  #:use-module (sxml match)
+  #:use-module (sxml xpath)
+  #:use-module (guix http-client)
+  #:use-module (guix hash)
+  #:use-module (guix store)
+  #:use-module (guix base32)
+  #:use-module ((guix download) #:select (download-to-store))
+  #:use-module (guix import utils)
+  #:export (cran->guix-package))
+
+;;; Commentary:
+;;;
+;;; Generate a package declaration template for the latest version of an R
+;;; package on CRAN, using the HTML description downloaded from
+;;; cran.r-project.org.
+;;;
+;;; Code:
+
+(define string->license
+  (match-lambda
+   ("AGPL-3" 'agpl3+)
+   ("Artistic-2.0" 'artistic2.0)
+   ("Apache License 2.0" 'asl2.0)
+   ("BSD_2_clause" 'bsd-2)
+   ("BSD_3_clause" 'bsd-3)
+   ("GPL-2" 'gpl2+)
+   ("GPL-3" 'gpl3+)
+   ("LGPL-2" 'lgpl2.0+)
+   ("LGPL-2.1" 'lgpl2.1+)
+   ("LGPL-3" 'lgpl3+)
+   ("MIT" 'x11)
+   ((x) (string->license x))
+   ((lst ...) `(list ,@(map string->license lst)))
+   (_ #f)))
+
+(define (format-inputs names)
+  "Generate a sorted list of package inputs from a list of package NAMES."
+  (map (lambda (name)
+         (list name (list 'unquote (string->symbol name))))
+       (sort names string-ci<?)))
+
+(define* (maybe-inputs package-inputs #:optional (type 'inputs))
+  "Given a list of PACKAGE-INPUTS, tries to generate the TYPE field of a
+package definition."
+  (match package-inputs
+    (()
+     '())
+    ((package-inputs ...)
+     `((,type (,'quasiquote ,(format-inputs package-inputs)))))))
+
+(define (table-datum tree label)
+  "Extract the datum node following a LABEL in the sxml table TREE.  Only the
+first cell of a table row is considered a label cell."
+  ((node-pos 1)
+   ((sxpath `(xhtml:tr
+              (xhtml:td 1)        ; only first cell can contain label
+              (equal? ,label)
+              ,(node-parent tree) ; go up to label cell
+              ,(node-parent tree) ; go up to matching row
+              (xhtml:td 2)))      ; select second cell
+    tree)))
+
+(define %cran-url "http://cran.r-project.org/web/packages/")
+
+(define (cran-fetch name)
+  "Return an sxml representation of the CRAN page for the R package NAME,
+or #f on failure.  NAME is case-sensitive."
+  ;; This API always returns the latest release of the module.
+  (let ((cran-url (string-append %cran-url name)))
+    (false-if-exception
+     (xml->sxml (http-fetch cran-url)
+                #:trim-whitespace? #t
+                #:namespaces '((xhtml . "http://www.w3.org/1999/xhtml"))
+                #:default-entity-handler
+                (lambda (port name)
+                  (case name
+                    ((nbsp) " ")
+                    ((ge) ">=")
+                    ((gt) ">")
+                    ((lt) "<")
+                    (else
+                     (format (current-warning-port)
+                             "~a:~a:~a: undefined entitity: ~a\n"
+                             cran-url (port-line port) (port-column port)
+                             name)
+                     (symbol->string name))))))))
+
+(define (cran-sxml->sexp sxml)
+  "Return the `package' s-expression for a CRAN package from the SXML
+representation of the package page."
+  (define (nodes->text nodeset)
+    (string-join ((sxpath '(// *text*)) nodeset) " "))
+
+  (define (guix-name name)
+    (if (string-prefix? "r-" name)
+        (string-downcase name)
+        (string-append "r-" (string-downcase name))))
+
+  (sxml-match-let*
+   (((*TOP* (xhtml:html
+             ,head
+             (xhtml:body
+              (xhtml:h2 ,name-and-synopsis)
+              (xhtml:p ,description)
+              ,summary
+              (xhtml:h4 "Downloads:") ,downloads
+              . ,rest)))
+     sxml))
+   (let* ((name       (match:prefix (string-match ": " name-and-synopsis)))
+          (synopsis   (match:suffix (string-match ": " name-and-synopsis)))
+          (version    (nodes->text (table-datum summary "Version:")))
+          (license    ((compose string->license nodes->text)
+                       (table-datum summary "License:")))
+          (home-page  (nodes->text ((sxpath '((xhtml:a 1)))
+                                    (table-datum summary "URL:"))))
+          (source-url (string-append "mirror://cran/"
+                                     ;; Remove double dots, because we want an
+                                     ;; absolute path.
+                                     (regexp-substitute/global
+                                      #f "\\.\\./"
+                                      (string-join
+                                       ((sxpath '((xhtml:a 1) @ href *text*))
+                                        (table-datum downloads
+                                                     " Package source: ")))
+                                      'pre 'post)))
+          (tarball    (with-store store (download-to-store store source-url)))
+          (sysdepends (map match:substring
+                           (list-matches
+                            "[^ ]+"
+                            ;; Strip off comma and parenthetical
+                            ;; expressions.
+                            (regexp-substitute/global
+                             #f "(,|\\([^\\)]+\\))"
+                             (nodes->text (table-datum summary
+                                                       "SystemRequirements:"))
+                             'pre 'post))))
+          (imports    (map guix-name
+                           ((sxpath '(// xhtml:a *text*))
+                            (table-datum summary "Imports:")))))
+     `(package
+        (name ,(guix-name name))
+        (version ,version)
+        (source (origin
+                  (method url-fetch)
+                  (uri (string-append ,@(factorize-uri source-url version)))
+                  (sha256
+                   (base32
+                    ,(bytevector->nix-base32-string (file-sha256 tarball))))))
+        (build-system r-build-system)
+        ,@(maybe-inputs sysdepends)
+        ,@(maybe-inputs imports 'propagated-inputs)
+        (home-page ,(if (string-null? home-page)
+                        (string-append %cran-url name)
+                        home-page))
+        (synopsis ,synopsis)
+        ;; Use double spacing
+        (description ,(regexp-substitute/global #f "\\. \\b" description
+                                                'pre ".  " 'post))
+        (license ,license)))))
+
+(define (cran->guix-package package-name)
+  "Fetch the metadata for PACKAGE-NAME from cran.r-project.org, and return the
+`package' s-expression corresponding to that package, or #f on failure."
+  (let ((module-meta (cran-fetch package-name)))
+    (and=> module-meta cran-sxml->sexp)))
diff --git a/guix/import/gem.scm b/guix/import/gem.scm
index 3c28d1d9fd..c64c4e9374 100644
--- a/guix/import/gem.scm
+++ b/guix/import/gem.scm
@@ -105,8 +105,9 @@ VERSION, HASH, HOME-PAGE, DESCRIPTION, DEPENDENCIES, and LICENSES."
      (description ,description)
      (home-page ,home-page)
      (license ,(match licenses
+                 (() #f)
                  ((license) (license->symbol license))
-                 (_ (map license->symbol licenses))))))
+                 (_ `(list ,@(map license->symbol licenses)))))))
 
 (define* (gem->guix-package package-name #:optional version)
   "Fetch the metadata for PACKAGE-NAME from rubygems.org, and return the
diff --git a/guix/licenses.scm b/guix/licenses.scm
index dae0e3d386..c3b76af9b9 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +30,7 @@
             non-copyleft
             bsd-style                             ;deprecated!
             cc0
+            cc-by-sa4.0 cc-by3.0
             cddl1.0
             cecill-c
             artistic2.0 clarified-artistic
@@ -38,6 +40,7 @@
             expat
             freetype
             gpl1 gpl1+ gpl2 gpl2+ gpl3 gpl3+
+            gfl1.0
             fdl1.3+
             opl1.0+
             isc
@@ -135,6 +138,16 @@ at URI, which may be a file:// URI pointing the package's tree."
            "http://directory.fsf.org/wiki/License:CC0"
            "http://www.gnu.org/licenses/license-list.html#CC0"))
 
+(define cc-by-sa4.0
+  (license "CC-BY-SA 4.0"
+           "http://creativecommons.org/licenses/by-sa/4.0/"
+           "Creative Commons Attribution-ShareAlike 4.0 International"))
+
+(define cc-by3.0
+  (license "CC-BY 3.0"
+           "http://creativecommons.org/licenses/by/3.0/"
+           "Creative Commons Attribution 3.0 Unported"))
+
 (define cddl1.0
   (license "CDDL 1.0"
            "http://directory.fsf.org/wiki/License:CDDLv1.0"
@@ -211,6 +224,13 @@ at URI, which may be a file:// URI pointing the package's tree."
            "https://www.gnu.org/licenses/gpl.html"
            "https://www.gnu.org/licenses/license-list#GNUGPLv3"))
 
+;; The “GUST font license” is legally equivalent to LPPL v1.3c as it only
+;; extends the LPPL with an optional request.
+(define gfl1.0
+  (license "GUST font license 1.0"
+           "http://www.gust.org.pl/projects/e-foundry/licenses/GUST-FONT-LICENSE.txt"
+           "https://www.gnu.org/licenses/license-list#LPPL-1.3a"))
+
 (define fdl1.3+
   (license "FDL 1.3+"
            "https://www.gnu.org/licenses/fdl.html"
diff --git a/guix/monads.scm b/guix/monads.scm
index 61cd533bf4..0b0ad239de 100644
--- a/guix/monads.scm
+++ b/guix/monads.scm
@@ -239,10 +239,10 @@ CONDITION is true, return *unspecified* in the current monad."
             (identifier? #'id)
             ;; Slow path: Return a closure-returning procedure (we don't
             ;; guarantee (eq? LIFTN LIFTN), but that's fine.)
-            (lambda (liftn proc monad)
-              (lambda (args ...)
-                (with-monad monad
-                  (return (proc args ...))))))))))))
+            #'(lambda (proc monad)
+                (lambda (args ...)
+                  (with-monad monad
+                    (return (proc args ...))))))))))))
 
 (define-lift lift0 ())
 (define-lift lift1 (a))
diff --git a/guix/packages.scm b/guix/packages.scm
index da4940981d..49c6b44884 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -93,6 +94,8 @@
             package-output
             package-grafts
 
+            transitive-input-references
+
             %supported-systems
             %hurd-systems
             %hydra-supported-systems
@@ -604,6 +607,18 @@ for the host system (\"native inputs\"), and not target inputs."
 recursively."
   (transitive-inputs (package-propagated-inputs package)))
 
+(define (transitive-input-references alist inputs)
+  "Return a list of (assoc-ref ALIST <label>) for each (<label> <package> . _)
+in INPUTS and their transitive propagated inputs."
+  (define label
+    (match-lambda
+      ((label . _)
+       label)))
+
+  (map (lambda (input)
+         `(assoc-ref ,alist ,(label input)))
+       (transitive-inputs inputs)))
+
 (define-syntax define-memoized/v
   (lambda (form)
     "Define a memoized single-valued unary procedure with docstring.
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index d593b5a8a7..ab2a39b1f8 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -25,6 +25,7 @@
   #:use-module (guix utils)
   #:use-module (guix monads)
   #:use-module (guix gexp)
+  #:autoload   (guix http-client) (http-fetch http-get-error?)
   #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:use-module (ice-9 vlist)
@@ -42,6 +43,45 @@
 
             guix-build))
 
+(define %default-log-urls
+  ;; Default base URLs for build logs.
+  '("http://hydra.gnu.org/log"))
+
+;; XXX: The following procedure cannot be in (guix store) because of the
+;; dependency on (guix derivations).
+(define* (log-url store file #:key (base-urls %default-log-urls))
+  "Return a URL under one of the BASE-URLS where a build log for FILE can be
+found.  Return #f if no build log was found."
+  (define (valid-url? url)
+    ;; Probe URL and return #t if it is accessible.
+    (guard (c ((http-get-error? c) #f))
+      (close-port (http-fetch url #:buffered? #f))
+      #t))
+
+  (define (find-url file)
+    (let ((base (basename file)))
+      (any (lambda (base-url)
+             (let ((url (string-append base-url "/" base)))
+               (and (valid-url? url) url)))
+           base-urls)))
+
+  (cond ((derivation-path? file)
+         (catch 'system-error
+           (lambda ()
+             ;; Usually we'll have more luck with the output file name since
+             ;; the deriver that was used by the server could be different, so
+             ;; try one of the output file names.
+             (let ((drv (call-with-input-file file read-derivation)))
+               (or (find-url (derivation->output-path drv))
+                   (find-url file))))
+           (lambda args
+             ;; As a last resort, try the .drv.
+             (if (= ENOENT (system-error-errno args))
+                 (find-url file)
+                 (apply throw args)))))
+        (else
+         (find-url file))))
+
 (define (register-root store paths root)
   "Register ROOT as an indirect GC root for all of PATHS."
   (let* ((root (string-append (canonicalize-path (dirname root))
@@ -457,6 +497,11 @@ arguments with packages that use the specified source."
                                         (list %default-options)))
              (store (open-connection))
              (drv   (options->derivations store opts))
+             (urls  (map (cut string-append <> "/log")
+                         (if (assoc-ref opts 'substitutes?)
+                             (or (assoc-ref opts 'substitute-urls)
+                                 %default-substitute-urls)
+                             '())))
              (roots (filter-map (match-lambda
                                  (('gc-root . root) root)
                                  (_ #f))
@@ -470,7 +515,9 @@ arguments with packages that use the specified source."
 
         (cond ((assoc-ref opts 'log-file?)
                (for-each (lambda (file)
-                           (let ((log (log-file store file)))
+                           (let ((log (or (log-file store file)
+                                          (log-url store file
+                                                   #:base-urls urls))))
                              (if log
                                  (format #t "~a~%" log)
                                  (leave (_ "no build log for '~a'~%")
diff --git a/guix/scripts/graph.scm b/guix/scripts/graph.scm
index 475f054571..2b671be131 100644
--- a/guix/scripts/graph.scm
+++ b/guix/scripts/graph.scm
@@ -39,6 +39,16 @@
             %bag-emerged-node-type
             %derivation-node-type
             %reference-node-type
+            %node-types
+
+            node-type
+            node-type?
+            node-type-identifier
+            node-type-label
+            node-type-edges
+            node-type-convert
+            node-type-name
+            node-type-description
 
             %graphviz-backend
             graph-backend?
@@ -370,6 +380,9 @@ given BACKEND.  Use NODE-TYPE to traverse the DAG."
                 (lambda (opt name arg result)
                   (list-node-types)
                   (exit 0)))
+        (option '(#\e "expression") #t #f
+                (lambda (opt name arg result)
+                  (alist-cons 'expression arg result)))
         (option '(#\h "help") #f #f
                 (lambda args
                   (show-help)
@@ -387,6 +400,8 @@ Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"))
   -t, --type=TYPE        represent nodes of the given TYPE"))
   (display (_ "
       --list-types       list the available graph types"))
+  (display (_ "
+  -e, --expression=EXPR  consider the package EXPR evaluates to"))
   (newline)
   (display (_ "
   -h, --help             display this help and exit"))
@@ -407,12 +422,14 @@ Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"))
   (with-error-handling
     (let* ((opts     (parse-command-line args %options
                                          (list %default-options)))
-           (specs    (filter-map (match-lambda
-                                   (('argument . spec) spec)
-                                   (_ #f))
-                                 opts))
            (type     (assoc-ref opts 'node-type))
-           (packages (map specification->package specs)))
+           (packages (filter-map (match-lambda
+                                   (('argument . spec)
+                                    (specification->package spec))
+                                   (('expression . exp)
+                                    (read/eval-package-expression exp))
+                                   (_ #f))
+                                 opts)))
       (with-store store
         (run-with-store store
           (mlet %store-monad ((nodes (mapm %store-monad
diff --git a/guix/scripts/import.scm b/guix/scripts/import.scm
index 6cd762a537..7b29794e8f 100644
--- a/guix/scripts/import.scm
+++ b/guix/scripts/import.scm
@@ -73,7 +73,7 @@ rather than \\n."
 ;;; Entry point.
 ;;;
 
-(define importers '("gnu" "nix" "pypi" "cpan" "hackage" "elpa" "gem"))
+(define importers '("gnu" "nix" "pypi" "cpan" "hackage" "elpa" "gem" "cran"))
 
 (define (resolve-importer name)
   (let ((module (resolve-interface
diff --git a/guix/scripts/import/cran.scm b/guix/scripts/import/cran.scm
new file mode 100644
index 0000000000..f11fa1004f
--- /dev/null
+++ b/guix/scripts/import/cran.scm
@@ -0,0 +1,92 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix scripts import cran)
+  #:use-module (guix ui)
+  #:use-module (guix utils)
+  #:use-module (guix import cran)
+  #:use-module (guix scripts import)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-11)
+  #:use-module (srfi srfi-37)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 format)
+  #:export (guix-import-cran))
+
+
+;;;
+;;; Command-line options.
+;;;
+
+(define %default-options
+  '())
+
+(define (show-help)
+  (display (_ "Usage: guix import cran PACKAGE-NAME
+Import and convert the CRAN package for PACKAGE-NAME.\n"))
+  (display (_ "
+  -h, --help             display this help and exit"))
+  (display (_ "
+  -V, --version          display version information and exit"))
+  (newline)
+  (show-bug-report-information))
+
+(define %options
+  ;; Specification of the command-line options.
+  (cons* (option '(#\h "help") #f #f
+                 (lambda args
+                   (show-help)
+                   (exit 0)))
+         (option '(#\V "version") #f #f
+                 (lambda args
+                   (show-version-and-exit "guix import cran")))
+         %standard-import-options))
+
+
+;;;
+;;; Entry point.
+;;;
+
+(define (guix-import-cran . args)
+  (define (parse-options)
+    ;; Return the alist of option values.
+    (args-fold* args %options
+                (lambda (opt name arg result)
+                  (leave (_ "~A: unrecognized option~%") name))
+                (lambda (arg result)
+                  (alist-cons 'argument arg result))
+                %default-options))
+
+  (let* ((opts (parse-options))
+         (args (filter-map (match-lambda
+                            (('argument . value)
+                             value)
+                            (_ #f))
+                           (reverse opts))))
+    (match args
+      ((package-name)
+       (let ((sexp (cran->guix-package package-name)))
+         (unless sexp
+           (leave (_ "failed to download description for package '~a'~%")
+                  package-name))
+         sexp))
+      (()
+       (leave (_ "too few arguments~%")))
+      ((many ...)
+       (leave (_ "too many arguments~%"))))))
diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm
index 14ac8cba81..2a618c9451 100644
--- a/guix/scripts/lint.scm
+++ b/guix/scripts/lint.scm
@@ -24,6 +24,7 @@
   #:use-module (guix download)
   #:use-module (guix ftp-client)
   #:use-module (guix packages)
+  #:use-module (guix licenses)
   #:use-module (guix records)
   #:use-module (guix ui)
   #:use-module (guix utils)
@@ -56,7 +57,15 @@
             check-derivation
             check-home-page
             check-source
-            check-formatting))
+            check-license
+            check-formatting
+
+            %checkers
+            lint-checker
+            lint-checker?
+            lint-checker-name
+            lint-checker-description
+            lint-checker-check))
 
 
 ;;;
@@ -511,6 +520,16 @@ descriptions maintained upstream."
                     (format #f (_ "failed to create derivation: ~s~%")
                             args)))))
 
+(define (check-license package)
+  "Warn about type errors of the 'license' field of PACKAGE."
+  (match (package-license package)
+    ((or (? license?)
+         ((? license?) ...))
+     #t)
+    (x
+     (emit-warning package (_ "invalid license field")
+                   'license))))
+
 
 ;;;
 ;;; Source code formatting.
@@ -613,6 +632,13 @@ them for PACKAGE."
      (description "Validate home-page URLs")
      (check       check-home-page))
    (lint-checker
+     (name        'license)
+     ;; TRANSLATORS: <license> is the name of a data type and must not be
+     ;; translated.
+     (description "Make sure the 'license' field is a <license> \
+or a list thereof")
+     (check       check-license))
+   (lint-checker
      (name        'source)
      (description "Validate source URLs")
      (check       check-source))
diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm
index e3bcac8047..cc96355947 100644
--- a/guix/scripts/publish.scm
+++ b/guix/scripts/publish.scm
@@ -151,7 +151,7 @@ PATH-INFO.  The narinfo is signed with KEY."
          (references (string-join
                       (map basename (path-info-references path-info))
                       " "))
-         (deriver (path-info-deriver path-info))
+         (deriver    (path-info-deriver path-info))
          (base-info  (format #f
                              "StorePath: ~a
 URL: ~a
@@ -162,12 +162,21 @@ References: ~a~%"
                              store-path url hash size references))
          ;; Do not render a "Deriver" or "System" line if we are rendering
          ;; info for a derivation.
-         (info (if (string-null? deriver)
-                   base-info
-                   (let ((drv (load-derivation deriver)))
-                     (format #f "~aSystem: ~a~%Deriver: ~a~%"
-                             base-info (derivation-system drv)
-                             (basename deriver)))))
+         (info       (if (string-null? deriver)
+                         base-info
+                         (catch 'system-error
+                           (lambda ()
+                             (let ((drv (load-derivation deriver)))
+                               (format #f "~aSystem: ~a~%Deriver: ~a~%"
+                                       base-info (derivation-system drv)
+                                       (basename deriver))))
+                           (lambda args
+                             ;; DERIVER might be missing, but that's fine:
+                             ;; it's only used for <substitutable> where it's
+                             ;; optional.  'System' is currently unused.
+                             (if (= ENOENT (system-error-errno args))
+                                 base-info
+                                 (apply throw args))))))
          (signature  (base64-encode-string
                       (canonical-sexp->string (signed-string info)))))
     (format #f "~aSignature: 1;~a;~a~%" info (gethostname) signature)))
diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm
index e6ed8d23eb..e8459e5ffb 100644
--- a/guix/scripts/pull.scm
+++ b/guix/scripts/pull.scm
@@ -43,7 +43,7 @@
 
 (define %snapshot-url
   ;; "http://hydra.gnu.org/job/guix/master/tarball/latest/download"
-  "http://git.savannah.gnu.org/cgit/guix.git/snapshot/guix-master.tar.gz"
+  "http://git.savannah.gnu.org/cgit/guix.git/snapshot/master.tar.gz"
   )
 
 (define-syntax-rule (with-environment-variable variable value body ...)
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index 28519d78e2..e7980a97b0 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -149,7 +149,7 @@ values: 'interactive' (default), 'always', and 'never'."
                           port-sha256)))
               (update-package-source package version hash)))
           (warning (_ "~a: version ~a could not be \
-downloaded and authenticated; not updating")
+downloaded and authenticated; not updating~%")
                    (package-name package) version)))))
 
 
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index 95aae2a372..e908bc997e 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -703,7 +703,7 @@ Internal tool to substitute a pre-built binary to a local build.\n"))
 ;;;
 
 (define (display-narinfo-data narinfo)
-  "Write to the current output port the contents of NARINFO is the format
+  "Write to the current output port the contents of NARINFO in the format
 expected by the daemon."
   (format #t "~a\n~a\n~a\n"
           (narinfo-path narinfo)
diff --git a/guix/ui.scm b/guix/ui.scm
index a6d4fd10cf..ca5b844a43 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -2,7 +2,8 @@
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;; Copyright © 2014 Deck Pickard <deck.r.pickard@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -45,6 +46,9 @@
   #:use-module (ice-9 regex)
   #:autoload   (system repl repl)  (start-repl)
   #:autoload   (system repl debug) (make-debug stack->vector)
+  #:use-module (texinfo)
+  #:use-module (texinfo plain-text)
+  #:use-module (texinfo string-utils)
   #:export (_
             N_
             P_
@@ -69,6 +73,7 @@
             switch-symlinks
             config-directory
             fill-paragraph
+            package-description-string
             string->recutils
             package->recutils
             package-specification->name+version+output
@@ -77,6 +82,7 @@
             args-fold*
             parse-command-line
             run-guix-command
+            run-guix
             program-name
             guix-warning-port
             warning
@@ -98,7 +104,15 @@
 
 (define _ (cut gettext <> %gettext-domain))
 (define N_ (cut ngettext <> <> <> %gettext-domain))
-(define P_ (cut gettext <> %package-text-domain))
+
+(define (P_ msgid)
+  "Return the translation of the package description or synopsis MSGID."
+  ;; Descriptions/synopses might occasionally be empty strings, even if that
+  ;; is something we try to avoid.  Since (gettext "") can return a non-empty
+  ;; string, explicitly check for that case.
+  (if (string-null? msgid)
+      msgid
+      (gettext msgid %package-text-domain)))
 
 (define-syntax-rule (define-diagnostic name prefix)
   "Create a diagnostic macro (i.e., NAME), which will prepend PREFIX to all
@@ -766,6 +780,28 @@ converted to a space; sequences of more than one line break are preserved."
 ;;; Packages.
 ;;;
 
+(define %text-width
+  (make-parameter (or (and=> (getenv "WIDTH") string->number)
+                      80)))
+
+(set! (@@ (texinfo plain-text) wrap*)
+      ;; XXX: Monkey patch this private procedure to let 'package->recutils'
+      ;; parameterize the fill of description field correctly.
+      (lambda strings
+        (let ((indent (fluid-ref (@@ (texinfo plain-text) *indent*))))
+          (fill-string (string-concatenate strings)
+                       #:line-width (%text-width) #:initial-indent indent
+                       #:subsequent-indent indent))))
+
+(define (texi->plain-text str)
+  "Return a plain-text representation of texinfo fragment STR."
+  (stexi->plain-text (texi-fragment->stexi str)))
+
+(define (package-description-string package)
+  "Return a plain-text representation of PACKAGE description field."
+  (and=> (package-description package)
+         (compose texi->plain-text P_)))
+
 (define (string->recutils str)
   "Return a version of STR where newlines have been replaced by newlines
 followed by \"+ \", which makes for a valid multi-line field value in the
@@ -778,18 +814,9 @@ followed by \"+ \", which makes for a valid multi-line field value in the
                       '()
                       str)))
 
-(define* (package->recutils p port
-                            #:optional (width (or (and=> (getenv "WIDTH")
-                                                         string->number)
-                                                  80)))
+(define* (package->recutils p port #:optional (width (%text-width)))
   "Write to PORT a `recutils' record of package P, arranging to fit within
 WIDTH columns."
-  (define (description->recutils str)
-    (let ((str (P_ str)))
-      (string->recutils
-       (fill-paragraph str width
-                       (string-length "description: ")))))
-
   (define (dependencies->recutils packages)
     (let ((list (string-join (map package-full-name
                                   (sort packages package<?)) " ")))
@@ -833,9 +860,15 @@ WIDTH columns."
                        (chr       chr))
                       (or (and=> (package-synopsis p) P_)
                           "")))
-  (format port "description: ~a~%"
-          (and=> (package-description p) description->recutils))
-  (newline port))
+  (format port "~a~2%"
+          (string->recutils
+           (string-trim-right
+            (parameterize ((%text-width width))
+              (texi->plain-text
+               (string-append "description: "
+                              (or (and=> (package-description p) P_)
+                                  ""))))
+            #\newline))))
 
 (define (string->generations str)
   "Return the list of generations matching a pattern in STR.  This function
@@ -1032,31 +1065,37 @@ found."
     (parameterize ((program-name command))
       (apply command-main args))))
 
+(define (run-guix . args)
+  "Run the 'guix' command defined by command line ARGS.
+Unlike 'guix-main', this procedure assumes that locale, i18n support,
+and signal handling has already been set up."
+  (define option? (cut string-prefix? "-" <>))
+
+  (match args
+    (()
+     (format (current-error-port)
+             (_ "guix: missing command name~%"))
+     (show-guix-usage))
+    ((or ("-h") ("--help"))
+     (show-guix-help))
+    (("--version")
+     (show-version-and-exit "guix"))
+    (((? option? o) args ...)
+     (format (current-error-port)
+             (_ "guix: unrecognized option '~a'~%") o)
+     (show-guix-usage))
+    (("help" args ...)
+     (show-guix-help))
+    ((command args ...)
+     (apply run-guix-command
+            (string->symbol command)
+            args))))
+
 (define guix-warning-port
   (make-parameter (current-warning-port)))
 
 (define (guix-main arg0 . args)
   (initialize-guix)
-  (let ()
-    (define (option? str) (string-prefix? "-" str))
-    (match args
-      (()
-       (format (current-error-port)
-               (_ "guix: missing command name~%"))
-       (show-guix-usage))
-      ((or ("-h") ("--help"))
-       (show-guix-help))
-      (("--version")
-       (show-version-and-exit "guix"))
-      (((? option? o) args ...)
-       (format (current-error-port)
-               (_ "guix: unrecognized option '~a'~%") o)
-       (show-guix-usage))
-      (("help" args ...)
-       (show-guix-help))
-      ((command args ...)
-       (apply run-guix-command
-              (string->symbol command)
-              args)))))
+  (apply run-guix args))
 
 ;;; ui.scm ends here
diff --git a/tests/cran.scm b/tests/cran.scm
new file mode 100644
index 0000000000..c9cb5f69d0
--- /dev/null
+++ b/tests/cran.scm
@@ -0,0 +1,178 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (test-cran)
+  #:use-module (guix import cran)
+  #:use-module (guix tests)
+  #:use-module (srfi srfi-64)
+  #:use-module (ice-9 match))
+
+(define sxml
+  '(*TOP* (xhtml:html
+           (xhtml:head
+            (xhtml:title "CRAN - Package my-example-sxml"))
+           (xhtml:body
+            (xhtml:h2 "my-example-sxml: Short description")
+            (xhtml:p "Long description")
+            (xhtml:table
+             (@ (summary "Package my-example-sxml summary"))
+             (xhtml:tr
+              (xhtml:td "Version:")
+              (xhtml:td "1.2.3"))
+             (xhtml:tr
+              (xhtml:td "Depends:")
+              (xhtml:td "R (>= 3.1.0)"))
+             (xhtml:tr
+              (xhtml:td "SystemRequirements:")
+              (xhtml:td "cairo (>= 1.2 http://www.cairographics.org/)"))
+             (xhtml:tr
+              (xhtml:td "Imports:")
+              (xhtml:td
+               (xhtml:a (@ (href "../scales/index.html"))
+                        "scales")
+               " (>= 0.2.3), "
+               (xhtml:a (@ (href "../proto/index.html"))
+                        "proto")
+               ", "
+               (xhtml:a (@ (href "../Rcpp/index.html")) "Rcpp")
+               " (>= 0.11.0)"))
+             (xhtml:tr
+              (xhtml:td "Suggests:")
+              (xhtml:td
+               (xhtml:a (@ (href "../some/index.html"))
+                        "some")
+               ", "
+               (xhtml:a (@ (href "../suggestions/index.html"))
+                        "suggestions")))
+             (xhtml:tr
+              (xhtml:td "License:")
+              (xhtml:td
+               (xhtml:a (@ (href "../../licenses/MIT")) "MIT")))
+             (xhtml:tr
+              (xhtml:td "URL:")
+              (xhtml:td
+               (xhtml:a (@ (href "http://gnu.org/s/my-example-sxml"))
+                        "http://gnu.org/s/my-example-sxml")
+               ", "
+               (xhtml:a (@ (href "http://alternative/home/page"))
+                        "http://alternative/home/page"))))
+            (xhtml:h4 "Downloads:")
+            (xhtml:table
+             (@ (summary "Package my-example-sxml downloads"))
+             (xhtml:tr
+              (xhtml:td " Reference manual: ")
+              (xhtml:td
+               (xhtml:a (@ (href "my-example-sxml.pdf"))
+                        " my-example-sxml.pdf ")))
+             (xhtml:tr
+              (xhtml:td " Package source: ")
+              (xhtml:td
+               (xhtml:a
+                (@ (href "../../../src/contrib/my-example-sxml_1.2.3.tar.gz"))
+                " my-example-sxml_1.2.3.tar.gz "))))
+            (xhtml:h4 "Reverse dependencies:")
+            (xhtml:table
+             (@ (summary "Package my-example-sxml reverse dependencies"))
+             (xhtml:tr
+              (xhtml:td "Reverse depends:")
+              (xhtml:td "Too many."))
+             (xhtml:tr
+              (xhtml:td "Reverse imports:")
+              (xhtml:td "Likewise."))
+             (xhtml:tr
+              (xhtml:td "Reverse suggests:")
+              (xhtml:td "Uncountable.")))))))
+
+(define simple-table
+  '(xhtml:table
+    (xhtml:tr
+     (xhtml:td "Numbers")
+     (xhtml:td "123"))
+    (xhtml:tr
+     (@ (class "whatever"))
+     (xhtml:td (@ (class "unimportant")) "Letters")
+     (xhtml:td "abc"))
+    (xhtml:tr
+     (xhtml:td "Letters")
+     (xhtml:td "xyz"))
+    (xhtml:tr
+     (xhtml:td "Single"))
+    (xhtml:tr
+     (xhtml:td "not a value")
+     (xhtml:td "not a label")
+     (xhtml:td "also not a label"))))
+
+(test-begin "cran")
+
+(test-equal "table-datum: return list of first table cell matching label"
+  '((xhtml:td "abc"))
+  ((@@ (guix import cran) table-datum) simple-table "Letters"))
+
+(test-equal "table-datum: return empty list if no match"
+  '()
+  ((@@ (guix import cran) table-datum) simple-table "Astronauts"))
+
+(test-equal "table-datum: only consider the first cell as a label cell"
+  '()
+  ((@@ (guix import cran) table-datum) simple-table "not a label"))
+
+
+(test-assert "cran-sxml->sexp"
+  ;; Replace network resources with sample data.
+  (mock ((guix build download) url-fetch
+         (lambda* (url file-name #:key (mirrors '()))
+           (with-output-to-file file-name
+             (lambda ()
+               (display
+                (match url
+                  ("mirror://cran/src/contrib/my-example-sxml_1.2.3.tar.gz"
+                   "source")
+                  (_ (error "Unexpected URL: " url))))))))
+    (match ((@@ (guix import cran) cran-sxml->sexp) sxml)
+      (('package
+         ('name "r-my-example-sxml")
+         ('version "1.2.3")
+         ('source ('origin
+                    ('method 'url-fetch)
+                    ('uri ('string-append "mirror://cran/src/contrib/my-example-sxml_"
+                                          'version ".tar.gz"))
+                    ('sha256
+                     ('base32
+                      (? string? hash)))))
+         ('build-system 'r-build-system)
+         ('inputs
+          ('quasiquote
+           (("cairo" ('unquote 'cairo)))))
+         ('propagated-inputs
+          ('quasiquote
+           (("r-proto" ('unquote 'r-proto))
+            ("r-rcpp" ('unquote 'r-rcpp))
+            ("r-scales" ('unquote 'r-scales)))))
+         ('home-page "http://gnu.org/s/my-example-sxml")
+         ('synopsis "Short description")
+         ('description "Long description")
+         ('license 'x11)))
+      (x
+       (begin
+         (format #t "~s\n" x)
+         (pk 'fail x #f))))))
+
+(test-end "cran")
+
+
+(exit (= (test-runner-fail-count (test-runner-current)) 0))
diff --git a/tests/derivations.scm b/tests/derivations.scm
index d2a090c8bc..21a832fabe 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -199,7 +199,7 @@
   (and (substitutable-derivation? (derivation %store "foo" %bash '()))
        (substitutable-derivation?             ;see <http://bugs.gnu.org/18747>
         (derivation %store "foo" %bash '()
-                    #:local-build? #f))
+                    #:local-build? #t))
        (not (substitutable-derivation?
              (derivation %store "foo" %bash '()
                          #:substitutable? #f)))))
@@ -663,7 +663,7 @@
       (with-derivation-narinfo drv
         (let-values (((build download)
                       (derivation-prerequisites-to-build store drv)))
-          ;; #:local-build? is not be synonymous with #:substitutable?, so we
+          ;; #:local-build? is *not* synonymous with #:substitutable?, so we
           ;; must be able to substitute DRV's output.
           ;; See <http://bugs.gnu.org/18747>.
           (and (null? build)
diff --git a/tests/gem.scm b/tests/gem.scm
new file mode 100644
index 0000000000..9efbda31fe
--- /dev/null
+++ b/tests/gem.scm
@@ -0,0 +1,82 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 David Thompson <davet@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (test-gem)
+  #:use-module (guix import gem)
+  #:use-module (guix base32)
+  #:use-module (guix hash)
+  #:use-module (guix tests)
+  #:use-module ((guix build utils) #:select (delete-file-recursively))
+  #:use-module (srfi srfi-64)
+  #:use-module (ice-9 match))
+
+(define test-json
+  "{
+  \"name\": \"foo\",
+  \"version\": \"1.0.0\",
+  \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\",
+  \"info\": \"A cool gem\",
+  \"homepage_uri\": \"https://example.com\",
+  \"dependencies\": {
+    \"runtime\": [
+      { \"name\": \"bundler\" },
+      { \"name\": \"bar\" }
+    ]
+  },
+  \"licenses\": [\"MIT\", \"Apache 2.0\"]
+}")
+
+(test-begin "gem")
+
+(test-assert "gem->guix-package"
+  ;; Replace network resources with sample data.
+  (mock ((guix import utils) url-fetch
+         (lambda (url file-name)
+           (match url
+             ("https://rubygems.org/api/v1/gems/foo.json"
+              (with-output-to-file file-name
+                (lambda ()
+                  (display test-json))))
+             (_ (error "Unexpected URL: " url)))))
+    (match (gem->guix-package "foo")
+      (('package
+         ('name "ruby-foo")
+         ('version "1.0.0")
+         ('source ('origin
+                    ('method 'url-fetch)
+                    ('uri ('rubygems-uri "foo" 'version))
+                    ('sha256
+                     ('base32
+                      "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+         ('build-system 'ruby-build-system)
+         ('propagated-inputs
+          ('quasiquote
+           (("bundler" ('unquote 'bundler))
+            ("ruby-bar" ('unquote 'ruby-bar)))))
+         ('synopsis "A cool gem")
+         ('description "A cool gem")
+         ('home-page "https://example.com")
+         ('license ('list 'expat 'asl2.0)))
+       #t)
+      (x
+       (pk 'fail x #f)))))
+
+(test-end "gem")
+
+
+(exit (= (test-runner-fail-count (test-runner-current)) 0))
diff --git a/tests/guix-graph.sh b/tests/guix-graph.sh
index 199258a9b8..e0cbebb753 100644
--- a/tests/guix-graph.sh
+++ b/tests/guix-graph.sh
@@ -32,3 +32,8 @@ done
 
 guix build guile-bootstrap
 guix graph -t references guile-bootstrap | grep guile-bootstrap
+
+guix graph -e '(@ (gnu packages bootstrap) %bootstrap-guile)' \
+    | grep guile-bootstrap
+
+if guix graph -e +; then false; else true; fi
diff --git a/tests/lint.scm b/tests/lint.scm
index 5d56420966..ac47dbb768 100644
--- a/tests/lint.scm
+++ b/tests/lint.scm
@@ -329,6 +329,12 @@ requests."
         (check-derivation pkg)))
     "failed to create derivation")))
 
+(test-assert "license: invalid license"
+  (string-contains
+   (with-warnings
+     (check-license (dummy-package "x" (license #f))))
+   "invalid license"))
+
 (test-assert "home-page: wrong home-page"
   (->bool
    (string-contains
diff --git a/tests/monads.scm b/tests/monads.scm
index d3ef065f24..62a07a2bc6 100644
--- a/tests/monads.scm
+++ b/tests/monads.scm
@@ -95,10 +95,12 @@
 
 (test-assert "lift"
   (every (lambda (monad run)
-           (let ((f (lift1 1+ monad)))
+           (let ((f (lift1 1+ monad))
+                 (g (apply lift1 1+ (list monad))))
              (with-monad monad
                (let ((number (random 777)))
                  (= (run (>>= (return number) f))
+                    (run (>>= (return number) g))
                     (1+ number))))))
          %monads
          %monad-run))
diff --git a/tests/packages.scm b/tests/packages.scm
index 3cb532df1a..00a0998b4c 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -207,6 +207,23 @@
            (member i s)
            (member u s)))))
 
+(test-assert "transitive-input-references"
+  (let* ((a (dummy-package "a"))
+         (b (dummy-package "b"))
+         (c (dummy-package "c"
+              (inputs `(("a" ,a)))
+              (propagated-inputs `(("boo" ,b)))))
+         (d (dummy-package "d"
+              (inputs `(("c*" ,c)))))
+         (keys (map (match-lambda
+                      (('assoc-ref 'l key)
+                       key))
+                    (pk 'refs (transitive-input-references
+                               'l (package-inputs d))))))
+    (and (= (length keys) 2)
+         (member "c*" keys)
+         (member "boo" keys))))
+
 (test-equal "package-transitive-supported-systems, implicit inputs"
   %supported-systems