Browse Source

Merge branch 'master' into core-updates

gn-latest-20200428
Ludovic Courtès 2 years ago
parent
commit
11da634a6e
No known key found for this signature in database GPG Key ID: 90B11993D9AEBB5
  1. 1
      .dir-locals.el
  2. 31
      .gitignore
  3. 5
      .guix-channel
  4. 12
      Makefile.am
  5. 12
      bootstrap
  6. 821
      doc/guix-cookbook.texi
  7. 180
      doc/guix.texi
  8. 9
      doc/local.mk
  9. 30
      etc/news.scm
  10. 6
      gnu/installer/newt/partition.scm
  11. 4
      gnu/local.mk
  12. 64
      gnu/packages/admin.scm
  13. 58
      gnu/packages/android.scm
  14. 2
      gnu/packages/audio.scm
  15. 39
      gnu/packages/aux-files/linux-libre/4.19-arm.conf
  16. 43
      gnu/packages/aux-files/linux-libre/4.19-arm64.conf
  17. 35
      gnu/packages/aux-files/linux-libre/4.19-i686.conf
  18. 35
      gnu/packages/aux-files/linux-libre/4.19-x86_64.conf
  19. 32
      gnu/packages/aux-files/linux-libre/5.2-arm.conf
  20. 42
      gnu/packages/aux-files/linux-libre/5.2-arm64.conf
  21. 28
      gnu/packages/aux-files/linux-libre/5.2-i686.conf
  22. 28
      gnu/packages/aux-files/linux-libre/5.2-x86_64.conf
  23. 6
      gnu/packages/ci.scm
  24. 638
      gnu/packages/crates-io.scm
  25. 6
      gnu/packages/datamash.scm
  26. 279
      gnu/packages/diffoscope.scm
  27. 8
      gnu/packages/dns.scm
  28. 27
      gnu/packages/elixir.scm
  29. 572
      gnu/packages/emacs-xyz.scm
  30. 4
      gnu/packages/enchant.scm
  31. 217
      gnu/packages/engineering.scm
  32. 4
      gnu/packages/enlightenment.scm
  33. 6
      gnu/packages/gdb.scm
  34. 4
      gnu/packages/gnome.scm
  35. 47
      gnu/packages/graphics.scm
  36. 76
      gnu/packages/guile-xyz.scm
  37. 2
      gnu/packages/haskell-xyz.scm
  38. 4
      gnu/packages/javascript.scm
  39. 189
      gnu/packages/jupyter.scm
  40. 4
      gnu/packages/libevent.scm
  41. 12
      gnu/packages/linux.scm
  42. 434
      gnu/packages/lisp.scm
  43. 19
      gnu/packages/llvm.scm
  44. 10
      gnu/packages/mail.scm
  45. 7
      gnu/packages/maths.scm
  46. 6
      gnu/packages/messaging.scm
  47. 4
      gnu/packages/mpd.scm
  48. 1
      gnu/packages/node.scm
  49. 187
      gnu/packages/package-management.scm
  50. 4
      gnu/packages/parallel.scm
  51. 24
      gnu/packages/patches/emacs-unpackaged-req.patch
  52. 19
      gnu/packages/patches/enjarify-setup-py.patch
  53. 4
      gnu/packages/patches/python-slugify-depend-on-unidecode.patch
  54. 6
      gnu/packages/perl.scm
  55. 6
      gnu/packages/python-crypto.scm
  56. 19
      gnu/packages/python-web.scm
  57. 139
      gnu/packages/python-xyz.scm
  58. 174
      gnu/packages/qt.scm
  59. 4
      gnu/packages/samba.scm
  60. 4
      gnu/packages/scheme.scm
  61. 33
      gnu/packages/serialization.scm
  62. 237
      gnu/packages/speech.scm
  63. 2
      gnu/packages/sphinx.scm
  64. 2
      gnu/packages/statistics.scm
  65. 4
      gnu/packages/sync.scm
  66. 2
      gnu/packages/syncthing.scm
  67. 2
      gnu/packages/telephony.scm
  68. 9
      gnu/packages/terminals.scm
  69. 451
      gnu/packages/tex.scm
  70. 2
      gnu/packages/text-editors.scm
  71. 4
      gnu/packages/tor.scm
  72. 2
      gnu/packages/usb-modeswitch.scm
  73. 9
      gnu/packages/video.scm
  74. 43
      gnu/packages/web-browsers.scm
  75. 40
      gnu/packages/web.scm
  76. 34
      gnu/packages/xdisorg.scm
  77. 2
      gnu/packages/xml.scm
  78. 120
      gnu/services/cuirass.scm
  79. 4
      gnu/services/mail.scm
  80. 82
      gnu/services/networking.scm
  81. 2
      gnu/services/virtualization.scm
  82. 23
      gnu/services/xorg.scm
  83. 12
      gnu/system/linux-container.scm
  84. 7
      gnu/tests.scm
  85. 2
      guix/build/ruby-build-system.scm
  86. 145
      guix/channels.scm
  87. 26
      guix/gexp.scm
  88. 58
      guix/git.scm
  89. 6
      guix/import/github.scm
  90. 3
      guix/import/pypi.scm
  91. 2
      guix/import/stackage.scm
  92. 33
      guix/inferior.scm
  93. 2
      guix/lint.scm
  94. 6
      guix/repl.scm
  95. 2
      guix/scripts/container/exec.scm
  96. 47
      guix/scripts/deploy.scm
  97. 9
      guix/scripts/package.scm
  98. 242
      guix/scripts/pull.scm
  99. 11
      guix/scripts/search.scm
  100. 76
      guix/scripts/show.scm

1
.dir-locals.el

@ -90,6 +90,7 @@
(eval . (put 'eventually 'scheme-indent-function 1))
(eval . (put 'call-with-progress-reporter 'scheme-indent-function 1))
(eval . (put 'with-temporary-git-repository 'scheme-indent-function 2))
;; This notably allows '(' in Paredit to not insert a space when the
;; preceding symbol is one of these.

31
.gitignore

@ -29,22 +29,23 @@
/doc/*.1
/doc/.dirstamp
/doc/contributing.*.texi
/doc/guix.*.aux
/doc/guix.*.cp
/doc/guix.*.cps
/doc/guix.*.fn
/doc/guix.*.fns
/doc/guix.*.html
/doc/guix.*.info
/doc/guix.*.info-[0-9]
/doc/guix.*.ky
/doc/guix.*.pg
/doc/guix.*.toc
/doc/guix.*.t2p
/doc/guix.*.tp
/doc/guix.*.vr
/doc/guix.*.vrs
/doc/guix*.aux
/doc/guix*.cp
/doc/guix*.cps
/doc/guix*.fn
/doc/guix*.fns
/doc/guix*.html
/doc/guix*.info
/doc/guix*.info-[0-9]
/doc/guix*.ky
/doc/guix*.pg
/doc/guix*.toc
/doc/guix*.t2p
/doc/guix*.tp
/doc/guix*.vr
/doc/guix*.vrs
/doc/guix.*.texi
/doc/guix-cookbook.*.texi
/doc/guix.aux
/doc/guix.cp
/doc/guix.cps

5
.guix-channel

@ -0,0 +1,5 @@
;; This is a Guix channel.
(channel
(version 0)
(news-file "etc/news.scm"))

12
Makefile.am

@ -241,6 +241,7 @@ MODULES = \
guix/scripts/remove.scm \
guix/scripts/upgrade.scm \
guix/scripts/search.scm \
guix/scripts/show.scm \
guix/scripts/gc.scm \
guix/scripts/hash.scm \
guix/scripts/pack.scm \
@ -306,7 +307,10 @@ STORE_MODULES = \
MODULES += $(STORE_MODULES)
# Internal modules with test suite support.
dist_noinst_DATA = guix/tests.scm guix/tests/http.scm
dist_noinst_DATA = \
guix/tests.scm \
guix/tests/http.scm \
guix/tests/git.scm
# Auxiliary files for packages.
AUX_FILES = \
@ -390,6 +394,7 @@ SCM_TESTS = \
tests/file-systems.scm \
tests/gem.scm \
tests/gexp.scm \
tests/git.scm \
tests/glob.scm \
tests/gnu-maintenance.scm \
tests/grafts.scm \
@ -528,8 +533,10 @@ EXTRA_DIST += \
TODO \
CODE-OF-CONDUCT \
.dir-locals.el \
.guix-channel \
scripts/guix.in \
etc/guix-install.sh \
etc/news.scm \
build-aux/build-self.scm \
build-aux/compile-all.scm \
build-aux/hydra/evaluate.scm \
@ -814,7 +821,8 @@ assert-no-store-file-names:
$(AM_V_at)if grep -r --exclude=*.texi --exclude=*.info \
--exclude=*.info-[0-9] --exclude=*.dot \
--exclude=*.eps --exclude-dir=bootstrap \
--exclude=guix-manual.pot --exclude=guix-manual.*.po \
--exclude=guix-manual.pot --exclude=guix-manual.*.po \
--exclude=guix-cookbook.pot --exclude=guix-cookbook.*.po \
--exclude=guix-prettify.el \
--exclude=ChangeLog* \
--exclude=binutils-boot-2.20*.patch \

12
bootstrap

@ -4,7 +4,7 @@
set -e -x
# Generate stubs for translations.
langs=`find po/doc -type f -name '*.po' \
langs=`find po/doc -type f -name 'guix-manual*.po' \
| sed -e 's,guix-manual\.,,' \
| xargs -n 1 -I{} basename {} .po`
for lang in ${langs}; do
@ -15,5 +15,15 @@ for lang in ${langs}; do
touch "po/doc/guix-manual.${lang}.po"
fi
done
langs=`find po/doc -type f -name 'guix-cookbook*.po' \
| sed -e 's,guix-manual\.,,' \
| xargs -n 1 -I{} basename {} .po`
for lang in ${langs}; do
if [ ! -e "doc/guix-cookbook.${lang}.texi" ]; then
echo "@setfilename guix-cookbook.${lang}.info" > "doc/guix-cookbook.${lang}.texi"
# Ensure .po file is newer.
touch "po/doc/guix-cookbook.${lang}.po"
fi
done
exec autoreconf -vfi

821
doc/guix-cookbook.texi

@ -0,0 +1,821 @@
\input texinfo
@c -*-texinfo-*-
@c %**start of header
@setfilename guix-cookbook.info
@documentencoding UTF-8
@settitle GNU Guix Cookbook
@c %**end of header
@copying
Copyright @copyright{} 2019 Ricardo Wurmus@*
Copyright @copyright{} 2019 Efraim Flashner@*
Copyright @copyright{} 2019 Pierre Neidhardt@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled ``GNU Free
Documentation License''.
@end copying
@dircategory System administration
@direntry
* Guix cookbook: (guix-cookbook). Tutorials and examples for GNU Guix.
@end direntry
@titlepage
@title GNU Guix Cookbook
@subtitle Tutorials and examples for using the GNU Guix Functional Package Manager
@author The GNU Guix Developers
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@contents
@c *********************************************************************
@node Top
@top GNU Guix Cookbook
This document presents tutorials and detailed examples for GNU@tie{}Guix, a
functional package management tool written for the GNU system. Please
@pxref{Top,,, guix, GNU Guix reference manual} for details about the system,
its API, and related concepts.
@c TRANSLATORS: You can replace the following paragraph with information on
@c how to join your own translation team and how to report issues with the
@c translation.
If you would like to translate this document in your native language, consider
joining the @uref{https://translationproject.org/domain/guix-cookbook.html,
Translation Project}.
@menu
* Scheme tutorials:: Meet your new favorite language!
* Packaging:: Packaging tutorials
* System Configuration:: Customizing the GNU System
* Acknowledgments:: Thanks!
* GNU Free Documentation License:: The license of this document.
* Concept Index:: Concepts.
@detailmenu
--- The Detailed Node Listing ---
Scheme tutorials
* A Scheme Crash Course:: Learn the basics of Scheme
Packaging
* Packaging Tutorial:: Let's add a package to Guix!
System Configuration
* Customizing the Kernel:: Creating and using a custom Linux kernel
@end detailmenu
@end menu
@c *********************************************************************
@node Scheme tutorials
@chapter Scheme tutorials
GNU@tie{}Guix is written in the general purpose programming language Scheme,
and many of its features can be accessed and manipulated programmatically.
You can use Scheme to generate package definitions, to modify them, to build
them, to deploy whole operating systems, etc.
Knowing the basics of how to program in Scheme will unlock many of the
advanced features Guix provides --- and you don't even need to be an
experienced programmer to use them!
Let's get started!
@node A Scheme Crash Course
@section A Scheme Crash Course
@cindex Scheme, crash course
Guix uses the Guile implementation of Scheme. To start playing with the
language, install it with @code{guix install guile} and start a
@uref{https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop,
REPL} by running @code{guile} from the command line.
Alternatively you can also run @code{guix environment --ad-hoc guile -- guile}
if you'd rather not have Guile installed in your user profile.
In the following examples we use the @code{>} symbol to denote the REPL
prompt, that is, the line reserved for user input. @xref{Using Guile
Interactively,,, guile, GNU Guile Reference Manual}) for more details on the
REPL.
@itemize
@item
Scheme syntax boils down to a tree of expressions (or @emph{s-expression} in
Lisp lingo). An expression can be a literal such as numbers and strings, or a
compound which is a parenthesized list of compounds and literals. @code{#t}
and @code{#f} stand for the booleans "true" and "false", respectively.
Examples of valid expressions:
@example scheme
> "Hello World!"
"Hello World!"
> 17
17
> (display (string-append "Hello " "Guix" "\n"))
"Hello Guix!"
@end example
@item
This last example is a function call nested in another function call. When a
parenthesized expression is evaluated, the first term is the function and the
rest are the arguments passed to the function. Every function returns the
last evaluated expression as its return value.
@item
Anonymous functions are declared with the @code{lambda} term:
@example scheme
> (lambda (x) (* x x))
#<procedure 120e348 at <unknown port>:24:0 (x)>
@end example
The above procedure returns the square of its argument. Since everything is
an expression, the @code{lambda} expression returns an anonymous procedure,
which can in turn be applied to an argument:
@example scheme
> ((lambda (x) (* x x)) 3)
9
@end example
@item
Anything can be assigned a global name with @code{define}:
@example scheme
> (define a 3)
> (define square (lambda (x) (* x x)))
> (square a)
9
@end example
@item
Procedures can be defined more concisely with the following syntax:
@example scheme
(define (square x) (* x x))
@end example
@item
A list structure can be created with the @code{list} procedure:
@example scheme
> (list 2 a 5 7)
(2 3 5 7)
@end example
@item
The @emph{quote} disables evaluation of a parenthesized expression: the first
term is not called over the other terms. Thus it effectively returns a list
of terms.
@example scheme
> '(display (string-append "Hello " "Guix" "\n"))
(display (string-append "Hello " "Guix" "\n"))
> '(2 a 5 7)
(2 a 5 7)
@end example
@item
The @emph{quasiquote} disables evaluation of a parenthesized expression until
a comma re-enables it. Thus it provides us with fine-grained control over
what is evaluated and what is not.
@example scheme
> `(2 a 5 7 (2 ,a 5 ,(+ a 4)))
(2 a 5 7 (2 3 5 7))
@end example
Note that the above result is a list of mixed elements: numbers, symbols (here
@code{a}) and the last element is a list itself.
@item
Multiple variables can be named locally with @code{let}:
@example scheme
> (define x 10)
> (let ((x 2)
(y 3))
(list x y))
(2 3)
> x
10
> y
ERROR: In procedure module-lookup: Unbound variable: y
@end example
Use @code{let*} to allow later variable declarations to refer to earlier
definitions.
@example scheme
> (let* ((x 2)
(y (* x 3)))
(list x y))
(2 6)
@end example
@item
The keyword syntax is @code{#:}; it is used to create unique identifiers.
@pxref{Keywords,,, guile, GNU Guile Reference Manual}.
@item
The percentage @code{%} is typically used for read-only global variables in
the build stage. Note that it is merely a convention, like @code{_} in C.
Scheme treats @code{%} exactly the same as any other letter.
@item
Modules are created with @code{define-module}. For instance
@example scheme
(define-module (guix build-system ruby)
#:use-module (guix store)
#:export (ruby-build
ruby-build-system))
@end example
defines the module @code{guix build-system ruby} which must be located in
@file{guix/build-system/ruby.scm} somewhere in the Guile load path. It
depends on the @code{(guix store)} module and it exports two variables,
@code{ruby-build} and @code{ruby-build-system}.
@end itemize
For a more detailed introduction, check out
@uref{http://www.troubleshooters.com/codecorn/scheme_guile/hello.htm, Scheme
at a Glance}, by Steve Litt.
One of the reference Scheme books is the seminal ``Structure and
Interpretation of Computer Programs'', by Harold Abelson and Gerald Jay
Sussman, with Julie Sussman. You'll find a
@uref{https://mitpress.mit.edu/sites/default/files/sicp/index.html, free copy
online}, together with
@uref{https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/,
videos of the lectures by the authors}. The book is available in Texinfo
format as the @code{sicp} Guix package. Go ahead, run @code{guix install
sicp} and start reading with @code{info sicp} (or with the Emacs Info reader).
An @uref{https://sarabander.github.io/sicp/, unofficial ebook is also
available}.
You'll find more books, tutorials and other resources at
@url{https://schemers.org/}.
@c *********************************************************************
@node Packaging
@chapter Packaging
@cindex packaging
This chapter is dedicated to teaching you how to add packages to the
collection of packages that come with GNU Guix. This involves writing package
definitions in Guile Scheme, organizing them in package modules, and building
them.
@menu
* Packaging Tutorial:: A tutorial on how to add packages to Guix.
@end menu
@node Packaging Tutorial
@section Packaging Tutorial
GNU Guix stands out as the @emph{hackable} package manager, mostly because it
uses @uref{https://www.gnu.org/software/guile/, GNU Guile}, a powerful
high-level programming language, one of the
@uref{https://en.wikipedia.org/wiki/Scheme_%28programming_language%29, Scheme}
dialects from the
@uref{https://en.wikipedia.org/wiki/Lisp_%28programming_language%29, Lisp family}.
Package definitions are also written in Scheme, which empowers Guix in some
very unique ways, unlike most other package managers that use shell scripts or
simple languages.
@itemize
@item
Use functions, structures, macros and all of Scheme expressiveness for your
package definitions.
@item
Inheritance makes it easy to customize a package by inheriting from it and
modifying only what is needed.
@item
Batch processing: the whole package collection can be parsed, filtered and
processed. Building a headless server with all graphical interfaces stripped
out? It's possible. Want to rebuild everything from source using specific
compiler optimization flags? Pass the @code{#:make-flags "..."} argument to
the list of packages. It wouldn't be a stretch to think
@uref{https://wiki.gentoo.org/wiki/USE_flag, Gentoo USE flags} here, but this
goes even further: the changes don't have to be thought out beforehand by the
packager, they can be @emph{programmed} by the user!
@end itemize
The following tutorial covers all the basics around package creation with Guix.
It does not assume much knowledge of the Guix system nor of the Lisp language.
The reader is only expected to be familiar with the command line and to have some
basic programming knowledge.
@subsection A "Hello World" package
The “Defining Packages” section of the manual introduces the basics of Guix
packaging (@pxref{Defining Packages,,, guix, GNU Guix Reference Manual}). In
the following section, we will partly go over those basics again.
``GNU hello'' is a dummy project that serves as an idiomatic example for
packaging. It uses the GNU build system (@code{./configure && make && make
install}). Guix already provides a package definition which is a perfect
example to start with. You can look up its declaration with @code{guix edit
hello} from the command line. Let's see how it looks:
@example scheme
(define-public hello
(package
(name "hello")
(version "2.10")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/hello/hello-" version
".tar.gz"))
(sha256
(base32
"0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
(build-system gnu-build-system)
(synopsis "Hello, GNU world: An example GNU package")
(description
"GNU Hello prints the message \"Hello, world!\" and then exits. It
serves as an example of standard GNU coding practices. As such, it supports
command-line arguments, multiple languages, and so on.")
(home-page "https://www.gnu.org/software/hello/")
(license gpl3+)))
@end example
As you can see, most of it is rather straightforward. But let's review the
fields together:
@table @samp
@item name
The project name. Using Scheme conventions, we prefer to keep it
lower case, without underscore and using dash-separated words.
@item source
This field contains a description of the source code origin. The
@code{origin} record contains these fields:
@enumerate
@item The method, here @code{url-fetch} to download via HTTP/FTP, but other methods
exist, such as @code{git-fetch} for Git repositories.
@item The URI, which is typically some @code{https://} location for @code{url-fetch}. Here
the special `mirror://gnu` refers to a set of well known locations, all of
which can be used by Guix to fetch the source, should some of them fail.
@item The @code{sha256} checksum of the requested file. This is essential to ensure
the source is not corrupted. Note that Guix works with base32 strings,
hence the call to the @code{base32} function.
@end enumerate
@item build-system
This is where the power of abstraction provided by the Scheme language really
shines: in this case, the @code{gnu-build-system} abstracts away the famous
@code{./configure && make && make install} shell invocations. Other build
systems include the @code{trivial-build-system} which does not do anything and
requires from the packager to program all the build steps, the
@code{python-build-system}, the @code{emacs-build-system}, and many more
(@pxref{Build Systems,,, guix, GNU Guix Reference Manual}).
@item synopsis
It should be a concise summary of what the package does. For many packages a
tagline from the project's home page can be used as the synopsis.
@item description
Same as for the synopsis, it's fine to re-use the project description from the
homepage. Note that Guix uses Texinfo syntax.
@item home-page
Use HTTPS if available.
@item license
See @code{guix/licenses.scm} in the project source for a full list of
available licenses.
@end table
Time to build our first package! Nothing fancy here for now: we will stick to a
dummy "my-hello", a copy of the above declaration.
As with the ritualistic "Hello World" taught with most programming languages,
this will possibly be the most "manual" approach. We will work out an ideal
setup later; for now we will go the simplest route.
Save the following to a file @file{my-hello.scm}.
@example scheme
(use-modules (guix packages)
(guix download)
(guix build-system gnu)
(guix licenses))
(package
(name "my-hello")
(version "2.10")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/hello/hello-" version
".tar.gz"))
(sha256
(base32
"0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
(build-system gnu-build-system)
(synopsis "Hello, Guix world: An example custom Guix package")
(description
"GNU Hello prints the message \"Hello, world!\" and then exits. It
serves as an example of standard GNU coding practices. As such, it supports
command-line arguments, multiple languages, and so on.")
(home-page "https://www.gnu.org/software/hello/")
(license gpl3+))
@end example
We will explain the extra code in a moment.
Feel free to play with the different values of the various fields. If you
change the source, you'll need to update the checksum. Indeed, Guix refuses to
build anything if the given checksum does not match the computed checksum of the
source code. To obtain the correct checksum of the package declaration, we
need to download the source, compute the sha256 checksum and convert it to
base32.
Thankfully, Guix can automate this task for us; all we need is to provide the
URI:
@c TRANSLATORS: This is example shell output.
@example sh
$ guix download mirror://gnu/hello/hello-2.10.tar.gz
Starting download of /tmp/guix-file.JLYgL7
From https://ftpmirror.gnu.org/gnu/hello/hello-2.10.tar.gz...
following redirection to `https://mirror.ibcp.fr/pub/gnu/hello/hello-2.10.tar.gz'...
…10.tar.gz 709KiB 2.5MiB/s 00:00 [##################] 100.0%
/gnu/store/hbdalsf5lpf01x4dcknwx6xbn6n5km6k-hello-2.10.tar.gz
0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i
@end example
In this specific case the output tells us which mirror was chosen.
If the result of the above command is not the same as in the above snippet,
update your @code{my-hello} declaration accordingly.
Note that GNU package tarballs come with an OpenPGP signature, so you
should definitely check the signature of this tarball with `gpg` to
authenticate it before going further:
@c TRANSLATORS: This is example shell output.
@example sh
$ guix download mirror://gnu/hello/hello-2.10.tar.gz.sig
Starting download of /tmp/guix-file.03tFfb
From https://ftpmirror.gnu.org/gnu/hello/hello-2.10.tar.gz.sig...
following redirection to `https://ftp.igh.cnrs.fr/pub/gnu/hello/hello-2.10.tar.gz.sig'...
….tar.gz.sig 819B 1.2MiB/s 00:00 [##################] 100.0%
/gnu/store/rzs8wba9ka7grrmgcpfyxvs58mly0sx6-hello-2.10.tar.gz.sig
0q0v86n3y38z17rl146gdakw9xc4mcscpk8dscs412j22glrv9jf
$ gpg --verify /gnu/store/rzs8wba9ka7grrmgcpfyxvs58mly0sx6-hello-2.10.tar.gz.sig /gnu/store/hbdalsf5lpf01x4dcknwx6xbn6n5km6k-hello-2.10.tar.gz
gpg: Signature made Sun 16 Nov 2014 01:08:37 PM CET
gpg: using RSA key A9553245FDE9B739
gpg: Good signature from "Sami Kerola <kerolasa@@iki.fi>" [unknown]
gpg: aka "Sami Kerola (http://www.iki.fi/kerolasa/) <kerolasa@@iki.fi>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 8ED3 96E3 7E38 D471 A005 30D3 A955 3245 FDE9 B739
@end example
You can then happily run
@c TRANSLATORS: Do not translate this command
@example sh
$ guix package --install-from-file=my-hello.scm
@end example
You should now have @code{my-hello} in your profile!
@c TRANSLATORS: Do not translate this command
@example sh
$ guix package --list-installed=my-hello
my-hello 2.10 out
/gnu/store/f1db2mfm8syb8qvc357c53slbvf1g9m9-my-hello-2.10
@end example
We've gone as far as we could without any knowledge of Scheme. Before moving
on to more complex packages, now is the right time to brush up on your Scheme
knowledge. @pxref{A Scheme Crash Course} to get up to speed.
@c TODO: Continue the tutorial
@c *********************************************************************
@node System Configuration
@chapter System Configuration
Guix offers a flexible language for declaratively configuring your Guix
System. This flexibility can at times be overwhelming. The purpose of this
chapter is to demonstrate some advanced configuration concepts.
@pxref{System Configuration,,, guix, GNU Guix Reference Manual} for a complete
reference.
@menu
* Customizing the Kernel:: Creating and using a custom Linux kernel on Guix System.
@end menu
@node Customizing the Kernel
@section Customizing the Kernel
Guix is, at its core, a source based distribution with substitutes
(@pxref{Substitutes,,, guix, GNU Guix Reference Manual}), and as such building
packages from their source code is an expected part of regular package
installations and upgrades. Given this starting point, it makes sense that
efforts are made to reduce the amount of time spent compiling packages, and
recent changes and upgrades to the building and distribution of substitutes
continues to be a topic of discussion within Guix.
The kernel, while not requiring an overabundance of RAM to build, does take a
rather long time on an average machine. The official kernel configuration, as
is the case with many GNU/Linux distributions, errs on the side of
inclusiveness, and this is really what causes the build to take such a long
time when the kernel is built from source.
The Linux kernel, however, can also just be described as a regular old
package, and as such can be customized just like any other package. The
procedure is a little bit different, although this is primarily due to the
nature of how the package definition is written.
The @code{linux-libre} kernel package definition is actually a procedure which
creates a package.
@example scheme
(define* (make-linux-libre version hash supported-systems
#:key
;; A function that takes an arch and a variant.
;; See kernel-config for an example.
(extra-version #f)
(configuration-file #f)
(defconfig "defconfig")
(extra-options %default-extra-linux-options)
(patches (list %boot-logo-patch)))
...)
@end example
The current @code{linux-libre} package is for the 5.1.x series, and is
declared like this:
@example scheme
(define-public linux-libre
(make-linux-libre %linux-libre-version
%linux-libre-hash
'("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux")
#:patches %linux-libre-5.1-patches
#:configuration-file kernel-config))
@end example
Any keys which are not assigned values inherit their default value from the
@code{make-linux-libre} definition. When comparing the two snippets above,
you may notice that the code comment in the first doesn't actually refer to
the @code{#:extra-version} keyword; it is actually for
@code{#:configuration-file}. Because of this, it is not actually easy to
include a custom kernel configuration from the definition, but don't worry,
there are other ways to work with what we do have.
There are two ways to create a kernel with a custom kernel configuration. The
first is to provide a standard @file{.config} file during the build process by
including an actual @file{.config} file as a native input to our custom
kernel. The following is a snippet from the custom @code{'configure} phase of
the @code{make-linux-libre} package definition:
@example scheme
(let ((build (assoc-ref %standard-phases 'build))
(config (assoc-ref (or native-inputs inputs) "kconfig")))
;; Use a custom kernel configuration file or a default
;; configuration file.
(if config
(begin
(copy-file config ".config")
(chmod ".config" #o666))
(invoke "make" ,defconfig))
@end example
Below is a sample kernel package. The @code{linux-libre} package is nothing
special and can be inherited from and have its fields overridden like any
other package:
@example scheme
(define-public linux-libre/E2140
(package
(inherit linux-libre)
(native-inputs
`(("kconfig" ,(local-file "E2140.config"))
,@@(alist-delete "kconfig"
(package-native-inputs linux-libre))))))
@end example
In the same directory as the file defining @code{linux-libre-E2140} is a file
named @file{E2140.config}, which is an actual kernel configuration file. The
@code{defconfig} keyword of @code{make-linux-libre} is left blank here, so the
only kernel configuration in the package is the one which was included in the
@code{native-inputs} field.
The second way to create a custom kernel is to pass a new value to the
@code{extra-options} keyword of the @code{make-linux-libre} procedure. The
@code{extra-options} keyword works with another function defined right below
it:
@example scheme
(define %default-extra-linux-options
`(;; https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00039.html
("CONFIG_DEVPTS_MULTIPLE_INSTANCES" . #t)
;; Modules required for initrd:
("CONFIG_NET_9P" . m)
("CONFIG_NET_9P_VIRTIO" . m)
("CONFIG_VIRTIO_BLK" . m)
("CONFIG_VIRTIO_NET" . m)
("CONFIG_VIRTIO_PCI" . m)
("CONFIG_VIRTIO_BALLOON" . m)
("CONFIG_VIRTIO_MMIO" . m)
("CONFIG_FUSE_FS" . m)
("CONFIG_CIFS" . m)
("CONFIG_9P_FS" . m)))
(define (config->string options)
(string-join (map (match-lambda
((option . 'm)
(string-append option "=m"))
((option . #t)
(string-append option "=y"))
((option . #f)
(string-append option "=n")))
options)
"\n"))
@end example
And in the custom configure script from the `make-linux-libre` package:
@example scheme
;; Appending works even when the option wasn't in the
;; file. The last one prevails if duplicated.
(let ((port (open-file ".config" "a"))
(extra-configuration ,(config->string extra-options)))
(display extra-configuration port)
(close-port port))
(invoke "make" "oldconfig"))))
@end example
So by not providing a configuration-file the @file{.config} starts blank, and
then we write into it the collection of flags that we want. Here's another
custom kernel:
@example scheme
(define %macbook41-full-config
(append %macbook41-config-options
%filesystems
%efi-support
%emulation
(@@@@ (gnu packages linux) %default-extra-linux-options)))
(define-public linux-libre-macbook41
;; XXX: Access the internal 'make-linux-libre' procedure, which is
;; private and unexported, and is liable to change in the future.
((@@@@ (gnu packages linux) make-linux-libre) (@@@@ (gnu packages linux) %linux-libre-version)
(@@@@ (gnu packages linux) %linux-libre-hash)
'("x86_64-linux")
#:extra-version "macbook41"
#:patches (@@@@ (gnu packages linux) %linux-libre-5.1-patches)
#:extra-options %macbook41-config-options))
@end example
In the above example @code{%filesystems} is a collection of flags enabling
different filesystem support, @code{%efi-support} enables EFI support and
@code{%emulation} enables a x86_64-linux machine to act in 32-bit mode also.
@code{%default-extra-linux-options} are the ones quoted above, which had to be
added in since they were replaced in the @code{extra-options} keyword.
This all sounds like it should be doable, but how does one even know which
modules are required for a particular system? Two places that can be helpful
in trying to answer this question is the
@uref{https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel, Gentoo
Handbook} and the
@uref{https://www.kernel.org/doc/html/latest/admin-guide/README.html?highlight=localmodconfig,
documentation from the kernel itself}. From the kernel documentation, it
seems that @code{make localmodconfig} is the command we want.
In order to actually run @code{make localmodconfig} we first need to get and
unpack the kernel source code:
@example shell
tar xf $(guix build linux-libre --source)
@end example
Once inside the directory containing the source code run @code{touch .config}
to create an initial, empty @file{.config} to start with. @code{make
localmodconfig} works by seeing what you already have in @file{.config} and
letting you know what you're missing. If the file is blank then you're
missing everything. The next step is to run:
@example shell
guix environment linux-libre -- make localmodconfig
@end example
and note the output. Do note that the @file{.config} file is still empty.
The output generally contains two types of warnings. The first start with
"WARNING" and can actually be ignored in our case. The second read:
@example shell
module pcspkr did not have configs CONFIG_INPUT_PCSPKR
@end example
For each of these lines, copy the @code{CONFIG_XXXX_XXXX} portion into the
@file{.config} in the directory, and append @code{=m}, so in the end it looks
like this:
@example shell
CONFIG_INPUT_PCSPKR=m
CONFIG_VIRTIO=m
@end example
After copying all the configuration options, run @code{make localmodconfig}
again to make sure that you don't have any output starting with "module".
After all of these machine specific modules there are a couple more left that
are also needed. @code{CONFIG_MODULES} is necessary so that you can build and
load modules separately and not have everything built into the kernel.
@code{CONFIG_BLK_DEV_SD} is required for reading from hard drives. It is
possible that there are other modules which you will need.
This post does not aim to be a guide to configuring your own kernel however,
so if you do decide to build a custom kernel you'll have to seek out other
guides to create a kernel which is just right for your needs.
The second way to setup the kernel configuration makes more use of Guix's
features and allows you to share configuration segments between different
kernels. For example, all machines using EFI to boot have a number of EFI
configuration flags that they need. It is likely that all the kernels will
share a list of filesystems to support. By using variables it is easier to
see at a glance what features are enabled and to make sure you don't have
features in one kernel but missing in another.
Left undiscussed however, is Guix's initrd and its customization. It is
likely that you'll need to modify the initrd on a machine using a custom
kernel, since certain modules which are expected to be built may not be
available for inclusion into the initrd.
@c *********************************************************************
@node Acknowledgments
@chapter Acknowledgments
Guix is based on the @uref{https://nixos.org/nix/, Nix package manager},
which was designed and
implemented by Eelco Dolstra, with contributions from other people (see
the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
management, and promoted unprecedented features, such as transactional
package upgrades and rollbacks, per-user profiles, and referentially
transparent build processes. Without this work, Guix would not exist.
The Nix-based software distributions, Nixpkgs and NixOS, have also been
an inspiration for Guix.
GNU@tie{}Guix itself is a collective work with contributions from a
number of people. See the @file{AUTHORS} file in Guix for more
information on these fine people. The @file{THANKS} file lists people
who have helped by reporting bugs, taking care of the infrastructure,
providing artwork and themes, making suggestions, and more---thank you!
This document includes adapted sections from articles that have previously
been published on the Guix blog at @uref{https://guix.gnu.org/blog}.
@c *********************************************************************
@node GNU Free Documentation License
@appendix GNU Free Documentation License
@cindex license, GNU Free Documentation License
@include fdl-1.3.texi
@c *********************************************************************
@node Concept Index
@unnumbered Concept Index
@printindex cp
@bye
@c Local Variables:
@c ispell-local-dictionary: "american";
@c End:

180
doc/guix.texi

@ -2657,7 +2657,9 @@ For your convenience, we also provide the following aliases:
@item
@command{guix remove} is an alias for @command{guix package -r},
@item
and @command{guix upgrade} is an alias for @command{guix package -u}.
@command{guix upgrade} is an alias for @command{guix package -u},
@item
and @command{guix show} is an alias for @command{guix package --show=}.
@end itemize
These aliases are less expressive than @command{guix package} and provide
@ -2916,6 +2918,25 @@ variable, even though, taken individually, neither @file{foo} nor
@itemx -p @var{profile}
Use @var{profile} instead of the user's default profile.
@var{profile} must be the name of a file that will be created upon
completion. Concretely, @var{profile} will be a mere symbolic link
(``symlink'') pointing to the actual profile where packages are
installed:
@example
$ guix install hello -p ~/code/my-profile
@dots{}
$ ~/code/my-profile/bin/hello
Hello, world!
@end example
All it takes to get rid of the profile is to remove this symlink and its
siblings that point to specific generations:
@example
$ rm ~/code/my-profile ~/code/my-profile-*-link
@end example
@cindex collisions, in a profile
@cindex colliding packages in profiles
@cindex profile collisions
@ -3020,9 +3041,9 @@ version: 3.3.5
@end example
You may also specify the full name of a package to only get details about a
specific version of it:
specific version of it (this time using the @command{guix show} alias):
@example
$ guix package --show=python@@3.4 | recsel -p name,version
$ guix show python@@3.4 | recsel -p name,version
name: python
version: 3.4.3
@end example
@ -3673,11 +3694,20 @@ Generation 3 Jun 13 2018 23:31:07 (current)
@xref{Invoking guix describe, @command{guix describe}}, for other ways to
describe the current status of Guix.
This @code{~/.config/guix/current} profile works like any other profile
created by @command{guix package} (@pxref{Invoking guix package}). That
This @code{~/.config/guix/current} profile works exactly like the profiles
created by @command{guix package} (@pxref{Invoking guix package}). That
is, you can list generations, roll back to the previous
generation---i.e., the previous Guix---and so on:
@example
$ guix pull --roll-back
switched from generation 3 to 2
$ guix pull --delete-generations=1
deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
@end example
You can also use @command{guix package} (@pxref{Invoking guix package})
to manage the profile by naming it explicitly:
@example
$ guix package -p ~/.config/guix/current --roll-back
switched from generation 3 to 2
@ -3709,13 +3739,16 @@ Read the list of channels from @var{file} instead of
evaluates to a list of channel objects. @xref{Channels}, for more
information.
@cindex channel news
@item --news
@itemx -N
Display the list of packages added or upgraded since the previous generation.
Display the list of packages added or upgraded since the previous
generation, as well as, occasionally, news written by channel authors
for their users (@pxref{Channels, Writing Channel News}).
This is the same information as displayed upon @command{guix pull} completion,
but without ellipses; it is also similar to the output of @command{guix pull
-l} for the last generation (see below).
The package information is the same as displayed upon @command{guix
pull} completion, but without ellipses; it is also similar to the output
of @command{guix pull -l} for the last generation (see below).
@item --list-generations[=@var{pattern}]
@itemx -l [@var{pattern}]
@ -3724,6 +3757,40 @@ is provided, the subset of generations that match @var{pattern}.
The syntax of @var{pattern} is the same as with @code{guix package
--list-generations} (@pxref{Invoking guix package}).
@item --roll-back
@cindex rolling back
@cindex undoing transactions
@cindex transactions, undoing
Roll back to the previous @dfn{generation} of @file{~/.config/guix/current}---i.e.,
undo the last transaction.
@item --switch-generation=@var{pattern}
@itemx -S @var{pattern}
@cindex generations
Switch to a particular generation defined by @var{pattern}.
@var{pattern} may be either a generation number or a number prefixed
with ``+'' or ``-''. The latter means: move forward/backward by a
specified number of generations. For example, if you want to return to
the latest generation after @code{--roll-back}, use
@code{--switch-generation=+1}.
@item --delete-generations[=@var{pattern}]
@itemx -d [@var{pattern}]
When @var{pattern} is omitted, delete all generations except the current
one.
This command accepts the same patterns as @option{--list-generations}.
When @var{pattern} is specified, delete the matching generations. When
@var{pattern} specifies a duration, generations @emph{older} than the
specified duration match. For instance, @code{--delete-generations=1m}
deletes generations that are more than one month old.
If the current generation matches, it is @emph{not} deleted.
Note that deleting generations prevents rolling back to them.
Consequently, this command must be used with care.
@xref{Invoking guix describe}, for a way to display information about the
current generation only.
@ -3946,6 +4013,68 @@ add a meta-data file @file{.guix-channel} that contains:
(directory "guix"))
@end lisp
@cindex news, for channels
@subsection Writing Channel News
Channel authors may occasionally want to communicate to their users
information about important changes in the channel. You'd send them all
an email, but that's not convenient.
Instead, channels can provide a @dfn{news file}; when the channel users
run @command{guix pull}, that news file is automatically read and
@command{guix pull --news} can display the announcements that correspond
to the new commits that have been pulled, if any.
To do that, channel authors must first declare the name of the news file
in their @file{.guix-channel} file:
@lisp
(channel
(version 0)
(news-file "etc/news.txt"))
@end lisp
The news file itself, @file{etc/news.txt} in this example, must look
something like this:
@lisp
(channel-news
(version 0)
(entry (tag "the-bug-fix")
(title (en "Fixed terrible bug")
(fr "Oh la la"))
(body (en "@@emph@{Good news@}! It's fixed!")
(eo "Certe ĝi pli bone funkcias nun!")))
(entry (commit "bdcabe815cd28144a2d2b4bc3c5057b051fa9906")
(title (en "Added a great package")
(ca "Què vol dir guix?"))
(body (en "Don't miss the @@code@{hello@} package!"))))
@end lisp
The file consists of a list of @dfn{news entries}. Each entry is
associated with a commit or tag: it describes changes made in this
commit, possibly in preceding commits as well. Users see entries only
the first time they obtain the commit the entry refers to.
The @code{title} field should be a one-line summary while @code{body}
can be arbitrarily long, and both can contain Texinfo markup
(@pxref{Overview,,, texinfo, GNU Texinfo}). Both the title and body are
a list of language tag/message tuples, which allows @command{guix pull}
to display news in the language that corresponds to the user's locale.
If you want to translate news using a gettext-based workflow, you can
extract translatable strings with @command{xgettext} (@pxref{xgettext
Invocation,,, gettext, GNU Gettext Utilities}). For example, assuming
you write news entries in English first, the command below creates a PO
file containing the strings to translate:
@example
xgettext -o news.po -l scheme -ken etc/news.scm
@end example
To sum up, yes, you could use your channel as a blog. But beware, this
is @emph{not quite} what your users might expect.
@subsection Replicating Guix
@cindex pinning, channels
@ -4835,7 +4964,9 @@ specified binaries and symlinks.
@item docker
This produces a tarball that follows the
@uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
Docker Image Specification}.
Docker Image Specification}. The ``repository name'' as it appears in
the output of the @command{docker images} command is computed from
package names passed on the command line or in the manifest file.
@item squashfs
This produces a SquashFS image containing all the specified binaries and
@ -6050,7 +6181,7 @@ package, correctly capitalized.
For packages requiring shared library dependencies, you may need to write the
@file{/deps/deps.jl} file manually. It's usually a line of @code{const
variable = /gnu/store/libary.so} for each dependency, plus a void function
variable = /gnu/store/library.so} for each dependency, plus a void function
@code{check_deps() = nothing}.
Some older packages that aren't using @file{Package.toml} yet, will require
@ -13041,6 +13172,33 @@ objects}).
@end table
@end deftp
@cindex nftables
@defvr {Scheme Variable} nftables-service-type
This is the service type to set up a nftables configuration. nftables is a
netfilter project that aims to replace the existing iptables, ip6tables,
arptables and ebtables framework. It provides a new packet filtering
framework, a new user-space utility @command{nft}, and a compatibility layer
for iptables. This service comes with a default ruleset
@code{%default-nftables-ruleset} that rejecting all incomming connections
except those to the ssh port 22. To use it, simply write:
@lisp
(service nftables-service-type)
@end lisp
@end defvr
@deftp {Data Type} nftables-configuration
The data type representing the configuration of nftables.
@table @asis
@item @code{package} (default: @code{nftables})
The nftables package that provides @command{nft}.
@item @code{ruleset} (default: @code{%default-nftables-ruleset})
The nftables ruleset to use. This may be any ``file-like'' object
(@pxref{G-Expressions, file-like objects}).
@end table
@end deftp
@cindex NTP (Network Time Protocol), service
@cindex ntpd, service for the Network Time Protocol daemon
@cindex real time clock

9
doc/local.mk

@ -26,7 +26,8 @@ info_TEXINFOS = %D%/guix.texi \
%D%/guix.es.texi \
%D%/guix.fr.texi \
%D%/guix.ru.texi \
%D%/guix.zh_CN.texi
%D%/guix.zh_CN.texi \
%D%/guix-cookbook.texi
%C%_guix_TEXINFOS = \
%D%/contributing.texi \
@ -109,6 +110,12 @@ $(srcdir)/%D%/guix.%.texi: po/doc/guix-manual.%.po $(srcdir)/%D%/contributing.%.
-$(AM_V_POXREF)$(xref_command)
-mv "$@.tmp" "$@"
$(srcdir)/%D%/guix-cookbook.%.texi: po/doc/guix-cookbook.%.po
-$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "%D%/guix-cookbook.texi" -p "$<" -l "$@.tmp"
-sed -i "s|guix-cookbook\.info|$$(basename "$@" | sed 's|texi$$|info|')|" "$@.tmp"
-$(AM_V_POXREF)$(xref_command)
-mv "$@.tmp" "$@"
$(srcdir)/%D%/contributing.%.texi: po/doc/guix-manual.%.po
-$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "%D%/contributing.texi" -p "$<" -l "$@.tmp"
-$(AM_V_POXREF)$(xref_command)

30
etc/news.scm

@ -0,0 +1,30 @@
;; GNU Guix news, for use by 'guix pull'.
;;
;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
;;
;; Copying and distribution of this file, with or without modification, are
;; permitted in any medium without royalty provided the copyright notice and
;; this notice are preserved.
(channel-news
(version 0)
(entry (commit "dcc90d15581189dbc30e201db2b807273d6484f0")
(title (en "New channel news mechanism")
(de "Neuer Mechanismus, um Neuigkeiten über Kanäle anzuzeigen.")
(fr "Nouveau mécanisme d'information sur les canaux"))
(body
(en "You are reading this message through the new channel news
mechanism, congratulations! This mechanism allows channel authors to provide
@dfn{news entries} that their users can view with @command{guix pull --news}.
Run @command{info \"(guix) Invoking guix pull\"} for more info.")
(de "Sie lesen diese Meldung mit Hilfe des neuen Mechanismus, um
Neuigkeiten über Kanäle anzuzeigen Glückwunsch! Mit diesem
Mechanismus können Kanalautoren Ihren Nutzern @dfn{Einträge zu
Neuigkeiten} mitteilen, die diese sich mit @command{guix pull --news}
anzeigen lassen können. Führen Sie @command{info \"(guix.de) Aufruf
von guix pull\"} aus, um weitere Informationen zu erhalten.")
(fr "Ce message t'arrive à travers le nouveau mécanisme d'information
des canaux, bravo ! Ce mécanisme permet aux auteur·rice·s de canaux de
fournir des informations qu'on peut visualiser avec @command{guix pull
--news}. Tape @command{info \"(guix.fr) Invoquer guix pull\"} pour plus de
détails."))))

6
gnu/installer/newt/partition.scm

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
@ -159,14 +159,14 @@ USER-PARTITIONS list. Return this list with password fields filled-in."
(format #f (G_ "Please enter the password for the \
encryption of partition ~a (label: ~a).") file-name crypt-label)
(G_ "Password required")
#:input-hide-checkbox? #t)))
#:input-visibility-checkbox? #t)))
(password-confirm-page
(lambda ()
(run-input-page
(format #f (G_ "Please confirm the password for the \
encryption of partition ~a (label: ~a).") file-name crypt-label)
(G_ "Password confirmation required")
#:input-hide-checkbox? #t))))
#:input-visibility-checkbox? #t))))
(if crypt-label
(let loop ()
(let ((password (password-page))

4
gnu/local.mk

@ -143,6 +143,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/dejagnu.scm \
%D%/packages/dico.scm \
%D%/packages/dictionaries.scm \
%D%/packages/diffoscope.scm \
%D%/packages/digest.scm \
%D%/packages/direct-connect.scm \
%D%/packages/disk.scm \
@ -270,6 +271,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/jrnl.scm \
%D%/packages/jose.scm \
%D%/packages/julia.scm \
%D%/packages/jupyter.scm \
%D%/packages/kawa.scm \
%D%/packages/kde.scm \
%D%/packages/kde-frameworks.scm \
@ -789,10 +791,10 @@ dist_patch_DATA = \
%D%/packages/patches/emacs-highlight-stages-add-gexp.patch \
%D%/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \
%D%/packages/patches/emacs-source-date-epoch.patch \
%D%/packages/patches/emacs-unpackaged-req.patch \
%D%/packages/patches/emacs-undohist-ignored.patch \
%D%/packages/patches/emacs-wordnut-require-adaptive-wrap.patch \
%D%/packages/patches/emacs-zones-called-interactively.patch \
%D%/packages/patches/enjarify-setup-py.patch \
%D%/packages/patches/enlightenment-fix-setuid-path.patch \
%D%/packages/patches/erlang-man-path.patch \
%D%/packages/patches/eudev-rules-directory.patch \

64
gnu/packages/admin.scm

@ -25,6 +25,7 @@
;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2019 Brett Gilio <brettg@posteo.net>
;;; Copyright © 2019 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.lonestar.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -55,6 +56,7 @@
#:use-module (guix build-system python)
#:use-module (guix build-system trivial)
#:use-module (gnu packages)
#:use-module (gnu packages algebra)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages check)
@ -684,7 +686,7 @@ connection alive.")
(define-public isc-dhcp
(let* ((bind-major-version "9")
(bind-minor-version "11")
(bind-patch-version "10")
(bind-patch-version "11")
(bind-release-type "") ; for patch release, use "-P"
(bind-release-version "") ; for patch release, e.g. "6"
(bind-version (string-append bind-major-version
@ -825,7 +827,7 @@ connection alive.")
"/bind-" bind-version ".tar.gz"))
(sha256
(base32
"1hvhdaar9swh5087kzkbmav1nbn19rxh0m60x0d7gri0v8689fxj"))))
"0swavslyli3vcrkcm2ip11s6p58g3k7r4gjs2b899r25cqrk0lk1"))))
;; When cross-compiling, we need the cross Coreutils and sed.
;; Otherwise just use those from %FINAL-INPUTS.
@ -2751,6 +2753,64 @@ used in screenshots to show other users what operating system or distribution
you are running, what theme or icon set you are using, etc.")
(license license:expat)))
(define-public screenfetch
;; First commit supporting current Guix System.
(let ((commit "e3ec82dd464e81e4d10bef218b3016e3044c766c"))
(package
(name "screenfetch")
(version (git-version "3.8.0" "1" commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/KittyKatt/screenFetch")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"1lzs1l5xgj9mn4b59lhkfgqnyiivf8svd1iwjabzrax90rdmxfwj"))))
(build-system trivial-build-system)
(arguments
`(#:modules ((guix build utils))
#:builder
(begin
(use-modules (guix build utils))
(let ((source (assoc-ref %build-inputs "source"))
(out (assoc-ref %outputs "out")))
(mkdir-p (string-append out "/bin/"))
(copy-file (string-append source "/screenfetch-dev")
(string-append out "/bin/screenfetch"))
(install-file (string-append source "/screenfetch.1")
(string-append out "/man/man1/"))
(install-file (string-append source "/COPYING")
(string-append out "/share/doc/" ,name "-" ,version))
(substitute* (string-append out "/bin/screenfetch")
(("/usr/bin/env bash")
(string-append (assoc-ref %build-inputs "bash")
"/bin/bash")))
(wrap-program
(string-append out "/bin/screenfetch")
`("PATH" ":" prefix
(,(string-append (assoc-ref %build-inputs "bc") "/bin:"
(assoc-ref %build-inputs "scrot") "/bin:"
(assoc-ref %build-inputs "xdpyinfo") "/bin"
(assoc-ref %build-inputs "xprop") "/bin"))))
(substitute* (string-append out "/bin/screenfetch")
(("#!#f")
(string-append "#!" (assoc-ref %build-inputs "bash")
"/bin/bash")))))))
(inputs
`(("bash" ,bash)
("bc" ,bc)
("scrot" ,scrot)
("xdpyinfo" ,xdpyinfo)
("xprop" ,xprop)))
(home-page "https://github.com/KittyKatt/screenFetch")
(synopsis "System information script")
(description "Bash screenshot information tool which can be used to
generate those nifty terminal theme information and ASCII distribution logos in
everyone's screenshots nowadays.")
(license license:gpl3))))
(define-public nnn
(package
(name "nnn")

58
gnu/packages/android.scm

@ -40,6 +40,7 @@
#:use-module (gnu packages docker)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gnupg)
#:use-module (gnu packages java)
#:use-module (gnu packages linux)
#:use-module (gnu packages pcre)
#:use-module (gnu packages python)
@ -936,3 +937,60 @@ these same tools to create your own additional or alternative repository for
publishing, or to assist in creating, testing and submitting metadata to the
main repository.")
(license license:agpl3+)))
(define-public enjarify
(package
(name "enjarify")
(version "1.0.3")
(home-page "https://github.com/Storyyeller/enjarify")
(source
(origin
(method git-fetch)
(uri (git-reference
(url home-page)
(commit version)))
(file-name (git-file-name name version))
(patches
(search-patches "enjarify-setup-py.patch"))
(sha256
(base32
"1nam7h1g4f1h6jla4qcjjagnyvd24dv6d5445w04q8hx07nxdapk"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'enjarify-wrapper-inherit-pythonpath
;; enjarify sets PYTHONPATH from a shell script, overwriting
;; PYTHONPATH set from guix. Comment out this line.
(lambda _
(substitute* "enjarify.sh"
(("export PYTHONPATH") "# export PYTHONPATH"))
#t))
(add-before 'check 'fixup-expected-test-results
;; Upstream adjusted this test in commit:
;; 3ae884a6485af82d300515813f537685b08dd800
(lambda _
(substitute* "tests/test2/expected.txt"
(("^20") "0"))
#t))
(add-before 'check 'drop-java-xss-argument
;; Upstream removed this argument in order to support 32-bit
;; architectures. commit: 4be0111d879aa95fdc0d9f24fe529f8c664d4093
(lambda _
(substitute* "enjarify/runtests.py"
(("java -Xss515m") "java "))
#t))
(add-after 'install 'install-enjarify-wrapper
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out")))
(mkdir-p (string-append out "/bin/"))
(copy-file "enjarify.sh" (string-append out "/bin/enjarify"))
#t))))))
(native-inputs `(("openjdk" ,openjdk12)))
(synopsis "Translate Dalvik bytecode to equivalent Java bytecode")
(description "Android applications are Java programs that run on a
customized virtual machine, which is part of the Android operating system, the
Dalvik VM. Their bytecode differs from the bytecode of normal Java
applications. Enjarify can translate the Dalvik bytecode back to equivalent
Java bytecode, which simplifies the analysis of Android applications.")
(license license:asl2.0)))

2
gnu/packages/audio.scm

@ -1027,7 +1027,7 @@ audio signals.")
@enumerate
@item Pulse-VCO, a dirac pulse oscillator with flat amplitude spectrum
@item Saw-VCO, a sawtooth oscillator with 1/F amplitude spectrum
@item Rec-VCO, a square / rectange oscillator
@item Rec-VCO, a square / rectangle oscillator
@end enumerate\n
All oscillators are low-pass filtered to provide waveforms similar to the

39
gnu/packages/aux-files/linux-libre/4.19-arm.conf

@ -1133,7 +1133,7 @@ CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NETFILTER_NETLINK_OSF=m
CONFIG_NF_CONNTRACK=m
CONFIG_NF_LOG_COMMON=m
# CONFIG_NF_LOG_NETDEV is not set
CONFIG_NF_LOG_NETDEV=m
CONFIG_NETFILTER_CONNCOUNT=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
@ -1176,8 +1176,8 @@ CONFIG_NF_NAT_REDIRECT=y
CONFIG_NETFILTER_SYNPROXY=m
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_SET=m
# CONFIG_NF_TABLES_INET is not set
# CONFIG_NF_TABLES_NETDEV is not set
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_FLOW_OFFLOAD=m
@ -1189,15 +1189,22 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_TUNNEL=m
# CONFIG_NFT_OBJREF is not set
CONFIG_NFT_OBJREF=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_REJECT_INET=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_FIB=m
CONFIG_NFT_FIB_INET=m
CONFIG_NFT_SOCKET=m
CONFIG_NFT_OSF=m
CONFIG_NFT_TPROXY=m
CONFIG_NF_DUP_NETDEV=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NFT_FIB_NETDEV=m
CONFIG_NF_FLOW_TABLE_INET=m
CONFIG_NF_FLOW_TABLE=m
CONFIG_NETFILTER_XTABLES=m
@ -1361,8 +1368,12 @@ CONFIG_IP_VS_PE_SIP=m
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_SOCKET_IPV4=m
CONFIG_NF_TPROXY_IPV4=m
# CONFIG_NF_TABLES_IPV4 is not set
# CONFIG_NF_TABLES_ARP is not set
CONFIG_NF_TABLES_IPV4=y
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NFT_DUP_IPV4=m
CONFIG_NFT_FIB_IPV4=m
CONFIG_NF_TABLES_ARP=y
CONFIG_NF_FLOW_TABLE_IPV4=m
CONFIG_NF_DUP_IPV4=m
CONFIG_NF_LOG_ARP=m
@ -1370,6 +1381,9 @@ CONFIG_NF_LOG_IPV4=m
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_NAT_IPV4=m
CONFIG_NF_NAT_MASQUERADE_IPV4=y
CONFIG_NFT_CHAIN_NAT_IPV4=m
CONFIG_NFT_MASQ_IPV4=m
CONFIG_NFT_REDIR_IPV4=m
CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NF_NAT_PROTO_GRE=m
CONFIG_NF_NAT_PPTP=m
@ -1401,7 +1415,14 @@ CONFIG_IP_NF_ARP_MANGLE=m
#
CONFIG_NF_SOCKET_IPV6=m
CONFIG_NF_TPROXY_IPV6=m
# CONFIG_NF_TABLES_IPV6 is not set
CONFIG_NF_TABLES_IPV6=y
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
CONFIG_NFT_CHAIN_NAT_IPV6=m
CONFIG_NFT_MASQ_IPV6=m
CONFIG_NFT_REDIR_IPV6=m
CONFIG_NFT_REJECT_IPV6=m
CONFIG_NFT_DUP_IPV6=m
CONFIG_NFT_FIB_IPV6=m
CONFIG_NF_FLOW_TABLE_IPV6=m
CONFIG_NF_DUP_IPV6=m
CONFIG_NF_REJECT_IPV6=m
@ -1430,7 +1451,9 @@ CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_NF_DEFRAG_IPV6=m
# CONFIG_NF_TABLES_BRIDGE is not set
CONFIG_NF_TABLES_BRIDGE=y
CONFIG_NFT_BRIDGE_REJECT=m
CONFIG_NF_LOG_BRIDGE=m
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m

43
gnu/packages/aux-files/linux-libre/4.19-arm64.conf

@ -1120,10 +1120,11 @@ CONFIG_NF_NAT_REDIRECT=y
CONFIG_NETFILTER_SYNPROXY=m
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_SET=m
# CONFIG_NF_TABLES_INET is not set
# CONFIG_NF_TABLES_NETDEV is not set
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_FLOW_OFFLOAD=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_CONNLIMIT=m
CONFIG_NFT_LOG=m