Merge remote-tracking branch 'upstream/master' into gcc-8

This commit is contained in:
Robin Gloster 2019-08-25 18:55:46 +02:00
commit 616b8343c4
No known key found for this signature in database
GPG Key ID: D5C458DF6DD97EDF
5048 changed files with 266056 additions and 268088 deletions

4
.github/CODEOWNERS vendored
View File

@ -107,8 +107,8 @@
# Eclipse # Eclipse
/pkgs/applications/editors/eclipse @rycee /pkgs/applications/editors/eclipse @rycee
# https://github.com/NixOS/nixpkgs/issues/31401 # Licenses
/lib/licenses.nix @ghost /lib/licenses.nix @alyssais
# Qt / KDE # Qt / KDE
/pkgs/applications/kde @ttuegel /pkgs/applications/kde @ttuegel

View File

@ -8,5 +8,4 @@
## Technical details ## Technical details
Please run `nix-shell -p nix-info --run "nix-info -m"` and paste the Please run `nix run nixpkgs.nix-info -c nix-info -m` and paste the result.
results.

37
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,37 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: '0.kind: bug'
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. ...
2. ...
3. ...
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.
**Metadata**
Please run `nix run nixpkgs.nix-info -c nix-info -m` and paste the result.
Maintainer information:
```yaml
# a list of nixpkgs attributes affected by the problem
attribute:
# a list of nixos modules affected by the problem
module:
```

View File

@ -0,0 +1,18 @@
---
name: Packaging requests
about: For packages that are missing
title: ''
labels: '0.kind: packaging request'
assignees: ''
---
**Project description**
_describe the project a little_
**Metadata**
* homepage URL:
* source URL:
* license: mit, bsd, gpl2+ , ...
* platforms: unix, linux, darwin, ...

View File

@ -15,7 +15,9 @@
- [ ] Tested compilation of all pkgs that depend on this change using `nix-shell -p nix-review --run "nix-review wip"` - [ ] Tested compilation of all pkgs that depend on this change using `nix-shell -p nix-review --run "nix-review wip"`
- [ ] Tested execution of all binary files (usually in `./result/bin/`) - [ ] Tested execution of all binary files (usually in `./result/bin/`)
- [ ] Determined the impact on package closure size (by running `nix path-info -S` before and after) - [ ] Determined the impact on package closure size (by running `nix path-info -S` before and after)
- [ ] Assured whether relevant documentation is up to date - [ ] Ensured that relevant documentation is up to date
- [ ] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md). - [ ] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md).
--- ###### Notify maintainers
cc @

View File

@ -1,6 +1,7 @@
[<img src="https://nixos.org/logo/nixos-hires.png" width="500px" alt="logo" />](https://nixos.org/nixos) [<img src="https://nixos.org/logo/nixos-hires.png" width="500px" alt="logo" />](https://nixos.org/nixos)
[![Code Triagers Badge](https://www.codetriage.com/nixos/nixpkgs/badges/users.svg)](https://www.codetriage.com/nixos/nixpkgs) [![Code Triagers Badge](https://www.codetriage.com/nixos/nixpkgs/badges/users.svg)](https://www.codetriage.com/nixos/nixpkgs)
[![Open Collective supporters](https://opencollective.com/nixos/tiers/supporter/badge.svg?label=Supporter&color=brightgreen)](https://opencollective.com/nixos)
Nixpkgs is a collection of packages for the [Nix](https://nixos.org/nix/) package Nixpkgs is a collection of packages for the [Nix](https://nixos.org/nix/) package
manager. It is periodically built and tested by the [Hydra](https://hydra.nixos.org/) manager. It is periodically built and tested by the [Hydra](https://hydra.nixos.org/)

View File

@ -8,10 +8,10 @@ debug:
nix-shell --run "xmloscopy --docbook5 ./manual.xml ./manual-full.xml" nix-shell --run "xmloscopy --docbook5 ./manual.xml ./manual-full.xml"
.PHONY: format .PHONY: format
format: format: doc-support/result
find . -iname '*.xml' -type f | while read f; do \ find . -iname '*.xml' -type f | while read f; do \
echo $$f ;\ echo $$f ;\
xmlformat --config-file "$$XMLFORMAT_CONFIG" -i $$f ;\ xmlformat --config-file "doc-support/result/xmlformat.conf" -i $$f ;\
done done
.PHONY: fix-misc-xml .PHONY: fix-misc-xml
@ -21,19 +21,19 @@ fix-misc-xml:
.PHONY: clean .PHONY: clean
clean: clean:
rm -f ${MD_TARGETS} .version manual-full.xml functions/library/locations.xml functions/library/generated rm -f ${MD_TARGETS} doc-support/result .version manual-full.xml functions/library/locations.xml functions/library/generated
rm -rf ./out/ ./highlightjs rm -rf ./out/ ./highlightjs
.PHONY: validate .PHONY: validate
validate: manual-full.xml validate: manual-full.xml doc-support/result
jing "$$RNG" manual-full.xml jing doc-support/result/docbook.rng manual-full.xml
out/html/index.html: manual-full.xml style.css highlightjs out/html/index.html: doc-support/result manual-full.xml style.css highlightjs
mkdir -p out/html mkdir -p out/html
xsltproc ${xsltFlags} \ xsltproc \
--nonet --xinclude \ --nonet --xinclude \
--output $@ \ --output $@ \
"$$XSL/docbook/xhtml/docbook.xsl" \ doc-support/result/xhtml.xsl \
./manual-full.xml ./manual-full.xml
mkdir -p out/html/highlightjs/ mkdir -p out/html/highlightjs/
@ -43,49 +43,48 @@ out/html/index.html: manual-full.xml style.css highlightjs
cp ./style.css out/html/style.css cp ./style.css out/html/style.css
mkdir -p out/html/images/callouts mkdir -p out/html/images/callouts
cp "$$XSL/docbook/images/callouts/"*.svg out/html/images/callouts/ cp doc-support/result/xsl/docbook/images/callouts/*.svg out/html/images/callouts/
chmod u+w -R out/html/ chmod u+w -R out/html/
out/epub/manual.epub: manual-full.xml out/epub/manual.epub: manual-full.xml
mkdir -p out/epub/scratch mkdir -p out/epub/scratch
xsltproc ${xsltFlags} --nonet \ xsltproc --nonet \
--output out/epub/scratch/ \ --output out/epub/scratch/ \
"$$XSL/docbook/epub/docbook.xsl" \ doc-support/result/epub.xsl \
./manual-full.xml ./manual-full.xml
cp ./overrides.css out/epub/scratch/OEBPS cp ./overrides.css out/epub/scratch/OEBPS
cp ./style.css out/epub/scratch/OEBPS cp ./style.css out/epub/scratch/OEBPS
mkdir -p out/epub/scratch/OEBPS/images/callouts/ mkdir -p out/epub/scratch/OEBPS/images/callouts/
cp "$$XSL/docbook/images/callouts/"*.svg out/epub/scratch/OEBPS/images/callouts/ cp doc-support/result/xsl/docbook/images/callouts/*.svg out/epub/scratch/OEBPS/images/callouts/
echo "application/epub+zip" > mimetype echo "application/epub+zip" > mimetype
zip -0Xq "out/epub/manual.epub" mimetype zip -0Xq "out/epub/manual.epub" mimetype
rm mimetype rm mimetype
cd "out/epub/scratch/" && zip -Xr9D "../manual.epub" * cd "out/epub/scratch/" && zip -Xr9D "../manual.epub" *
rm -rf "out/epub/scratch/" rm -rf "out/epub/scratch/"
highlightjs: highlightjs: doc-support/result
mkdir -p highlightjs mkdir -p highlightjs
cp -r "$$HIGHLIGHTJS/highlight.pack.js" highlightjs/ cp -r doc-support/result/highlightjs/highlight.pack.js highlightjs/
cp -r "$$HIGHLIGHTJS/LICENSE" highlightjs/ cp -r doc-support/result/highlightjs/LICENSE highlightjs/
cp -r "$$HIGHLIGHTJS/mono-blue.css" highlightjs/ cp -r doc-support/result/highlightjs/mono-blue.css highlightjs/
cp -r "$$HIGHLIGHTJS/loader.js" highlightjs/ cp -r doc-support/result/highlightjs/loader.js highlightjs/
manual-full.xml: ${MD_TARGETS} .version functions/library/locations.xml functions/library/generated *.xml **/*.xml **/**/*.xml manual-full.xml: ${MD_TARGETS} .version functions/library/locations.xml functions/library/generated *.xml **/*.xml **/**/*.xml
xmllint --nonet --xinclude --noxincludenode manual.xml --output manual-full.xml xmllint --nonet --xinclude --noxincludenode manual.xml --output manual-full.xml
.version: .version: doc-support/result
nix-instantiate --eval \ ln -rfs ./doc-support/result/version .version
-E '(import ../lib).version' > .version
functions/library/locations.xml: doc-support/result: doc-support/default.nix
nix-build ./lib-function-locations.nix \ (cd doc-support; nix-build)
--out-link $@
functions/library/generated: functions/library/locations.xml functions/library/locations.xml: doc-support/result
nix-build ./lib-function-docs.nix \ ln -rfs ./doc-support/result/function-locations.xml functions/library/locations.xml
--arg locationsXml $< \
--out-link $@ functions/library/generated: doc-support/result
ln -rfs ./doc-support/result/function-docs functions/library/generated
%.section.xml: %.section.md %.section.xml: %.section.md
pandoc $^ -w docbook+smart \ pandoc $^ -w docbook+smart \

View File

@ -921,7 +921,7 @@ src = fetchFromGitHub {
<para> <para>
You can convert between formats with nix-hash, for example: You can convert between formats with nix-hash, for example:
<screen> <screen>
$ nix-hash --type sha256 --to-base32 <replaceable>HASH</replaceable> <prompt>$ </prompt>nix-hash --type sha256 --to-base32 <replaceable>HASH</replaceable>
</screen> </screen>
</para> </para>
</listitem> </listitem>
@ -1038,7 +1038,7 @@ patches = [ ./0001-changes.patch ];
<para> <para>
Move to the root directory of the source code you're patching. Move to the root directory of the source code you're patching.
<screen> <screen>
$ cd the/program/source</screen> <prompt>$ </prompt>cd the/program/source</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -1046,8 +1046,8 @@ $ cd the/program/source</screen>
If a git repository is not already present, create one and stage all of If a git repository is not already present, create one and stage all of
the source files. the source files.
<screen> <screen>
$ git init <prompt>$ </prompt>git init
$ git add .</screen> <prompt>$ </prompt>git add .</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -1060,7 +1060,7 @@ $ git add .</screen>
<para> <para>
Use git to create a diff, and pipe the output to a patch file: Use git to create a diff, and pipe the output to a patch file:
<screen> <screen>
$ git diff > nixpkgs/pkgs/the/package/0001-changes.patch</screen> <prompt>$ </prompt>git diff > nixpkgs/pkgs/the/package/0001-changes.patch</screen>
</para> </para>
</listitem> </listitem>
</orderedlist> </orderedlist>

View File

@ -12,9 +12,9 @@ xlink:href="https://github.com/NixOS/nixpkgs/tree/master/doc">doc</filename>
You can quickly check your edits with <command>make</command>: You can quickly check your edits with <command>make</command>:
</para> </para>
<screen> <screen>
$ cd /path/to/nixpkgs/doc <prompt>$ </prompt>cd /path/to/nixpkgs/doc
$ nix-shell <prompt>$ </prompt>nix-shell
[nix-shell]$ make <prompt>[nix-shell]$ </prompt>make
</screen> </screen>
<para> <para>
If you experience problems, run <command>make debug</command> to help If you experience problems, run <command>make debug</command> to help
@ -24,10 +24,10 @@ xlink:href="https://github.com/NixOS/nixpkgs/tree/master/doc">doc</filename>
After making modifications to the manual, it's important to build it before After making modifications to the manual, it's important to build it before
committing. You can do that as follows: committing. You can do that as follows:
<screen> <screen>
$ cd /path/to/nixpkgs/doc <prompt>$ </prompt>cd /path/to/nixpkgs/doc
$ nix-shell <prompt>$ </prompt>nix-shell
[nix-shell]$ make clean <prompt>[nix-shell]$ </prompt>make clean
[nix-shell]$ nix-build . <prompt>[nix-shell]$ </prompt>nix-build .
</screen> </screen>
If the build succeeds, the manual will be in If the build succeeds, the manual will be in
<filename>./result/share/doc/nixpkgs/manual.html</filename>. <filename>./result/share/doc/nixpkgs/manual.html</filename>.

View File

@ -1,8 +1,7 @@
{ pkgs ? (import ./.. { }), nixpkgs ? { }}: { pkgs ? (import ./.. { }), nixpkgs ? { }}:
let let
lib = pkgs.lib; lib = pkgs.lib;
locationsXml = import ./lib-function-locations.nix { inherit pkgs nixpkgs; }; doc-support = import ./doc-support { inherit pkgs nixpkgs; };
functionDocs = import ./lib-function-docs.nix { inherit locationsXml pkgs; };
in pkgs.stdenv.mkDerivation { in pkgs.stdenv.mkDerivation {
name = "nixpkgs-manual"; name = "nixpkgs-manual";
@ -10,30 +9,8 @@ in pkgs.stdenv.mkDerivation {
src = ./.; src = ./.;
# Hacking on these variables? Make sure to close and open
# nix-shell between each test, maybe even:
# $ nix-shell --run "make clean all"
# otherwise they won't reapply :)
HIGHLIGHTJS = pkgs.documentation-highlighter;
XSL = "${pkgs.docbook_xsl_ns}/xml/xsl";
RNG = "${pkgs.docbook5}/xml/rng/docbook/docbook.rng";
XMLFORMAT_CONFIG = ../nixos/doc/xmlformat.conf;
xsltFlags = lib.concatStringsSep " " [
"--param section.autolabel 1"
"--param section.label.includes.component.label 1"
"--stringparam html.stylesheet 'style.css overrides.css highlightjs/mono-blue.css'"
"--stringparam html.script './highlightjs/highlight.pack.js ./highlightjs/loader.js'"
"--param xref.with.number.and.title 1"
"--param toc.section.depth 3"
"--stringparam admon.style ''"
"--stringparam callout.graphics.extension .svg"
];
postPatch = '' postPatch = ''
rm -rf ./functions/library/locations.xml ln -s ${doc-support} ./doc-support/result
ln -s ${locationsXml} ./functions/library/locations.xml
ln -s ${functionDocs} ./functions/library/generated
echo ${lib.version} > .version
''; '';
installPhase = '' installPhase = ''

View File

@ -0,0 +1,45 @@
{ pkgs ? (import ../.. {}), nixpkgs ? { }}:
let
locationsXml = import ./lib-function-locations.nix { inherit pkgs nixpkgs; };
functionDocs = import ./lib-function-docs.nix { inherit locationsXml pkgs; };
version = pkgs.lib.version;
epub-xsl = pkgs.writeText "epub.xsl" ''
<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="${pkgs.docbook_xsl_ns}/xml/xsl/docbook/epub/docbook.xsl" />
<xsl:import href="${./parameters.xml}"/>
</xsl:stylesheet>
'';
xhtml-xsl = pkgs.writeText "xhtml.xsl" ''
<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="${pkgs.docbook_xsl_ns}/xml/xsl/docbook/xhtml/docbook.xsl" />
<xsl:import href="${./parameters.xml}"/>
</xsl:stylesheet>
'';
in pkgs.runCommand "doc-support" {}
''
mkdir result
(
cd result
ln -s ${locationsXml} ./function-locations.xml
ln -s ${functionDocs} ./function-docs
ln -s ${pkgs.docbook5}/xml/rng/docbook/docbook.rng ./docbook.rng
ln -s ${pkgs.docbook_xsl_ns}/xml/xsl ./xsl
ln -s ${epub-xsl} ./epub.xsl
ln -s ${xhtml-xsl} ./xhtml.xsl
ln -s ${../../nixos/doc/xmlformat.conf} ./xmlformat.conf
ln -s ${pkgs.documentation-highlighter} ./highlightjs
echo -n "${version}" > ./version
)
mv result $out
''

View File

@ -6,7 +6,7 @@
with pkgs; stdenv.mkDerivation { with pkgs; stdenv.mkDerivation {
name = "nixpkgs-lib-docs"; name = "nixpkgs-lib-docs";
src = ./../lib; src = ./../../lib;
buildInputs = [ nixdoc ]; buildInputs = [ nixdoc ];
installPhase = '' installPhase = ''

View File

@ -0,0 +1,14 @@
<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:param name="section.autolabel" select="1" />
<xsl:param name="section.label.includes.component.label" select="1" />
<xsl:param name="html.stylesheet" select="'style.css overrides.css highlightjs/mono-blue.css'" />
<xsl:param name="html.script" select="'./highlightjs/highlight.pack.js ./highlightjs/loader.js'" />
<xsl:param name="xref.with.number.and.title" select="1" />
<xsl:param name="use.id.as.filename" select="1" />
<xsl:param name="toc.section.depth" select="3" />
<xsl:param name="admon.style" select="''" />
<xsl:param name="callout.graphics.extension" select="'.svg'" />
</xsl:stylesheet>

View File

@ -16,6 +16,7 @@
<xi:include href="functions/fhs-environments.xml" /> <xi:include href="functions/fhs-environments.xml" />
<xi:include href="functions/shell.xml" /> <xi:include href="functions/shell.xml" />
<xi:include href="functions/dockertools.xml" /> <xi:include href="functions/dockertools.xml" />
<xi:include href="functions/snaptools.xml" />
<xi:include href="functions/appimagetools.xml" /> <xi:include href="functions/appimagetools.xml" />
<xi:include href="functions/prefer-remote-fetch.xml" /> <xi:include href="functions/prefer-remote-fetch.xml" />
<xi:include href="functions/nix-gitignore.xml" /> <xi:include href="functions/nix-gitignore.xml" />

View File

@ -52,7 +52,7 @@ spot sensor temperature 0.000000, unit celsius, color scheme 0, calibration: off
<prompt>$ </prompt>file -k type2.AppImage <prompt>$ </prompt>file -k type2.AppImage
type2.AppImage: ELF 64-bit LSB executable, x86-64, version 1 (SYSV) (Lepton 3.x), scale 232-60668, spot sensor temperature -4.187500, color scheme 15, show scale bar, calibration: offset -0.000000, slope 0.000000 (Lepton 2.x), scale 4111-45000, spot sensor temperature 412442.250000, color scheme 3, minimum point enabled, calibration: offset -75402534979642766821519867692934234112.000000, slope 5815371847733706829839455140374904832.000000, dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=79dcc4e55a61c293c5e19edbd8d65b202842579f, stripped\012- data type2.AppImage: ELF 64-bit LSB executable, x86-64, version 1 (SYSV) (Lepton 3.x), scale 232-60668, spot sensor temperature -4.187500, color scheme 15, show scale bar, calibration: offset -0.000000, slope 0.000000 (Lepton 2.x), scale 4111-45000, spot sensor temperature 412442.250000, color scheme 3, minimum point enabled, calibration: offset -75402534979642766821519867692934234112.000000, slope 5815371847733706829839455140374904832.000000, dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=79dcc4e55a61c293c5e19edbd8d65b202842579f, stripped\012- data
</screen> </screen>
<para> <para>
Note how the type 1 AppImage is described as an <literal>ISO 9660 CD-ROM Note how the type 1 AppImage is described as an <literal>ISO 9660 CD-ROM

View File

@ -312,7 +312,23 @@ hello latest de2bf4786de6 About a minute ago 25.2MB
Maximum number of layers to create. Maximum number of layers to create.
</para> </para>
<para> <para>
<emphasis>Default:</emphasis> <literal>24</literal> <emphasis>Default:</emphasis> <literal>100</literal>
</para>
<para>
<emphasis>Maximum:</emphasis> <literal>125</literal>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>extraCommands</varname> <emphasis>optional</emphasis>
</term>
<listitem>
<para>
Shell commands to run while building the final layer, without access
to most of the layer contents. Changes to this layer are "on top"
of all the other layers, so can create additional directories
and files.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -480,9 +496,9 @@ pullImage {
<literal>nix-prefetch-docker</literal> command can be used to get required <literal>nix-prefetch-docker</literal> command can be used to get required
image parameters: image parameters:
<programlisting> <screen>
$ nix run nixpkgs.nix-prefetch-docker -c nix-prefetch-docker --image-name mysql --image-tag 5 <prompt>$ </prompt>nix run nixpkgs.nix-prefetch-docker -c nix-prefetch-docker --image-name mysql --image-tag 5
</programlisting> </screen>
Since a given <varname>imageName</varname> may transparently refer to a Since a given <varname>imageName</varname> may transparently refer to a
manifest list of images which support multiple architectures and/or manifest list of images which support multiple architectures and/or
@ -491,17 +507,17 @@ $ nix run nixpkgs.nix-prefetch-docker -c nix-prefetch-docker --image-name mysql
By default it will match the OS and architecture of the host the command is By default it will match the OS and architecture of the host the command is
run on. run on.
<programlisting> <screen>
$ nix-prefetch-docker --image-name mysql --image-tag 5 --arch x86_64 --os linux <prompt>$ </prompt>nix-prefetch-docker --image-name mysql --image-tag 5 --arch x86_64 --os linux
</programlisting> </screen>
Desired image name and tag can be set using Desired image name and tag can be set using
<option>--final-image-name</option> and <option>--final-image-tag</option> <option>--final-image-name</option> and <option>--final-image-tag</option>
arguments: arguments:
<programlisting> <screen>
$ nix-prefetch-docker --image-name mysql --image-tag 5 --final-image-name eu.gcr.io/my-project/mysql --final-image-tag prod <prompt>$ </prompt>nix-prefetch-docker --image-name mysql --image-tag 5 --final-image-name eu.gcr.io/my-project/mysql --final-image-tag prod
</programlisting> </screen>
</para> </para>
</section> </section>
@ -537,7 +553,7 @@ exportImage {
name = someLayeredImage.name; name = someLayeredImage.name;
} }
</programlisting> </programlisting>
</example> </example>
<para> <para>

View File

@ -10,16 +10,16 @@
upload while the builder can fetch faster directly from the source. To use upload while the builder can fetch faster directly from the source. To use
it, put the following snippet as a new overlay: it, put the following snippet as a new overlay:
<programlisting> <programlisting>
self: super: self: super:
(super.prefer-remote-fetch self super) (super.prefer-remote-fetch self super)
</programlisting> </programlisting>
A full configuration example for that sets the overlay up for your own A full configuration example for that sets the overlay up for your own
account, could look like this account, could look like this
<programlisting> <screen>
$ mkdir ~/.config/nixpkgs/overlays/ <prompt>$ </prompt>mkdir ~/.config/nixpkgs/overlays/
$ cat &gt; ~/.config/nixpkgs/overlays/prefer-remote-fetch.nix &lt;&lt;EOF <prompt>$ </prompt>cat &gt; ~/.config/nixpkgs/overlays/prefer-remote-fetch.nix &lt;&lt;EOF
self: super: super.prefer-remote-fetch self super self: super: super.prefer-remote-fetch self super
EOF EOF
</programlisting> </screen>
</para> </para>
</section> </section>

View File

@ -0,0 +1,28 @@
let
inherit (import <nixpkgs> { }) snapTools firefox;
in snapTools.makeSnap {
meta = {
name = "nix-example-firefox";
summary = firefox.meta.description;
architectures = [ "amd64" ];
apps.nix-example-firefox = {
command = "${firefox}/bin/firefox";
plugs = [
"pulseaudio"
"camera"
"browser-support"
"avahi-observe"
"cups-control"
"desktop"
"desktop-legacy"
"gsettings"
"home"
"network"
"mount-observe"
"removable-media"
"x11"
];
};
confinement = "strict";
};
}

View File

@ -0,0 +1,12 @@
let
inherit (import <nixpkgs> { }) snapTools hello;
in snapTools.makeSnap {
meta = {
name = "hello";
summary = hello.meta.description;
description = hello.meta.longDescription;
architectures = [ "amd64" ];
confinement = "strict";
apps.hello.command = "${hello}/bin/hello";
};
}

View File

@ -0,0 +1,74 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
xml:id="sec-pkgs-snapTools">
<title>pkgs.snapTools</title>
<para>
<varname>pkgs.snapTools</varname> is a set of functions for creating
Snapcraft images. Snap and Snapcraft is not used to perform these operations.
</para>
<section xml:id="ssec-pkgs-snapTools-makeSnap-signature">
<title>The makeSnap Function</title>
<para>
<function>makeSnap</function> takes a single named argument,
<parameter>meta</parameter>. This argument mirrors
<link xlink:href="https://docs.snapcraft.io/snap-format">the upstream
<filename>snap.yaml</filename> format</link> exactly.
</para>
<para>
The <parameter>base</parameter> should not be be specified, as
<function>makeSnap</function> will force set it.
</para>
<para>
Currently, <function>makeSnap</function> does not support creating GUI
stubs.
</para>
</section>
<section xml:id="ssec-pkgs-snapTools-build-a-snap-hello">
<title>Build a Hello World Snap</title>
<example xml:id="ex-snapTools-buildSnap-hello">
<title>Making a Hello World Snap</title>
<para>
The following expression packages GNU Hello as a Snapcraft snap.
</para>
<programlisting><xi:include href="./snap/example-hello.nix" parse="text" /></programlisting>
<para>
<command>nix-build</command> this expression and install it with
<command>snap install ./result --dangerous</command>.
<command>hello</command> will now be the Snapcraft version of the package.
</para>
</example>
</section>
<section xml:id="ssec-pkgs-snapTools-build-a-snap-firefox">
<title>Build a Hello World Snap</title>
<example xml:id="ex-snapTools-buildSnap-firefox">
<title>Making a Graphical Snap</title>
<para>
Graphical programs require many more integrations with the host. This
example uses Firefox as an example, because it is one of the most
complicated programs we could package.
</para>
<programlisting><xi:include href="./snap/example-firefox.nix" parse="text" /></programlisting>
<para>
<command>nix-build</command> this expression and install it with
<command>snap install ./result --dangerous</command>.
<command>nix-example-firefox</command> will now be the Snapcraft version of
the Firefox package.
</para>
<para>
The specific meaning behind plugs can be looked up in the
<link xlink:href="https://docs.snapcraft.io/supported-interfaces">Snapcraft
interface documentation</link>.
</para>
</example>
</section>
</section>

View File

@ -35,7 +35,7 @@
An example of using <literal>runCommand</literal> is provided below. An example of using <literal>runCommand</literal> is provided below.
</para> </para>
<programlisting> <programlisting>
(import &lt;nixpkgs&gt; {}).runCommand "my-example" {} '' (import &lt;nixpkgs&gt; {}).runCommand "my-example" {} ''
echo My example command is running echo My example command is running
mkdir $out mkdir $out
@ -52,8 +52,8 @@
echo date echo date
date date
'' ''
</programlisting> </programlisting>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>

View File

@ -185,10 +185,9 @@ with import <nixpkgs> {};
androidenv.emulateApp { androidenv.emulateApp {
name = "emulate-MyAndroidApp"; name = "emulate-MyAndroidApp";
platformVersion = "24"; platformVersion = "28";
abiVersion = "armeabi-v7a"; # mips, x86 or x86_64 abiVersion = "x86_64"; # armeabi-v7a, mips, x86
systemImageType = "default"; systemImageType = "google_apis_playstore";
useGoogleAPIs = false;
} }
``` ```
@ -201,7 +200,7 @@ with import <nixpkgs> {};
androidenv.emulateApp { androidenv.emulateApp {
name = "emulate-MyAndroidApp"; name = "emulate-MyAndroidApp";
platformVersion = "24"; platformVersion = "24";
abiVersion = "armeabi-v7a"; # mips, x86 or x86_64 abiVersion = "armeabi-v7a"; # mips, x86, x86_64
systemImageType = "default"; systemImageType = "default";
useGoogleAPIs = false; useGoogleAPIs = false;
app = ./MyApp.apk; app = ./MyApp.apk;

View File

@ -131,8 +131,8 @@
in <literal>beamPackages</literal>, use the following command: in <literal>beamPackages</literal>, use the following command:
</para> </para>
<programlisting> <screen>
$ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -qaP -A beamPackages <prompt>$ </prompt>nix-env -f &quot;&lt;nixpkgs&gt;&quot; -qaP -A beamPackages
beamPackages.esqlite esqlite-0.2.1 beamPackages.esqlite esqlite-0.2.1
beamPackages.goldrush goldrush-0.1.7 beamPackages.goldrush goldrush-0.1.7
beamPackages.ibrowse ibrowse-4.2.2 beamPackages.ibrowse ibrowse-4.2.2
@ -140,16 +140,16 @@ beamPackages.jiffy jiffy-0.14.5
beamPackages.lager lager-3.0.2 beamPackages.lager lager-3.0.2
beamPackages.meck meck-0.8.3 beamPackages.meck meck-0.8.3
beamPackages.rebar3-pc pc-1.1.0 beamPackages.rebar3-pc pc-1.1.0
</programlisting> </screen>
<para> <para>
To install any of those packages into your profile, refer to them by their To install any of those packages into your profile, refer to them by their
attribute path (first column): attribute path (first column):
</para> </para>
<programlisting> <screen>
$ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse <prompt>$ </prompt>nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
</programlisting> </screen>
<para> <para>
The attribute path of any BEAM package corresponds to the name of that The attribute path of any BEAM package corresponds to the name of that
@ -178,9 +178,9 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
</para> </para>
<programlisting> <programlisting>
{ stdenv, fetchFromGitHub, buildRebar3, ibrowse, jsx, erlware_commons }: { stdenv, fetchFromGitHub, buildRebar3, ibrowse, jsx, erlware_commons }:
buildRebar3 rec { buildRebar3 rec {
name = "hex2nix"; name = "hex2nix";
version = "0.0.1"; version = "0.0.1";
@ -192,8 +192,8 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
}; };
beamDeps = [ ibrowse jsx erlware_commons ]; beamDeps = [ ibrowse jsx erlware_commons ];
} }
</programlisting> </programlisting>
<para> <para>
Such derivations are callable with Such derivations are callable with
@ -228,9 +228,9 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
</para> </para>
<programlisting> <programlisting>
{ buildErlangMk, fetchHex, cowlib, ranch }: { buildErlangMk, fetchHex, cowlib, ranch }:
buildErlangMk { buildErlangMk {
name = "cowboy"; name = "cowboy";
version = "1.0.4"; version = "1.0.4";
@ -249,8 +249,8 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
license = stdenv.lib.licenses.isc; license = stdenv.lib.licenses.isc;
homepage = https://github.com/ninenines/cowboy; homepage = https://github.com/ninenines/cowboy;
}; };
} }
</programlisting> </programlisting>
</section> </section>
<section xml:id="mix-packages"> <section xml:id="mix-packages">
@ -262,9 +262,9 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
</para> </para>
<programlisting> <programlisting>
{ buildMix, fetchHex, plug, absinthe }: { buildMix, fetchHex, plug, absinthe }:
buildMix { buildMix {
name = "absinthe_plug"; name = "absinthe_plug";
version = "1.0.0"; version = "1.0.0";
@ -283,17 +283,17 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
license = stdenv.lib.licenses.bsd3; license = stdenv.lib.licenses.bsd3;
homepage = https://github.com/CargoSense/absinthe_plug; homepage = https://github.com/CargoSense/absinthe_plug;
}; };
} }
</programlisting> </programlisting>
<para> <para>
Alternatively, we can use <literal>buildHex</literal> as a shortcut: Alternatively, we can use <literal>buildHex</literal> as a shortcut:
</para> </para>
<programlisting> <programlisting>
{ buildHex, buildMix, plug, absinthe }: { buildHex, buildMix, plug, absinthe }:
buildHex { buildHex {
name = "absinthe_plug"; name = "absinthe_plug";
version = "1.0.0"; version = "1.0.0";
@ -310,8 +310,8 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
license = stdenv.lib.licenses.bsd3; license = stdenv.lib.licenses.bsd3;
homepage = https://github.com/CargoSense/absinthe_plug; homepage = https://github.com/CargoSense/absinthe_plug;
}; };
} }
</programlisting> </programlisting>
</section> </section>
</section> </section>
</section> </section>
@ -330,47 +330,47 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
could do the following: could do the following:
</para> </para>
<programlisting> <screen>
$ nix-shell -A beamPackages.ibrowse.env --run "erl" <prompt>$ </prompt><userinput>nix-shell -A beamPackages.ibrowse.env --run "erl"</userinput>
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] <computeroutput>Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.0 (abort with ^G) Eshell V7.0 (abort with ^G)</computeroutput>
1> m(ibrowse). <prompt>1> </prompt><userinput>m(ibrowse).</userinput>
Module: ibrowse <computeroutput>Module: ibrowse
MD5: 3b3e0137d0cbb28070146978a3392945 MD5: 3b3e0137d0cbb28070146978a3392945
Compiled: January 10 2016, 23:34 Compiled: January 10 2016, 23:34
Object file: /nix/store/g1rlf65rdgjs4abbyj4grp37ry7ywivj-ibrowse-4.2.2/lib/erlang/lib/ibrowse-4.2.2/ebin/ibrowse.beam Object file: /nix/store/g1rlf65rdgjs4abbyj4grp37ry7ywivj-ibrowse-4.2.2/lib/erlang/lib/ibrowse-4.2.2/ebin/ibrowse.beam
Compiler options: [{outdir,"/tmp/nix-build-ibrowse-4.2.2.drv-0/hex-source-ibrowse-4.2.2/_build/default/lib/ibrowse/ebin"}, Compiler options: [{outdir,"/tmp/nix-build-ibrowse-4.2.2.drv-0/hex-source-ibrowse-4.2.2/_build/default/lib/ibrowse/ebin"},
debug_info,debug_info,nowarn_shadow_vars, debug_info,debug_info,nowarn_shadow_vars,
warn_unused_import,warn_unused_vars,warnings_as_errors, warn_unused_import,warn_unused_vars,warnings_as_errors,
{i,"/tmp/nix-build-ibrowse-4.2.2.drv-0/hex-source-ibrowse-4.2.2/_build/default/lib/ibrowse/include"}] {i,"/tmp/nix-build-ibrowse-4.2.2.drv-0/hex-source-ibrowse-4.2.2/_build/default/lib/ibrowse/include"}]
Exports: Exports:
add_config/1 send_req_direct/7 add_config/1 send_req_direct/7
all_trace_off/0 set_dest/3 all_trace_off/0 set_dest/3
code_change/3 set_max_attempts/3 code_change/3 set_max_attempts/3
get_config_value/1 set_max_pipeline_size/3 get_config_value/1 set_max_pipeline_size/3
get_config_value/2 set_max_sessions/3 get_config_value/2 set_max_sessions/3
get_metrics/0 show_dest_status/0 get_metrics/0 show_dest_status/0
get_metrics/2 show_dest_status/1 get_metrics/2 show_dest_status/1
handle_call/3 show_dest_status/2 handle_call/3 show_dest_status/2
handle_cast/2 spawn_link_worker_process/1 handle_cast/2 spawn_link_worker_process/1
handle_info/2 spawn_link_worker_process/2 handle_info/2 spawn_link_worker_process/2
init/1 spawn_worker_process/1 init/1 spawn_worker_process/1
module_info/0 spawn_worker_process/2 module_info/0 spawn_worker_process/2
module_info/1 start/0 module_info/1 start/0
rescan_config/0 start_link/0 rescan_config/0 start_link/0
rescan_config/1 stop/0 rescan_config/1 stop/0
send_req/3 stop_worker_process/1 send_req/3 stop_worker_process/1
send_req/4 stream_close/1 send_req/4 stream_close/1
send_req/5 stream_next/1 send_req/5 stream_next/1
send_req/6 terminate/2 send_req/6 terminate/2
send_req_direct/4 trace_off/0 send_req_direct/4 trace_off/0
send_req_direct/5 trace_off/2 send_req_direct/5 trace_off/2
send_req_direct/6 trace_on/0 send_req_direct/6 trace_on/0
trace_on/2 trace_on/2
ok ok</computeroutput>
2> <prompt>2></prompt>
</programlisting> </screen>
<para> <para>
Notice the <literal>-A beamPackages.ibrowse.env</literal>. That is the key Notice the <literal>-A beamPackages.ibrowse.env</literal>. That is the key
@ -408,7 +408,7 @@ let
in in
drv drv
</programlisting> </programlisting>
<section xml:id="building-in-a-shell"> <section xml:id="building-in-a-shell">
<title>Building in a Shell (for Mix Projects)</title> <title>Building in a Shell (for Mix Projects)</title>
@ -474,7 +474,7 @@ plt:
analyze: build plt analyze: build plt
$(NIX_SHELL) --run "mix dialyzer --no-compile" $(NIX_SHELL) --run "mix dialyzer --no-compile"
</programlisting> </programlisting>
<para> <para>
Using a <literal>shell.nix</literal> as described (see Using a <literal>shell.nix</literal> as described (see
@ -513,9 +513,9 @@ analyze: build plt
<literal>nixpkgs</literal> repository: <literal>nixpkgs</literal> repository:
</para> </para>
<programlisting> <screen>
$ nix-build -A beamPackages <prompt>$ </prompt>nix-build -A beamPackages
</programlisting> </screen>
<para> <para>
That will attempt to build every package in <literal>beamPackages</literal>. That will attempt to build every package in <literal>beamPackages</literal>.

View File

@ -218,12 +218,12 @@ deis = buildGoPackage rec {
<varname>bin</varname> includes program binaries. You can test build a Go <varname>bin</varname> includes program binaries. You can test build a Go
binary as follows: binary as follows:
<screen> <screen>
$ nix-build -A deis.bin <prompt>$ </prompt>nix-build -A deis.bin
</screen> </screen>
or build all outputs with: or build all outputs with:
<screen> <screen>
$ nix-build -A deis.all <prompt>$ </prompt>nix-build -A deis.all
</screen> </screen>
<varname>bin</varname> output will be installed by default with <varname>bin</varname> output will be installed by default with
<varname>nix-env -i</varname> or <varname>systemPackages</varname>. <varname>nix-env -i</varname> or <varname>systemPackages</varname>.
</para> </para>

View File

@ -11,10 +11,21 @@ $ # On non-NixOS
$ nix-env -i nixpkgs.idris $ nix-env -i nixpkgs.idris
``` ```
This however only provides the `prelude` and `base` libraries. To install additional libraries: This however only provides the `prelude` and `base` libraries. To install idris with additional libraries, you can use the `idrisPackages.with-packages` function, e.g. in an overlay in `~/.config/nixpkgs/overlays/my-idris.nix`:
```nix
self: super: {
myIdris = with self.idrisPackages; with-packages [ contrib pruviloj ];
}
```
And then:
``` ```
$ nix-env -iE 'pkgs: pkgs.idrisPackages.with-packages (with pkgs.idrisPackages; [ contrib pruviloj ])' $ # On NixOS
$ nix-env -iA nixos.myIdris
$ # On non-NixOS
$ nix-env -iA nixpkgs.myIdris
``` ```
To see all available Idris packages: To see all available Idris packages:
@ -113,3 +124,21 @@ in another file (say `default.nix`) to be able to build it with
``` ```
$ nix-build -A yaml $ nix-build -A yaml
``` ```
## Passing options to `idris` commands
The `build-idris-package` function provides also optional input values to set additional options for the used `idris` commands.
Specifically, you can set `idrisBuildOptions`, `idrisTestOptions`, `idrisInstallOptions` and `idrisDocOptions` to provide additional options to the `idris` command respectively when building, testing, installing and generating docs for your package.
For example you could set
```
build-idris-package {
idrisBuildOptions = [ "--log" "1" "--verbose" ]
...
}
```
to require verbose output during `idris` build phase.

View File

@ -10,7 +10,7 @@ stdenv.mkDerivation {
name = "..."; name = "...";
src = fetchurl { ... }; src = fetchurl { ... };
buildInputs = [ jdk ant ]; nativeBuildInputs = [ jdk ant ];
buildPhase = "ant"; buildPhase = "ant";
} }
@ -30,7 +30,8 @@ stdenv.mkDerivation {
<filename>foo.jar</filename> in its <filename>share/java</filename> <filename>foo.jar</filename> in its <filename>share/java</filename>
directory, and another package declares the attribute directory, and another package declares the attribute
<programlisting> <programlisting>
buildInputs = [ jdk libfoo ]; buildInputs = [ libfoo ];
nativeBuildInputs = [ jdk ];
</programlisting> </programlisting>
then <envar>CLASSPATH</envar> will be set to then <envar>CLASSPATH</envar> will be set to
<filename>/nix/store/...-libfoo/share/java/foo.jar</filename>. <filename>/nix/store/...-libfoo/share/java/foo.jar</filename>.
@ -46,7 +47,7 @@ buildInputs = [ jdk libfoo ];
script to run it using the OpenJRE. You can use script to run it using the OpenJRE. You can use
<literal>makeWrapper</literal> for this: <literal>makeWrapper</literal> for this:
<programlisting> <programlisting>
buildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper ];
installPhase = installPhase =
'' ''
@ -68,7 +69,7 @@ installPhase =
can be done in a generic fashion with the <literal>--set</literal> argument can be done in a generic fashion with the <literal>--set</literal> argument
of <literal>makeWrapper</literal>: of <literal>makeWrapper</literal>:
<programlisting> <programlisting>
--set JAVA_HOME ${jdk.home} --set JAVA_HOME ${jdk.home}
</programlisting> </programlisting>
</para> </para>
@ -76,7 +77,7 @@ installPhase =
It is possible to use a different Java compiler than <command>javac</command> It is possible to use a different Java compiler than <command>javac</command>
from the OpenJDK. For instance, to use the GNU Java Compiler: from the OpenJDK. For instance, to use the GNU Java Compiler:
<programlisting> <programlisting>
buildInputs = [ gcj ant ]; nativeBuildInputs = [ gcj ant ];
</programlisting> </programlisting>
Here, Ant will automatically use <command>gij</command> (the GNU Java Here, Ant will automatically use <command>gij</command> (the GNU Java
Runtime) instead of the OpenJRE. Runtime) instead of the OpenJRE.

View File

@ -29,7 +29,7 @@ fileSystem = buildLuaPackage {
maintainers = with maintainers; [ flosse ]; maintainers = with maintainers; [ flosse ];
}; };
}; };
</programlisting> </programlisting>
</para> </para>
<para> <para>

View File

@ -62,7 +62,7 @@ buildDunePackage rec {
maintainers = with stdenv.lib.maintainers; [ sternenseemann ]; maintainers = with stdenv.lib.maintainers; [ sternenseemann ];
}; };
} }
</programlisting> </programlisting>
<para> <para>
Here is a second example, this time using a source archive generated with Here is a second example, this time using a source archive generated with
@ -93,5 +93,5 @@ buildDunePackage rec {
maintainers = [ maintainers.eqyiel ]; maintainers = [ maintainers.eqyiel ];
}; };
} }
</programlisting> </programlisting>
</section> </section>

View File

@ -47,13 +47,13 @@ foo = import ../path/to/foo.nix {
in <filename>all-packages.nix</filename>. You can test building a Perl in <filename>all-packages.nix</filename>. You can test building a Perl
package as follows: package as follows:
<screen> <screen>
$ nix-build -A perlPackages.ClassC3 <prompt>$ </prompt>nix-build -A perlPackages.ClassC3
</screen> </screen>
<varname>buildPerlPackage</varname> adds <literal>perl-</literal> to the <varname>buildPerlPackage</varname> adds <literal>perl-</literal> to the
start of the name attribute, so the package above is actually called start of the name attribute, so the package above is actually called
<literal>perl-Class-C3-0.21</literal>. So to install it, you can say: <literal>perl-Class-C3-0.21</literal>. So to install it, you can say:
<screen> <screen>
$ nix-env -i perl-Class-C3 <prompt>$ </prompt>nix-env -i perl-Class-C3
</screen> </screen>
(Of course you can also install using the attribute name: <literal>nix-env -i (Of course you can also install using the attribute name: <literal>nix-env -i
-A perlPackages.ClassC3</literal>.) -A perlPackages.ClassC3</literal>.)
@ -75,7 +75,8 @@ $ nix-env -i perl-Class-C3
It adds the contents of the <envar>PERL5LIB</envar> environment variable It adds the contents of the <envar>PERL5LIB</envar> environment variable
to <literal>#! .../bin/perl</literal> line of Perl scripts as to <literal>#! .../bin/perl</literal> line of Perl scripts as
<literal>-I<replaceable>dir</replaceable></literal> flags. This ensures <literal>-I<replaceable>dir</replaceable></literal> flags. This ensures
that a script can find its dependencies. that a script can find its dependencies. (This can cause this shebang line
to become too long for Darwin to handle; see the note below.)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -137,6 +138,36 @@ ClassC3Componentised = buildPerlPackage rec {
</programlisting> </programlisting>
</para> </para>
<para>
On Darwin, if a script has too many
<literal>-I<replaceable>dir</replaceable></literal> flags in its first line
(its “shebang line”), it will not run. This can be worked around by calling
the <literal>shortenPerlShebang</literal> function from the
<literal>postInstall</literal> phase:
<programlisting>
{ stdenv, buildPerlPackage, fetchurl, shortenPerlShebang }:
ImageExifTool = buildPerlPackage {
pname = "Image-ExifTool";
version = "11.50";
src = fetchurl {
url = "https://www.sno.phy.queensu.ca/~phil/exiftool/Image-ExifTool-11.50.tar.gz";
sha256 = "0d8v48y94z8maxkmw1rv7v9m0jg2dc8xbp581njb6yhr7abwqdv3";
};
buildInputs = stdenv.lib.optional stdenv.isDarwin shortenPerlShebang;
postInstall = stdenv.lib.optional stdenv.isDarwin ''
shortenPerlShebang $out/bin/exiftool
'';
};
</programlisting>
This will remove the <literal>-I</literal> flags from the shebang line,
rewrite them in the <literal>use lib</literal> form, and put them on the next
line instead. This function can be given any number of Perl scripts as
arguments; it will modify them in-place.
</para>
<section xml:id="ssec-generation-from-CPAN"> <section xml:id="ssec-generation-from-CPAN">
<title>Generation from CPAN</title> <title>Generation from CPAN</title>
@ -148,7 +179,7 @@ ClassC3Componentised = buildPerlPackage rec {
</para> </para>
<screen> <screen>
$ nix-env -i nix-generate-from-cpan <prompt>$ </prompt>nix-env -i nix-generate-from-cpan
</screen> </screen>
<para> <para>
@ -156,7 +187,7 @@ $ nix-env -i nix-generate-from-cpan
unpacks the corresponding package, and prints a Nix expression on standard unpacks the corresponding package, and prints a Nix expression on standard
output. For example: output. For example:
<screen> <screen>
$ nix-generate-from-cpan XML::Simple <prompt>$ </prompt>nix-generate-from-cpan XML::Simple
XMLSimple = buildPerlPackage rec { XMLSimple = buildPerlPackage rec {
name = "XML-Simple-2.22"; name = "XML-Simple-2.22";
src = fetchurl { src = fetchurl {

View File

@ -603,6 +603,7 @@ All parameters from `stdenv.mkDerivation` function are still supported. The foll
* `preShellHook`: Hook to execute commands before `shellHook`. * `preShellHook`: Hook to execute commands before `shellHook`.
* `postShellHook`: Hook to execute commands after `shellHook`. * `postShellHook`: Hook to execute commands after `shellHook`.
* `removeBinByteCode ? true`: Remove bytecode from `/bin`. Bytecode is only created when the filenames end with `.py`. * `removeBinByteCode ? true`: Remove bytecode from `/bin`. Bytecode is only created when the filenames end with `.py`.
* `setupPyGlobalFlags ? []`: List of flags passed to `setup.py` command.
* `setupPyBuildFlags ? []`: List of flags passed to `setup.py build_ext` command. * `setupPyBuildFlags ? []`: List of flags passed to `setup.py build_ext` command.
The `stdenv.mkDerivation` function accepts various parameters for describing build inputs (see "Specifying dependencies"). The following are of special The `stdenv.mkDerivation` function accepts various parameters for describing build inputs (see "Specifying dependencies"). The following are of special
@ -636,7 +637,7 @@ with import <nixpkgs> {};
}; };
}); });
}; };
in pkgs.python3.override {inherit packageOverrides;}; in pkgs.python3.override {inherit packageOverrides; self = python;};
in python.withPackages(ps: [ps.blaze])).env in python.withPackages(ps: [ps.blaze])).env
``` ```

View File

@ -4,71 +4,182 @@
<title>Qt</title> <title>Qt</title>
<para> <para>
Qt is a comprehensive desktop and mobile application development toolkit for This section describes the differences between Nix expressions for Qt
C++. Legacy support is available for Qt 3 and Qt 4, but all current libraries and applications and Nix expressions for other C++ software. Some
development uses Qt 5. The Qt 5 packages in Nixpkgs are updated frequently to knowledge of the latter is assumed. There are primarily two problems which
take advantage of new features, but older versions are typically retained the Qt infrastructure is designed to address: ensuring consistent versioning
until their support window ends. The most important consideration in of all dependencies and finding dependencies at runtime.
packaging Qt-based software is ensuring that each package and all its
dependencies use the same version of Qt 5; this consideration motivates most
of the tools described below.
</para> </para>
<section xml:id="ssec-qt-libraries"> <example xml:id='qt-default-nix'>
<title>Packaging Libraries for Nixpkgs</title> <title>Nix expression for a Qt package (<filename>default.nix</filename>)</title>
<programlisting>
{ mkDerivation, lib, qtbase }: <co xml:id='qt-default-nix-co-1' />
mkDerivation { <co xml:id='qt-default-nix-co-2' />
pname = "myapp";
version = "1.0";
buildInputs = [ qtbase ]; <co xml:id='qt-default-nix-co-3' />
}
</programlisting>
</example>
<calloutlist>
<callout arearefs='qt-default-nix-co-1'>
<para>
Import <literal>mkDerivation</literal> and Qt (such as
<literal>qtbase</literal> modules directly. <emphasis>Do not</emphasis>
import Qt package sets; the Qt versions of dependencies may not be
coherent, causing build and runtime failures.
</para>
</callout>
<callout arearefs='qt-default-nix-co-2'>
<para>
Use <literal>mkDerivation</literal> instead of
<literal>stdenv.mkDerivation</literal>. <literal>mkDerivation</literal>
is a wrapper around <literal>stdenv.mkDerivation</literal> which
applies some Qt-specific settings.
This deriver accepts the same arguments as
<literal>stdenv.mkDerivation</literal>; refer to
<xref linkend='chap-stdenv' /> for details.
</para>
<para>
To use another deriver instead of
<literal>stdenv.mkDerivation</literal>, use
<literal>mkDerivationWith</literal>:
<programlisting>
mkDerivationWith myDeriver {
# ...
}
</programlisting>
If you cannot use <literal>mkDerivationWith</literal>, please refer to
<xref linkend='qt-runtime-dependencies' />.
</para>
</callout>
<callout arearefs='qt-default-nix-co-3'>
<para>
<literal>mkDerivation</literal> accepts the same arguments as
<literal>stdenv.mkDerivation</literal>, such as
<literal>buildInputs</literal>.
</para>
</callout>
</calloutlist>
<formalpara xml:id='qt-runtime-dependencies'>
<title>Locating runtime dependencies</title>
<para>
Qt applications need to be wrapped to find runtime dependencies. If you
cannot use <literal>mkDerivation</literal> or
<literal>mkDerivationWith</literal> above, include
<literal>wrapQtAppsHook</literal> in <literal>nativeBuildInputs</literal>:
<programlisting>
stdenv.mkDerivation {
# ...
nativeBuildInputs = [ wrapQtAppsHook ];
}
</programlisting>
</para>
</formalpara>
<para> <para>
Whenever possible, libraries that use Qt 5 should be built with each Entries added to <literal>qtWrapperArgs</literal> are used to modify the
available version. Packages providing libraries should be added to the wrappers created by <literal>wrapQtAppsHook</literal>. The entries are
top-level function <varname>mkLibsForQt5</varname>, which is used to build a passed as arguments to <xref linkend='fun-wrapProgram' />.
set of libraries for every Qt 5 version. A special <programlisting>
<varname>callPackage</varname> function is used in this scope to ensure that mkDerivation {
the entire dependency tree uses the same Qt 5 version. Import dependencies # ...
unqualified, i.e., <literal>qtbase</literal> not
<literal>qt5.qtbase</literal>. <emphasis>Do not</emphasis> import a package qtWrapperArgs = [ ''--prefix PATH : /path/to/bin'' ];
set such as <literal>qt5</literal> or <literal>libsForQt5</literal>. }
</programlisting>
</para> </para>
<para> <para>
If a library does not support a particular version of Qt 5, it is best to Set <literal>dontWrapQtApps</literal> to stop applications from being
mark it as broken by setting its <literal>meta.broken</literal> attribute. A wrapped automatically. It is required to wrap applications manually with
package may be marked broken for certain versions by testing the <literal>wrapQtApp</literal>, using the syntax of
<literal>qtbase.version</literal> attribute, which will always give the <xref linkend='fun-wrapProgram' />:
current Qt 5 version. <programlisting>
</para> mkDerivation {
</section> # ...
<section xml:id="ssec-qt-applications"> dontWrapQtApps = true;
<title>Packaging Applications for Nixpkgs</title> preFixup = ''
wrapQtApp "$out/bin/myapp" --prefix PATH : /path/to/bin
'';
}
</programlisting>
</para>
<note>
<para>
<literal>wrapQtAppsHook</literal> ignores files that are non-ELF executables.
This means that scripts won't be automatically wrapped so you'll need to manually
wrap them as previously mentioned. An example of when you'd always need to do this
is with Python applications that use PyQT.
</para>
</note>
<para> <para>
Call your application expression using Libraries are built with every available version of Qt. Use the <literal>meta.broken</literal>
<literal>libsForQt5.callPackage</literal> instead of attribute to disable the package for unsupported Qt versions:
<literal>callPackage</literal>. Import dependencies unqualified, i.e., <programlisting>
<literal>qtbase</literal> not <literal>qt5.qtbase</literal>. <emphasis>Do mkDerivation {
not</emphasis> import a package set such as <literal>qt5</literal> or # ...
<literal>libsForQt5</literal>.
# Disable this library with Qt &lt; 5.9.0
meta.broken = builtins.compareVersions qtbase.version "5.9.0" &lt; 0;
}
</programlisting>
</para> </para>
<formalpara>
<title>Adding a library to Nixpkgs</title>
<para> <para>
Qt 5 maintains strict backward compatibility, so it is generally best to Add a Qt library to <filename>all-packages.nix</filename> by adding it to the
build an application package against the latest version using the collection inside <literal>mkLibsForQt5</literal>. This ensures that the
<varname>libsForQt5</varname> library set. In case a package does not build library is built with every available version of Qt as needed.
with the latest Qt version, it is possible to pick a set pinned to a <example xml:id='qt-library-all-packages-nix'>
particular version, e.g. <varname>libsForQt55</varname> for Qt 5.5, if that <title>Adding a Qt library to <filename>all-packages.nix</filename></title>
is the latest version the package supports. If a package must be pinned to <programlisting>
an older Qt version, be sure to file a bug upstream; because Qt is strictly {
backwards-compatible, any incompatibility is by definition a bug in the # ...
application.
</para>
<para> mkLibsForQt5 = self: with self; {
When testing applications in Nixpkgs, it is a common practice to build the # ...
package with <literal>nix-build</literal> and run it using the created
symbolic link. This will not work with Qt applications, however, because mylib = callPackage ../path/to/mylib {};
they have many hard runtime requirements that can only be guaranteed if the };
package is actually installed. To test a Qt application, install it with
<literal>nix-env</literal> or run it inside <literal>nix-shell</literal>. # ...
}
</programlisting>
</example>
</para> </para>
</section> </formalpara>
<formalpara>
<title>Adding an application to Nixpkgs</title>
<para>
Add a Qt application to <filename>all-packages.nix</filename> using
<literal>libsForQt5.callPackage</literal> instead of the usual
<literal>callPackage</literal>. The former ensures that all dependencies
are built with the same version of Qt.
<example xml:id='qt-application-all-packages-nix'>
<title>Adding a Qt application to <filename>all-packages.nix</filename></title>
<programlisting>
{
# ...
myapp = libsForQt5.callPackage ../path/to/myapp/ {};
# ...
}
</programlisting>
</example>
</para>
</formalpara>
</section> </section>

View File

@ -26,7 +26,7 @@
texlive.combine { texlive.combine {
inherit (texlive) scheme-small collection-langkorean algorithms cm-super; inherit (texlive) scheme-small collection-langkorean algorithms cm-super;
} }
</programlisting> </programlisting>
There are all the schemes, collections and a few thousand packages, as There are all the schemes, collections and a few thousand packages, as
defined upstream (perhaps with tiny differences). defined upstream (perhaps with tiny differences).
</para> </para>
@ -44,7 +44,7 @@ texlive.combine {
# elem tlType [ "run" "bin" "doc" "source" ] # elem tlType [ "run" "bin" "doc" "source" ]
# there are also other attributes: version, name # there are also other attributes: version, name
} }
</programlisting> </programlisting>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>

View File

@ -21,7 +21,7 @@ At the moment we support three different methods for managing plugins:
Adding custom .vimrc lines can be done using the following code: Adding custom .vimrc lines can be done using the following code:
``` ```nix
vim_configurable.customize { vim_configurable.customize {
# `name` specifies the name of the executable and package # `name` specifies the name of the executable and package
name = "vim-with-plugins"; name = "vim-with-plugins";
@ -32,11 +32,11 @@ vim_configurable.customize {
} }
``` ```
This configuration is used when vim is invoked with the command specified as name, in this case `vim-with-plugins`. This configuration is used when Vim is invoked with the command specified as name, in this case `vim-with-plugins`.
For Neovim the `configure` argument can be overridden to achieve the same: For Neovim the `configure` argument can be overridden to achieve the same:
``` ```nix
neovim.override { neovim.override {
configure = { configure = {
customRC = '' customRC = ''
@ -46,10 +46,10 @@ neovim.override {
} }
``` ```
If you want to use `neovim-qt` as a graphical editor, you can configure it by overriding neovim in an overlay If you want to use `neovim-qt` as a graphical editor, you can configure it by overriding Neovim in an overlay
or passing it an overridden neovimn: or passing it an overridden Neovimn:
``` ```nix
neovim-qt.override { neovim-qt.override {
neovim = neovim.override { neovim = neovim.override {
configure = { configure = {
@ -63,15 +63,15 @@ neovim-qt.override {
## Managing plugins with Vim packages ## Managing plugins with Vim packages
To store you plugins in Vim packages (the native vim plugin manager, see `:help packages`) the following example can be used: To store you plugins in Vim packages (the native Vim plugin manager, see `:help packages`) the following example can be used:
``` ```nix
vim_configurable.customize { vim_configurable.customize {
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; { vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
# loaded on launch # loaded on launch
start = [ youcompleteme fugitive ]; start = [ youcompleteme fugitive ];
# manually loadable by calling `:packadd $plugin-name` # manually loadable by calling `:packadd $plugin-name`
# however, if a vim plugin has a dependency that is not explicitly listed in # however, if a Vim plugin has a dependency that is not explicitly listed in
# opt that dependency will always be added to start to avoid confusion. # opt that dependency will always be added to start to avoid confusion.
opt = [ phpCompletion elm-vim ]; opt = [ phpCompletion elm-vim ];
# To automatically load a plugin when opening a filetype, add vimrc lines like: # To automatically load a plugin when opening a filetype, add vimrc lines like:
@ -83,7 +83,7 @@ vim_configurable.customize {
`myVimPackage` is an arbitrary name for the generated package. You can choose any name you like. `myVimPackage` is an arbitrary name for the generated package. You can choose any name you like.
For Neovim the syntax is: For Neovim the syntax is:
``` ```nix
neovim.override { neovim.override {
configure = { configure = {
customRC = '' customRC = ''
@ -92,7 +92,7 @@ neovim.override {
packages.myVimPackage = with pkgs.vimPlugins; { packages.myVimPackage = with pkgs.vimPlugins; {
# see examples below how to use custom packages # see examples below how to use custom packages
start = [ ]; start = [ ];
# If a vim plugin has a dependency that is not explicitly listed in # If a Vim plugin has a dependency that is not explicitly listed in
# opt that dependency will always be added to start to avoid confusion. # opt that dependency will always be added to start to avoid confusion.
opt = [ ]; opt = [ ];
}; };
@ -102,7 +102,7 @@ neovim.override {
The resulting package can be added to `packageOverrides` in `~/.nixpkgs/config.nix` to make it installable: The resulting package can be added to `packageOverrides` in `~/.nixpkgs/config.nix` to make it installable:
``` ```nix
{ {
packageOverrides = pkgs: with pkgs; { packageOverrides = pkgs: with pkgs; {
myVim = vim_configurable.customize { myVim = vim_configurable.customize {
@ -126,7 +126,7 @@ After that you can install your special grafted `myVim` or `myNeovim` packages.
To use [vim-plug](https://github.com/junegunn/vim-plug) to manage your Vim To use [vim-plug](https://github.com/junegunn/vim-plug) to manage your Vim
plugins the following example can be used: plugins the following example can be used:
``` ```nix
vim_configurable.customize { vim_configurable.customize {
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; { vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
# loaded on launch # loaded on launch
@ -137,7 +137,7 @@ vim_configurable.customize {
For Neovim the syntax is: For Neovim the syntax is:
``` ```nix
neovim.override { neovim.override {
configure = { configure = {
customRC = '' customRC = ''
@ -161,38 +161,49 @@ assuming that "using latest version" is ok most of the time.
First create a vim-scripts file having one plugin name per line. Example: First create a vim-scripts file having one plugin name per line. Example:
"tlib" ```
{'name': 'vim-addon-sql'} "tlib"
{'filetype_regex': '\%(vim)$', 'names': ['reload', 'vim-dev-plugin']} {'name': 'vim-addon-sql'}
{'filetype_regex': '\%(vim)$', 'names': ['reload', 'vim-dev-plugin']}
```
Such vim-scripts file can be read by VAM as well like this: Such vim-scripts file can be read by VAM as well like this:
call vam#Scripts(expand('~/.vim-scripts'), {}) ```vim
call vam#Scripts(expand('~/.vim-scripts'), {})
```
Create a default.nix file: Create a default.nix file:
{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }: ```nix
nixpkgs.vim_configurable.customize { name = "vim"; vimrcConfig.vam.pluginDictionaries = [ "vim-addon-vim2nix" ]; } { nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
nixpkgs.vim_configurable.customize { name = "vim"; vimrcConfig.vam.pluginDictionaries = [ "vim-addon-vim2nix" ]; }
```
Create a generate.vim file: Create a generate.vim file:
ActivateAddons vim-addon-vim2nix ```vim
let vim_scripts = "vim-scripts" ActivateAddons vim-addon-vim2nix
call nix#ExportPluginsForNix({ let vim_scripts = "vim-scripts"
\ 'path_to_nixpkgs': eval('{"'.substitute(substitute(substitute($NIX_PATH, ':', ',', 'g'), '=',':', 'g'), '\([:,]\)', '"\1"',"g").'"}')["nixpkgs"], call nix#ExportPluginsForNix({
\ 'cache_file': '/tmp/vim2nix-cache', \ 'path_to_nixpkgs': eval('{"'.substitute(substitute(substitute($NIX_PATH, ':', ',', 'g'), '=',':', 'g'), '\([:,]\)', '"\1"',"g").'"}')["nixpkgs"],
\ 'try_catch': 0, \ 'cache_file': '/tmp/vim2nix-cache',
\ 'plugin_dictionaries': ["vim-addon-manager"]+map(readfile(vim_scripts), 'eval(v:val)') \ 'try_catch': 0,
\ }) \ 'plugin_dictionaries': ["vim-addon-manager"]+map(readfile(vim_scripts), 'eval(v:val)')
\ })
```
Then run Then run
nix-shell -p vimUtils.vim_with_vim2nix --command "vim -c 'source generate.vim'" ```bash
nix-shell -p vimUtils.vim_with_vim2nix --command "vim -c 'source generate.vim'"
```
You should get a Vim buffer with the nix derivations (output1) and vam.pluginDictionaries (output2). You should get a Vim buffer with the nix derivations (output1) and vam.pluginDictionaries (output2).
You can add your vim to your system's configuration file like this and start it by "vim-my": You can add your Vim to your system's configuration file like this and start it by "vim-my":
my-vim = ```
my-vim =
let plugins = let inherit (vimUtils) buildVimPluginFrom2Nix; in { let plugins = let inherit (vimUtils) buildVimPluginFrom2Nix; in {
copy paste output1 here copy paste output1 here
}; in vim_configurable.customize { }; in vim_configurable.customize {
@ -207,11 +218,12 @@ You can add your vim to your system's configuration file like this and start it
# vimrcConfig.pathogen.knownPlugins = plugins; # plugins # vimrcConfig.pathogen.knownPlugins = plugins; # plugins
# vimrcConfig.pathogen.pluginNames = ["tlib"]; # vimrcConfig.pathogen.pluginNames = ["tlib"];
}; };
```
Sample output1: Sample output1:
"reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation ```
"reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
name = "reload"; name = "reload";
src = fetchgit { src = fetchgit {
url = "git://github.com/xolox/vim-reload"; url = "git://github.com/xolox/vim-reload";
@ -220,30 +232,41 @@ Sample output1:
}; };
dependencies = ["nim-misc"]; dependencies = ["nim-misc"];
}; };
[...] [...]
```
Sample output2: Sample output2:
[ ```nix
[
''vim-addon-manager'' ''vim-addon-manager''
''tlib'' ''tlib''
{ "name" = ''vim-addon-sql''; } { "name" = ''vim-addon-sql''; }
{ "filetype_regex" = ''\%(vim)$$''; "names" = [ ''reload'' ''vim-dev-plugin'' ]; } { "filetype_regex" = ''\%(vim)$$''; "names" = [ ''reload'' ''vim-dev-plugin'' ]; }
] ]
```
## Adding new plugins to nixpkgs ## Adding new plugins to nixpkgs
In `pkgs/misc/vim-plugins/vim-plugin-names` we store the plugin names Nix expressions for Vim plugins are stored in [pkgs/misc/vim-plugins](/pkgs/misc/vim-plugins). For the vast majority of plugins, Nix expressions are automatically generated by running [`./update.py`](/pkgs/misc/vim-plugins/update.py). This creates a [generated.nix](/pkgs/misc/vim-plugins/generated.nix) file based on the plugins listed in [vim-plugin-names](/pkgs/misc/vim-plugins/vim-plugin-names). Plugins are listed in alphabetical order in `vim-plugin-names` using the format `[github username]/[repository]`. For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
for all vim plugins we automatically generate plugins for.
The format of this file `github username/github repository`: Some plugins require overrides in order to function properly. Overrides are placed in [overrides.nix](/pkgs/misc/vim-plugins/overrides.nix). Overrides are most often required when a plugin requires some dependencies, or extra steps are required during the build process. For example `deoplete-fish` requires both `deoplete-nvim` and `vim-fish`, and so the following override was added:
For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
After adding your plugin to this file run the `./update.py` in the same folder. ```
This will updated a file called `generated.nix` and make your plugin accessible in the deoplete-fish = super.deoplete-fish.overrideAttrs(old: {
`vimPlugins` attribute set (`vimPlugins.nerdtree` in our example). dependencies = with super; [ deoplete-nvim vim-fish ];
If additional steps to the build process of the plugin are required, add an });
override to the `pkgs/misc/vim-plugins/default.nix` in the same directory. ```
Sometimes plugins require an override that must be changed when the plugin is updated. This can cause issues when Vim plugins are auto-updated but the associated override isn't updated. For these plugins, the override should be written so that it specifies all information required to install the plugin, and running `./update.py` doesn't change the derivation for the plugin. Manually updating the override is required to update these types of plugins. An example of such a plugin is `LanguageClient-neovim`.
To add a new plugin:
1. run `./update.py` and create a commit named "vimPlugins: Update",
2. add the new plugin to [vim-plugin-names](/pkgs/misc/vim-plugins/vim-plugin-names) and add overrides if required to [overrides.nix](/pkgs/misc/vim-plugins/overrides.nix),
3. run `./update.py` again and create a commit named "vimPlugins.[name]: init at [version]" (where `name` and `version` can be found in [generated.nix](/pkgs/misc/vim-plugins/generated.nix)), and
4. create a pull request.
## Important repositories ## Important repositories
@ -252,4 +275,3 @@ override to the `pkgs/misc/vim-plugins/default.nix` in the same directory.
- [vim2nix](https://github.com/MarcWeber/vim-addon-vim2nix) which generates the - [vim2nix](https://github.com/MarcWeber/vim-addon-vim2nix) which generates the
.nix code .nix code

View File

@ -30,7 +30,7 @@ meta = with stdenv.lib; {
The meta-attributes of a package can be queried from the command-line using The meta-attributes of a package can be queried from the command-line using
<command>nix-env</command>: <command>nix-env</command>:
<screen> <screen>
$ nix-env -qa hello --json <prompt>$ </prompt>nix-env -qa hello --json
{ {
"hello": { "hello": {
"meta": { "meta": {
@ -70,7 +70,7 @@ $ nix-env -qa hello --json
<command>nix-env</command> knows about the <varname>description</varname> <command>nix-env</command> knows about the <varname>description</varname>
field specifically: field specifically:
<screen> <screen>
$ nix-env -qa hello --description <prompt>$ </prompt>nix-env -qa hello --description
hello-2.3 A program that produces a familiar, friendly greeting hello-2.3 A program that produces a familiar, friendly greeting
</screen> </screen>
</para> </para>
@ -272,11 +272,9 @@ meta.platforms = stdenv.lib.platforms.linux;
<para> <para>
This attribute is special in that it is not actually under the This attribute is special in that it is not actually under the
<literal>meta</literal> attribute set but rather under the <literal>meta</literal> attribute set but rather under the
<literal>passthru</literal> attribute set. This is due to a current <literal>passthru</literal> attribute set. This is due to how
limitation of Nix, and will change as soon as Nixpkgs will be able to <literal>meta</literal> attributes work, and the fact that they
depend on a new enough version of Nix. See are supposed to contain only metadata, not derivations.
<link xlink:href="https://github.com/NixOS/nix/issues/2532">the relevant
issue</link> for more details.
</para> </para>
</warning> </warning>
<para> <para>

View File

@ -92,9 +92,9 @@ modulesTree = [kernel]
<para> <para>
If needed you can also run <literal>make menuconfig</literal>: If needed you can also run <literal>make menuconfig</literal>:
<screen> <screen>
$ nix-env -i ncurses <prompt>$ </prompt>nix-env -i ncurses
$ export NIX_CFLAGS_LINK=-lncurses <prompt>$ </prompt>export NIX_CFLAGS_LINK=-lncurses
$ make menuconfig ARCH=<replaceable>arch</replaceable></screen> <prompt>$ </prompt>make menuconfig ARCH=<replaceable>arch</replaceable></screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -142,8 +142,8 @@ $ make menuconfig ARCH=<replaceable>arch</replaceable></screen>
<para> <para>
The generator is invoked as follows: The generator is invoked as follows:
<screen> <screen>
$ cd pkgs/servers/x11/xorg <prompt>$ </prompt>cd pkgs/servers/x11/xorg
$ cat tarballs-7.5.list extra.list old.list \ <prompt>$ </prompt>cat tarballs-7.5.list extra.list old.list \
| perl ./generate-expr-from-tarballs.pl | perl ./generate-expr-from-tarballs.pl
</screen> </screen>
For each of the tarballs in the <filename>.list</filename> files, the script For each of the tarballs in the <filename>.list</filename> files, the script
@ -160,8 +160,8 @@ $ cat tarballs-7.5.list extra.list old.list \
A file like <filename>tarballs-7.5.list</filename> contains all tarballs in A file like <filename>tarballs-7.5.list</filename> contains all tarballs in
a X.org release. It can be generated like this: a X.org release. It can be generated like this:
<screen> <screen>
$ export i="mirror://xorg/X11R7.4/src/everything/" <prompt>$ </prompt>export i="mirror://xorg/X11R7.4/src/everything/"
$ cat $(PRINT_PATH=1 nix-prefetch-url $i | tail -n 1) \ <prompt>$ </prompt>cat $(PRINT_PATH=1 nix-prefetch-url $i | tail -n 1) \
| perl -e 'while (&lt;>) { if (/(href|HREF)="([^"]*.bz2)"/) { print "$ENV{'i'}$2\n"; }; }' \ | perl -e 'while (&lt;>) { if (/(href|HREF)="([^"]*.bz2)"/) { print "$ENV{'i'}$2\n"; }; }' \
| sort > tarballs-7.4.list | sort > tarballs-7.4.list
</screen> </screen>
@ -210,7 +210,7 @@ $ cat $(PRINT_PATH=1 nix-prefetch-url $i | tail -n 1) \
often available. It is possible to list available Eclipse packages by often available. It is possible to list available Eclipse packages by
issuing the command: issuing the command:
<screen> <screen>
$ nix-env -f '&lt;nixpkgs&gt;' -qaP -A eclipses --description <prompt>$ </prompt>nix-env -f '&lt;nixpkgs&gt;' -qaP -A eclipses --description
</screen> </screen>
Once an Eclipse variant is installed it can be run using the Once an Eclipse variant is installed it can be run using the
<command>eclipse</command> command, as expected. From within Eclipse it is <command>eclipse</command> command, as expected. From within Eclipse it is
@ -250,7 +250,7 @@ packageOverrides = pkgs: {
available for installation using <varname>eclipseWithPlugins</varname> by available for installation using <varname>eclipseWithPlugins</varname> by
running running
<screen> <screen>
$ nix-env -f '&lt;nixpkgs&gt;' -qaP -A eclipses.plugins --description <prompt>$ </prompt>nix-env -f '&lt;nixpkgs&gt;' -qaP -A eclipses.plugins --description
</screen> </screen>
</para> </para>
@ -325,6 +325,18 @@ packageOverrides = pkgs: {
elm2nix</link>. elm2nix</link>.
</para> </para>
</section> </section>
<section xml:id="sec-kakoune">
<title>Kakoune</title>
<para>
Kakoune can be built to autoload plugins:
<programlisting>(kakoune.override {
configure = {
plugins = with pkgs.kakounePlugins; [ parinfer-rust ];
};
})</programlisting>
</para>
</section>
<section xml:id="sec-shell-helpers"> <section xml:id="sec-shell-helpers">
<title>Interactive shell helpers</title> <title>Interactive shell helpers</title>

View File

@ -409,11 +409,19 @@ overrides = self: super: rec {
</section> </section>
<section xml:id="sec-citrix"> <section xml:id="sec-citrix">
<title>Citrix Receiver</title> <title>Citrix Receiver &amp; Citrix Workspace App</title>
<para> <para>
The <link xlink:href="https://www.citrix.com/products/receiver/">Citrix <note>
Receiver</link> is a remote desktop viewer which provides access to <para>
Please note that the <literal>citrix_receiver</literal> package has been deprecated since its
development was <link xlink:href="https://docs.citrix.com/en-us/citrix-workspace-app.html">discontinued by upstream</link>
and will be replaced by <link xlink:href="https://www.citrix.com/products/workspace-app/">the citrix workspace app</link>.
</para>
</note>
<link xlink:href="https://www.citrix.com/products/receiver/">Citrix Receiver</link> and
<link xlink:href="https://www.citrix.com/products/workspace-app/">Citrix Workspace App</link>
are a remote desktop viewers which provide access to
<link xlink:href="https://www.citrix.com/products/xenapp-xendesktop/">XenDesktop</link> <link xlink:href="https://www.citrix.com/products/xenapp-xendesktop/">XenDesktop</link>
installations. installations.
</para> </para>
@ -423,30 +431,35 @@ overrides = self: super: rec {
<para> <para>
The tarball archive needs to be downloaded manually as the license The tarball archive needs to be downloaded manually as the license
agreements of the vendor need to be accepted first. This is available at agreements of the vendor for
the <link xlink:href="https://www.citrix.com/downloads/citrix-receiver/">Citrix Receiver</link>
<link xlink:href="https://www.citrix.com/downloads/citrix-receiver/">download or <link xlink:href="https://www.citrix.de/downloads/workspace-app/linux/workspace-app-for-linux-latest.html">Citrix Workspace</link>
page at citrix.com</link>. Then run <literal>nix-prefetch-url need to be accepted first.
file://$PWD/linuxx64-$version.tar.gz</literal>. With the archive available Then run <command>nix-prefetch-url file://$PWD/linuxx64-$version.tar.gz</command>.
With the archive available
in the store the package can be built and installed with Nix. in the store the package can be built and installed with Nix.
</para> </para>
<warning>
<title>Caution with <command>nix-shell</command> installs</title>
<para> <para>
<emphasis>Note: it's recommended to install <literal>Citrix It's recommended to install <literal>Citrix Receiver</literal>
Receiver</literal> using <literal>nix-env -i</literal> or globally to and/or <literal>Citrix Workspace</literal> using
<literal>nix-env -i</literal> or globally to
ensure that the <literal>.desktop</literal> files are installed properly ensure that the <literal>.desktop</literal> files are installed properly
into <literal>$XDG_CONFIG_DIRS</literal>. Otherwise it won't be possible to into <literal>$XDG_CONFIG_DIRS</literal>. Otherwise it won't be possible to
open <literal>.ica</literal> files automatically from the browser to start open <literal>.ica</literal> files automatically from the browser to start
a Citrix connection.</emphasis> a Citrix connection.
</para> </para>
</warning>
</section> </section>
<section xml:id="sec-citrix-custom-certs"> <section xml:id="sec-citrix-custom-certs">
<title>Custom certificates</title> <title>Custom certificates</title>
<para> <para>
The <literal>Citrix Receiver</literal> in <literal>nixpkgs</literal> trusts The <literal>Citrix Receiver</literal> and <literal>Citrix Workspace App</literal>
several certificates in <literal>nixpkgs</literal> trust several certificates
<link xlink:href="https://curl.haxx.se/docs/caextract.html">from the <link xlink:href="https://curl.haxx.se/docs/caextract.html">from the
Mozilla database</link> by default. However several companies using Citrix Mozilla database</link> by default. However several companies using Citrix
might require their own corporate certificate. On distros with imperative might require their own corporate certificate. On distros with imperative
@ -459,7 +472,7 @@ overrides = self: super: rec {
<programlisting> <programlisting>
<![CDATA[with import <nixpkgs> { config.allowUnfree = true; }; <![CDATA[with import <nixpkgs> { config.allowUnfree = true; };
let extraCerts = [ ./custom-cert-1.pem ./custom-cert-2.pem /* ... */ ]; in let extraCerts = [ ./custom-cert-1.pem ./custom-cert-2.pem /* ... */ ]; in
citrix_receiver.override { citrix_workspace.override { # the same applies for `citrix_receiver` if used.
inherit extraCerts; inherit extraCerts;
}]]> }]]>
</programlisting> </programlisting>

View File

@ -20,14 +20,14 @@
scripts. scripts.
</para> </para>
<programlisting> <programlisting>
stdenv.mkDerivation { stdenv.mkDerivation {
name = "libfoo-1.2.3"; name = "libfoo-1.2.3";
# ... # ...
buildPhase = '' buildPhase = ''
$CC -o hello hello.c $CC -o hello hello.c
''; '';
} }
</programlisting> </programlisting>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
@ -39,12 +39,12 @@
<function>fixupPhase</function>. <function>fixupPhase</function>.
</para> </para>
<programlisting> <programlisting>
stdenv.mkDerivation { stdenv.mkDerivation {
name = "libfoo-1.2.3"; name = "libfoo-1.2.3";
# ... # ...
makeFlags = stdenv.lib.optional stdenv.isDarwin "LDFLAGS=-Wl,-install_name,$(out)/lib/libfoo.dylib"; makeFlags = stdenv.lib.optional stdenv.isDarwin "LDFLAGS=-Wl,-install_name,$(out)/lib/libfoo.dylib";
} }
</programlisting> </programlisting>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
@ -62,19 +62,19 @@
<manvolnum>1</manvolnum></citerefentry> manpage. <manvolnum>1</manvolnum></citerefentry> manpage.
</para> </para>
<programlisting> <programlisting>
dyld: Library not loaded: /nix/store/7hnmbscpayxzxrixrgxvvlifzlxdsdir-jq-1.5-lib/lib/libjq.1.dylib dyld: Library not loaded: /nix/store/7hnmbscpayxzxrixrgxvvlifzlxdsdir-jq-1.5-lib/lib/libjq.1.dylib
Referenced from: /private/tmp/nix-build-jq-1.5.drv-0/jq-1.5/tests/../jq Referenced from: /private/tmp/nix-build-jq-1.5.drv-0/jq-1.5/tests/../jq
Reason: image not found Reason: image not found
./tests/jqtest: line 5: 75779 Abort trap: 6 ./tests/jqtest: line 5: 75779 Abort trap: 6
</programlisting> </programlisting>
<programlisting> <programlisting>
stdenv.mkDerivation { stdenv.mkDerivation {
name = "libfoo-1.2.3"; name = "libfoo-1.2.3";
# ... # ...
doInstallCheck = true; doInstallCheck = true;
installCheckTarget = "check"; installCheckTarget = "check";
} }
</programlisting> </programlisting>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
@ -85,15 +85,15 @@
on xcode. on xcode.
</para> </para>
<programlisting> <programlisting>
stdenv.mkDerivation { stdenv.mkDerivation {
name = "libfoo-1.2.3"; name = "libfoo-1.2.3";
# ... # ...
prePatch = '' prePatch = ''
substituteInPlace Makefile \ substituteInPlace Makefile \
--replace '/usr/bin/xcrun clang' clang --replace '/usr/bin/xcrun clang' clang
''; '';
} }
</programlisting> </programlisting>
<para> <para>
The package <literal>xcbuild</literal> can be used to build projects that The package <literal>xcbuild</literal> can be used to build projects that
really depend on Xcode. However, this replacement is not 100% compatible really depend on Xcode. However, this replacement is not 100% compatible

View File

@ -9,8 +9,8 @@
<para> <para>
Checkout the Nixpkgs source tree: Checkout the Nixpkgs source tree:
<screen> <screen>
$ git clone https://github.com/NixOS/nixpkgs <prompt>$ </prompt>git clone https://github.com/NixOS/nixpkgs
$ cd nixpkgs</screen> <prompt>$ </prompt>cd nixpkgs</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -23,7 +23,7 @@ $ cd nixpkgs</screen>
See <xref linkend="sec-organisation" /> for some hints on the tree See <xref linkend="sec-organisation" /> for some hints on the tree
organisation. Create a directory for your package, e.g. organisation. Create a directory for your package, e.g.
<screen> <screen>
$ mkdir pkgs/development/libraries/libfoo</screen> <prompt>$ </prompt>mkdir pkgs/development/libraries/libfoo</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -34,8 +34,8 @@ $ mkdir pkgs/development/libraries/libfoo</screen>
as arguments, and returns a build of the package in the Nix store. The as arguments, and returns a build of the package in the Nix store. The
expression should usually be called <filename>default.nix</filename>. expression should usually be called <filename>default.nix</filename>.
<screen> <screen>
$ emacs pkgs/development/libraries/libfoo/default.nix <prompt>$ </prompt>emacs pkgs/development/libraries/libfoo/default.nix
$ git add pkgs/development/libraries/libfoo/default.nix</screen> <prompt>$ </prompt>git add pkgs/development/libraries/libfoo/default.nix</screen>
</para> </para>
<para> <para>
You can have a look at the existing Nix expressions under You can have a look at the existing Nix expressions under
@ -180,7 +180,7 @@ $ git add pkgs/development/libraries/libfoo/default.nix</screen>
with some descriptive name for the variable, e.g. with some descriptive name for the variable, e.g.
<varname>libfoo</varname>. <varname>libfoo</varname>.
<screen> <screen>
$ emacs pkgs/top-level/all-packages.nix</screen> <prompt>$ </prompt>emacs pkgs/top-level/all-packages.nix</screen>
</para> </para>
<para> <para>
The attributes in that file are sorted by category (like “Development / The attributes in that file are sorted by category (like “Development /
@ -193,7 +193,7 @@ $ emacs pkgs/top-level/all-packages.nix</screen>
To test whether the package builds, run the following command from the To test whether the package builds, run the following command from the
root of the nixpkgs source tree: root of the nixpkgs source tree:
<screen> <screen>
$ nix-build -A libfoo</screen> <prompt>$ </prompt>nix-build -A libfoo</screen>
where <varname>libfoo</varname> should be the variable name defined in the where <varname>libfoo</varname> should be the variable name defined in the
previous step. You may want to add the flag <option>-K</option> to keep previous step. You may want to add the flag <option>-K</option> to keep
the temporary build directory in case something fails. If the build the temporary build directory in case something fails. If the build
@ -205,13 +205,17 @@ $ nix-build -A libfoo</screen>
<para> <para>
If you want to install the package into your profile (optional), do If you want to install the package into your profile (optional), do
<screen> <screen>
$ nix-env -f . -iA libfoo</screen> <prompt>$ </prompt>nix-env -f . -iA libfoo</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Optionally commit the new package and open a pull request, or send a patch Optionally commit the new package and open a pull request <link
to <literal>https://groups.google.com/forum/#!forum/nix-devel</literal>. xlink:href="https://github.com/NixOS/nixpkgs/pulls">to nixpkgs</link>, or
use <link
xlink:href="https://discourse.nixos.org/t/about-the-patches-category/477">
the Patches category</link> on Discourse for sending a patch without a
GitHub account.
</para> </para>
</listitem> </listitem>
</orderedlist> </orderedlist>

View File

@ -153,11 +153,11 @@
nixpkgs-unstable for easier review by running the following commands nixpkgs-unstable for easier review by running the following commands
from a nixpkgs clone. from a nixpkgs clone.
<screen> <screen>
$ git remote add channels https://github.com/NixOS/nixpkgs-channels.git <co <prompt>$ </prompt>git remote add channels https://github.com/NixOS/nixpkgs-channels.git <co
xml:id='reviewing-rebase-1' /> xml:id='reviewing-rebase-1' />
$ git fetch channels nixos-unstable <co xml:id='reviewing-rebase-2' /> <prompt>$ </prompt>git fetch channels nixos-unstable <co xml:id='reviewing-rebase-2' />
$ git fetch origin pull/PRNUMBER/head <co xml:id='reviewing-rebase-3' /> <prompt>$ </prompt>git fetch origin pull/PRNUMBER/head <co xml:id='reviewing-rebase-3' />
$ git rebase --onto nixos-unstable BASEBRANCH FETCH_HEAD <co <prompt>$ </prompt>git rebase --onto nixos-unstable BASEBRANCH FETCH_HEAD <co
xml:id='reviewing-rebase-4' /> xml:id='reviewing-rebase-4' />
</screen> </screen>
<calloutlist> <calloutlist>
@ -197,7 +197,7 @@ $ git rebase --onto nixos-unstable BASEBRANCH FETCH_HEAD <co
request url. request url.
</para> </para>
<screen> <screen>
$ nix-shell -p nix-review --run "nix-review pr PRNUMBER" <prompt>$ </prompt>nix-shell -p nix-review --run "nix-review pr PRNUMBER"
</screen> </screen>
</listitem> </listitem>
</itemizedlist> </itemizedlist>

View File

@ -31,9 +31,28 @@ stdenv.mkDerivation {
separate Nix expression from <filename>pkgs/all-packages.nix</filename>, you separate Nix expression from <filename>pkgs/all-packages.nix</filename>, you
need to pass it as a function argument.) Specifying a need to pass it as a function argument.) Specifying a
<varname>name</varname> and a <varname>src</varname> is the absolute minimum <varname>name</varname> and a <varname>src</varname> is the absolute minimum
you need to do. Many packages have dependencies that are not provided in the Nix requires. For convenience, you can also use <varname>pname</varname> and
standard environment. Its usually sufficient to specify those <varname>version</varname> attributes and <literal>mkDerivation</literal>
dependencies in the <varname>buildInputs</varname> attribute: will automatically set <varname>name</varname> to
<literal>"${pname}-${version}"</literal> by default. Since
<link xlink:href="https://github.com/NixOS/rfcs/pull/35">RFC 0035</link>,
this is preferred for packages in Nixpkgs, as it allows us to reuse the
version easily:
<programlisting>
stdenv.mkDerivation rec {
pname = "libfoo";
version = "1.2.3";
src = fetchurl {
url = "http://example.org/libfoo-source-${version}.tar.bz2";
sha256 = "0x2g1jqygyr5wiwg4ma1nd7w4ydpy82z9gkcv8vh2v8dn3y58v5m";
};
}</programlisting>
</para>
<para>
Many packages have dependencies that are not provided in the standard
environment. Its usually sufficient to specify those dependencies in the
<varname>buildInputs</varname> attribute:
<programlisting> <programlisting>
stdenv.mkDerivation { stdenv.mkDerivation {
name = "libfoo-1.2.3"; name = "libfoo-1.2.3";
@ -324,7 +343,7 @@ let f(h, t, i) = i + (if i &lt;= 0 then h else t - 1)
let f(h, h + 1, i) = i + (if i &lt;= 0 then h else (h + 1) - 1) let f(h, h + 1, i) = i + (if i &lt;= 0 then h else (h + 1) - 1)
let f(h, h + 1, i) = i + (if i &lt;= 0 then h else h) let f(h, h + 1, i) = i + (if i &lt;= 0 then h else h)
let f(h, h + 1, i) = i + h let f(h, h + 1, i) = i + h
</programlisting> </programlisting>
This is where "sum-like" comes in from above: We can just sum all of the This is where "sum-like" comes in from above: We can just sum all of the
host offsets to get the host offset of the transitive dependency. The target host offsets to get the host offset of the transitive dependency. The target
offset is the transitive dependency is simply the host offset + 1, just as offset is the transitive dependency is simply the host offset + 1, just as
@ -767,7 +786,7 @@ passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ]
set, the default value is used, which is <literal>$prePhases set, the default value is used, which is <literal>$prePhases
unpackPhase patchPhase $preConfigurePhases configurePhase unpackPhase patchPhase $preConfigurePhases configurePhase
$preBuildPhases buildPhase checkPhase $preInstallPhases installPhase $preBuildPhases buildPhase checkPhase $preInstallPhases installPhase
fixupPhase $preDistPhases distPhase $postPhases</literal>. fixupPhase installCheckPhase $preDistPhases distPhase $postPhases</literal>.
</para> </para>
<para> <para>
Usually, if you just want to add a few phases, its more convenient Usually, if you just want to add a few phases, its more convenient
@ -968,6 +987,16 @@ passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ]
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<varname>dontUnpack</varname>
</term>
<listitem>
<para>
Set to true to skip the unpack phase.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<varname>dontMakeSourcesWritable</varname> <varname>dontMakeSourcesWritable</varname>
@ -1090,6 +1119,16 @@ passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ]
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<varname>dontConfigure</varname>
</term>
<listitem>
<para>
Set to true to skip the configure phase.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<varname>configureFlagsArray</varname> <varname>configureFlagsArray</varname>
@ -1560,6 +1599,16 @@ installTargets = "install-bin install-doc";</programlisting>
<variablelist> <variablelist>
<title>Variables controlling the fixup phase</title> <title>Variables controlling the fixup phase</title>
<varlistentry>
<term>
<varname>dontFixup</varname>
</term>
<listitem>
<para>
Set to true to skip the fixup phase.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<varname>dontStrip</varname> <varname>dontStrip</varname>
@ -2210,7 +2259,7 @@ someVar=$(stripHash $name)
array by doing something like array by doing something like
<programlisting language="bash"> <programlisting language="bash">
addEnvHooks "$hostOffset" myBashFunction addEnvHooks "$hostOffset" myBashFunction
</programlisting> </programlisting>
</para> </para>
<para> <para>
@ -2648,8 +2697,8 @@ addEnvHooks "$hostOffset" myBashFunction
that is supposed to be inspected, add <literal>breakpointHook</literal> that is supposed to be inspected, add <literal>breakpointHook</literal>
to <literal>nativeBuildInputs</literal>. to <literal>nativeBuildInputs</literal>.
<programlisting> <programlisting>
nativeBuildInputs = [ breakpointHook ]; nativeBuildInputs = [ breakpointHook ];
</programlisting> </programlisting>
When a build failure happens there will be an instruction printed that When a build failure happens there will be an instruction printed that
shows how to attach with <literal>cntr</literal> to the build sandbox. shows how to attach with <literal>cntr</literal> to the build sandbox.
</para> </para>
@ -2844,7 +2893,7 @@ addEnvHooks "$hostOffset" myBashFunction
printf(help_message); printf(help_message);
^ ^
cc1plus: some warnings being treated as errors cc1plus: some warnings being treated as errors
</programlisting> </programlisting>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -2866,7 +2915,7 @@ cc1plus: some warnings being treated as errors
<programlisting> <programlisting>
bin/blib.a(bios_console.o): In function `bios_handle_cup': bin/blib.a(bios_console.o): In function `bios_handle_cup':
/tmp/nix-build-ipxe-20141124-5cbdc41.drv-0/ipxe-5cbdc41/src/arch/i386/firmware/pcbios/bios_console.c:86: undefined reference to `__stack_chk_fail' /tmp/nix-build-ipxe-20141124-5cbdc41.drv-0/ipxe-5cbdc41/src/arch/i386/firmware/pcbios/bios_console.c:86: undefined reference to `__stack_chk_fail'
</programlisting> </programlisting>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -2895,19 +2944,19 @@ bin/blib.a(bios_console.o): In function `bios_handle_cup':
<programlisting> <programlisting>
malloc.c:404:15: error: return type is an incomplete type malloc.c:404:15: error: return type is an incomplete type
malloc.c:410:19: error: storage size of 'ms' isn't known malloc.c:410:19: error: storage size of 'ms' isn't known
</programlisting> </programlisting>
<programlisting> <programlisting>
strdup.h:22:1: error: expected identifier or '(' before '__extension__' strdup.h:22:1: error: expected identifier or '(' before '__extension__'
</programlisting> </programlisting>
<programlisting> <programlisting>
strsep.c:65:23: error: register name not specified for 'delim' strsep.c:65:23: error: register name not specified for 'delim'
</programlisting> </programlisting>
<programlisting> <programlisting>
installwatch.c:3751:5: error: conflicting types for '__open_2' installwatch.c:3751:5: error: conflicting types for '__open_2'
</programlisting> </programlisting>
<programlisting> <programlisting>
fcntl2.h:50:4: error: call to '__open_missing_mode' declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments fcntl2.h:50:4: error: call to '__open_missing_mode' declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments
</programlisting> </programlisting>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -2932,7 +2981,7 @@ fcntl2.h:50:4: error: call to '__open_missing_mode' declared with attribute erro
<programlisting> <programlisting>
ccbLfRgg.s: Assembler messages: ccbLfRgg.s: Assembler messages:
ccbLfRgg.s:33: Error: missing or invalid displacement expression `private_key_len@GOTOFF' ccbLfRgg.s:33: Error: missing or invalid displacement expression `private_key_len@GOTOFF'
</programlisting> </programlisting>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -2996,7 +3045,7 @@ ccbLfRgg.s:33: Error: missing or invalid displacement expression `private_key_le
</para> </para>
<programlisting> <programlisting>
intel_drv.so: undefined symbol: vgaHWFreeHWRec intel_drv.so: undefined symbol: vgaHWFreeHWRec
</programlisting> </programlisting>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>

View File

@ -36,8 +36,8 @@
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<screen> <screen>
$ git checkout 0998212 <prompt>$ </prompt>git checkout 0998212
$ git checkout -b 'fix/pkg-name-update' <prompt>$ </prompt>git checkout -b 'fix/pkg-name-update'
</screen> </screen>
</para> </para>
</listitem> </listitem>
@ -514,7 +514,7 @@ The original commit message describing the reason why the world was torn apart.
(cherry picked from commit abcdef) (cherry picked from commit abcdef)
Reason: I just had a gut feeling that this would also be wanted by people from Reason: I just had a gut feeling that this would also be wanted by people from
the stone age. the stone age.
</screen> </screen>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</section> </section>

View File

@ -71,7 +71,7 @@ let
zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
recursiveUpdate matchAttrs overrideExisting getOutput getBin recursiveUpdate matchAttrs overrideExisting getOutput getBin
getLib getDev chooseDevOutputs zipWithNames zip; getLib getDev chooseDevOutputs zipWithNames zip;
inherit (lists) singleton foldr fold foldl foldl' imap0 imap1 inherit (lists) singleton forEach foldr fold foldl foldl' imap0 imap1
concatMap flatten remove findSingle findFirst any all count concatMap flatten remove findSingle findFirst any all count
optional optionals toList range partition zipListsWith zipLists optional optionals toList range partition zipListsWith zipLists
reverseList listDfs toposort sort naturalSort compareLists take reverseList listDfs toposort sort naturalSort compareLists take

View File

@ -21,6 +21,19 @@ rec {
*/ */
singleton = x: [x]; singleton = x: [x];
/* Apply the function to each element in the list. Same as `map`, but arguments
flipped.
Type: forEach :: [a] -> (a -> b) -> [b]
Example:
forEach [ 1 2 ] (x:
toString x
)
=> [ "1" "2" ]
*/
forEach = xs: f: map f xs;
/* right fold a binary function `op` between successive elements of /* right fold a binary function `op` between successive elements of
`list` with `nul' as the starting value, i.e., `list` with `nul' as the starting value, i.e.,
`foldr op nul [x_1 x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))`. `foldr op nul [x_1 x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))`.

View File

@ -53,9 +53,13 @@ rec {
# Filter sources by a list of regular expressions. # Filter sources by a list of regular expressions.
# #
# E.g. `src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]` # E.g. `src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]`
sourceByRegex = src: regexes: cleanSourceWith { sourceByRegex = src: regexes:
let
isFiltered = src ? _isLibCleanSourceWith;
origSrc = if isFiltered then src.origSrc else src;
in lib.cleanSourceWith {
filter = (path: type: filter = (path: type:
let relPath = lib.removePrefix (toString src + "/") (toString path); let relPath = lib.removePrefix (toString origSrc + "/") (toString path);
in lib.any (re: builtins.match re relPath != null) regexes); in lib.any (re: builtins.match re relPath != null) regexes);
inherit src; inherit src;
}; };

View File

@ -13,9 +13,11 @@ let
"i686-cygwin" "i686-freebsd" "i686-linux" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-freebsd" "i686-linux" "i686-netbsd" "i686-openbsd"
"x86_64-cygwin" "x86_64-darwin" "x86_64-freebsd" "x86_64-linux" "x86_64-cygwin" "x86_64-freebsd" "x86_64-linux"
"x86_64-netbsd" "x86_64-openbsd" "x86_64-solaris" "x86_64-netbsd" "x86_64-openbsd" "x86_64-solaris"
"x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin"
"x86_64-windows" "i686-windows" "x86_64-windows" "i686-windows"
"wasm64-wasi" "wasm32-wasi" "wasm64-wasi" "wasm32-wasi"
@ -24,7 +26,7 @@ let
"riscv32-linux" "riscv64-linux" "riscv32-linux" "riscv64-linux"
"aarch64-none" "avr-none" "arm-none" "i686-none" "x86_64-none" "powerpc-none" "msp430-none" "aarch64-none" "avr-none" "arm-none" "i686-none" "x86_64-none" "powerpc-none" "msp430-none" "riscv64-none" "riscv32-none"
]; ];
allParsed = map parse.mkSystemFromString all; allParsed = map parse.mkSystemFromString all;

View File

@ -97,6 +97,18 @@ rec {
riscv64 = riscv "64"; riscv64 = riscv "64";
riscv32 = riscv "32"; riscv32 = riscv "32";
riscv64-embedded = {
config = "riscv64-none-elf";
libc = "newlib";
platform = platforms.riscv-multiplatform "64";
};
riscv32-embedded = {
config = "riscv32-none-elf";
libc = "newlib";
platform = platforms.riscv-multiplatform "32";
};
msp430 = { msp430 = {
config = "msp430-elf"; config = "msp430-elf";
libc = "newlib"; libc = "newlib";

View File

@ -428,7 +428,7 @@ rec {
mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s)); mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s));
doubleFromSystem = { cpu, vendor, kernel, abi, ... }: doubleFromSystem = { cpu, kernel, abi, ... }:
/**/ if abi == abis.cygnus then "${cpu.name}-cygwin" /**/ if abi == abis.cygnus then "${cpu.name}-cygwin"
else if kernel.families ? darwin then "${cpu.name}-darwin" else if kernel.families ? darwin then "${cpu.name}-darwin"
else "${cpu.name}-${kernel.name}"; else "${cpu.name}-${kernel.name}";

View File

@ -71,6 +71,15 @@ checkConfigError 'The option value .* in .* is not of type.*positive integer.*'
checkConfigOutput "42" config.value ./declare-int-between-value.nix ./define-value-int-positive.nix checkConfigOutput "42" config.value ./declare-int-between-value.nix ./define-value-int-positive.nix
checkConfigError 'The option value .* in .* is not of type.*between.*-21 and 43.*inclusive.*' config.value ./declare-int-between-value.nix ./define-value-int-negative.nix checkConfigError 'The option value .* in .* is not of type.*between.*-21 and 43.*inclusive.*' config.value ./declare-int-between-value.nix ./define-value-int-negative.nix
# Check either types
# types.either
checkConfigOutput "42" config.value ./declare-either.nix ./define-value-int-positive.nix
checkConfigOutput "\"24\"" config.value ./declare-either.nix ./define-value-string.nix
# types.oneOf
checkConfigOutput "42" config.value ./declare-oneOf.nix ./define-value-int-positive.nix
checkConfigOutput "[ ]" config.value ./declare-oneOf.nix ./define-value-list.nix
checkConfigOutput "\"24\"" config.value ./declare-oneOf.nix ./define-value-string.nix
# Check mkForce without submodules. # Check mkForce without submodules.
set -- config.enable ./declare-enable.nix ./define-enable.nix set -- config.enable ./declare-enable.nix ./define-enable.nix
checkConfigOutput "true" "$@" checkConfigOutput "true" "$@"

View File

@ -0,0 +1,5 @@
{ lib, ... }: {
options.value = lib.mkOption {
type = lib.types.either lib.types.int lib.types.str;
};
}

View File

@ -0,0 +1,9 @@
{ lib, ... }: {
options.value = lib.mkOption {
type = lib.types.oneOf [
lib.types.int
(lib.types.listOf lib.types.int)
lib.types.str
];
};
}

View File

@ -1,11 +1,9 @@
{ pkgs ? import ((import ../.).cleanSource ../..) {} }: { pkgs ? import ((import ../.).cleanSource ../..) {} }:
pkgs.stdenv.mkDerivation { pkgs.runCommandNoCC "nixpkgs-lib-tests" {
name = "nixpkgs-lib-tests"; buildInputs = [ pkgs.nix (import ./check-eval.nix) ];
buildInputs = [ pkgs.nix ];
NIX_PATH="nixpkgs=${pkgs.path}"; NIX_PATH="nixpkgs=${pkgs.path}";
} ''
buildCommand = ''
datadir="${pkgs.nix}/share" datadir="${pkgs.nix}/share"
export TEST_ROOT=$(pwd)/test-tmp export TEST_ROOT=$(pwd)/test-tmp
export NIX_BUILD_HOOK= export NIX_BUILD_HOOK=
@ -22,10 +20,5 @@ pkgs.stdenv.mkDerivation {
cd ${pkgs.path}/lib/tests cd ${pkgs.path}/lib/tests
bash ./modules.sh bash ./modules.sh
[[ "$(nix-instantiate --eval --strict misc.nix)" == "[ ]" ]]
[[ "$(nix-instantiate --eval --strict systems.nix)" == "[ ]" ]]
touch $out touch $out
''; ''
}

View File

@ -14,13 +14,13 @@ let
in with lib.systems.doubles; lib.runTests { in with lib.systems.doubles; lib.runTests {
testall = mseteq all (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos ++ wasi ++ windows ++ embedded); testall = mseteq all (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos ++ wasi ++ windows ++ embedded);
testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv7l-linux" "arm-none" ]; testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv7l-linux" "arm-none" "armv7a-darwin" ];
testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" ]; testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
testmips = mseteq mips [ "mipsel-linux" ]; testmips = mseteq mips [ "mipsel-linux" ];
testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ]; testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ]; testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ];
testdarwin = mseteq darwin [ "x86_64-darwin" ]; testdarwin = mseteq darwin [ "x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin" ];
testfreebsd = mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ]; testfreebsd = mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ];
testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */); testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */);
testillumos = mseteq illumos [ "x86_64-solaris" ]; testillumos = mseteq illumos [ "x86_64-solaris" ];

View File

@ -111,7 +111,7 @@ rec {
name = "int"; name = "int";
description = "signed integer"; description = "signed integer";
check = isInt; check = isInt;
merge = mergeOneOption; merge = mergeEqualOption;
}; };
# Specialized subdomains of int # Specialized subdomains of int
@ -176,14 +176,14 @@ rec {
name = "float"; name = "float";
description = "floating point number"; description = "floating point number";
check = isFloat; check = isFloat;
merge = mergeOneOption; merge = mergeEqualOption;
}; };
str = mkOptionType { str = mkOptionType {
name = "str"; name = "str";
description = "string"; description = "string";
check = isString; check = isString;
merge = mergeOneOption; merge = mergeEqualOption;
}; };
strMatching = pattern: mkOptionType { strMatching = pattern: mkOptionType {
@ -243,7 +243,7 @@ rec {
name = "path"; name = "path";
# Hacky: there is no isPath primop. # Hacky: there is no isPath primop.
check = x: builtins.substring 0 1 (toString x) == "/"; check = x: builtins.substring 0 1 (toString x) == "/";
merge = mergeOneOption; merge = mergeEqualOption;
}; };
# drop this in the future: # drop this in the future:
@ -415,7 +415,7 @@ rec {
name = "enum"; name = "enum";
description = "one of ${concatMapStringsSep ", " show values}"; description = "one of ${concatMapStringsSep ", " show values}";
check = flip elem values; check = flip elem values;
merge = mergeOneOption; merge = mergeEqualOption;
functor = (defaultFunctor name) // { payload = values; binOp = a: b: unique (a ++ b); }; functor = (defaultFunctor name) // { payload = values; binOp = a: b: unique (a ++ b); };
}; };
@ -443,6 +443,13 @@ rec {
functor = (defaultFunctor name) // { wrapped = [ t1 t2 ]; }; functor = (defaultFunctor name) // { wrapped = [ t1 t2 ]; };
}; };
# Any of the types in the given list
oneOf = ts:
let
head' = if ts == [] then throw "types.oneOf needs to get at least one type in its argument" else head ts;
tail' = tail ts;
in foldl' either head' tail';
# Either value of type `finalType` or `coercedType`, the latter is # Either value of type `finalType` or `coercedType`, the latter is
# converted to `finalType` using `coerceFunc`. # converted to `finalType` using `coerceFunc`.
coercedTo = coercedType: coerceFunc: finalType: coercedTo = coercedType: coerceFunc: finalType:

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,20 @@
# nix name, luarocks name, server, version,luaversion,maintainers # nix name, luarocks name, server, version,luaversion,maintainers
alt-getopt,,,,,arobyn
ansicolors,,,,, ansicolors,,,,,
argparse,,,,, argparse,,,,,
basexx,,,,, basexx,,,,,
binaryheap,,,,,vcunat binaryheap,,,,,vcunat
bit32,,,,lua5_1,lblasc
busted,,,,,
cjson,lua-cjson,,,,
compat53,,,,,vcunat
coxpcall,,,1.17.0-1,,
cqueues,,,,,vcunat
cyrussasl,,,,,vcunat
digestif,,http://luarocks.org/dev,,lua5_3, digestif,,http://luarocks.org/dev,,lua5_3,
dkjson,,,,, dkjson,,,,,
fifo,,,,, fifo,,,,,
http,,,,, http,,,,,vcunat
inspect,,,,, inspect,,,,,
ldoc,,,,, ldoc,,,,,
lgi,,,,, lgi,,,,,
@ -15,35 +23,45 @@ lpeg_patterns,,,,,
lpeglabel,,,,, lpeglabel,,,,,
lpty,,,,, lpty,,,,,
lrexlib-gnu,,,,, lrexlib-gnu,,,,,
lrexlib-pcre,,,,,vyp
lrexlib-posix,,,,, lrexlib-posix,,,,,
ltermbox,,,,, ltermbox,,,,,
cjson,lua-cjson,,,,
lua-cmsgpack,,,,, lua-cmsgpack,,,,,
lua_cliargs,,,,,
lua-iconv,,,,, lua-iconv,,,,,
lua-lsp,,http://luarocks.org/dev,,, lua-lsp,,http://luarocks.org/dev,,,
lua-messagepack,,,,, lua-messagepack,,,,,
lua-term,,,,, lua-term,,,,,
lua-toml,,,,, lua-toml,,,,,
lua-zlib,,,,,koral lua-zlib,,,,,koral
lua_cliargs,,,,,
luabitop,,,,, luabitop,,,,,
luaevent,,,,,
luacheck,,,,, luacheck,,,,,
luadbi,,,,,
luadbi-mysql,,,,,
luadbi-postgresql,,,,,
luadbi-sqlite3,,,,,
luaevent,,,,,
luaexpat,,,1.3.0-1,,arobyn flosse
luaffi,,http://luarocks.org/dev,,, luaffi,,http://luarocks.org/dev,,,
luafilesystem,,,1.7.0-2,,flosse vcunat
luaossl,,,,lua5_1,vcunat
luaposix,,,,,vyp lblasc luaposix,,,,,vyp lblasc
luasec,,,,,flosse
luasocket,,,,,
luasql-sqlite3,,,,,vyp
luassert,,,,,
luasystem,,,,,
luazip,,,,, luazip,,,,,
luuid,,,,, luuid,,,,,
luv,,,,,
markdown,,,,, markdown,,,,,
mediator_lua,,,,,
mpack,,,,,
moonscript,,,,,arobyn
nvim-client,,,,,
penlight,,,,, penlight,,,,,
rapidjson,,,,, rapidjson,,,,,
say,,,,, say,,,,,
std__debug,std._debug,,,, std__debug,std._debug,,,,
std_normalize,std.normalize,,,, std_normalize,std.normalize,,,,
luv,,,,, stdlib,,,,,vyp
luasystem,,,,,
mediator_lua,,http://luarocks.org/manifests/teto,,,
mpack,,,,,
nvim-client,,,,,
busted,,http://luarocks.org/manifests/teto,,,
luassert,,,,,
coxpcall,,https://luarocks.org/manifests/hisham,1.17.0-1,,

1 # nix name luarocks name server version luaversion maintainers
2 alt-getopt arobyn
3 ansicolors
4 argparse
5 basexx
6 binaryheap vcunat
7 bit32 lua5_1 lblasc
8 busted
9 cjson lua-cjson
10 compat53 vcunat
11 coxpcall 1.17.0-1
12 cqueues vcunat
13 cyrussasl vcunat
14 digestif http://luarocks.org/dev lua5_3
15 dkjson
16 fifo
17 http vcunat
18 inspect
19 ldoc
20 lgi
23 lpeglabel
24 lpty
25 lrexlib-gnu
26 lrexlib-pcre vyp
27 lrexlib-posix
28 ltermbox
cjson lua-cjson
29 lua-cmsgpack
lua_cliargs
30 lua-iconv
31 lua-lsp http://luarocks.org/dev
32 lua-messagepack
33 lua-term
34 lua-toml
35 lua-zlib koral
36 lua_cliargs
37 luabitop
luaevent
38 luacheck
39 luadbi
40 luadbi-mysql
41 luadbi-postgresql
42 luadbi-sqlite3
43 luaevent
44 luaexpat 1.3.0-1 arobyn flosse
45 luaffi http://luarocks.org/dev
46 luafilesystem 1.7.0-2 flosse vcunat
47 luaossl lua5_1 vcunat
48 luaposix vyp lblasc
49 luasec flosse
50 luasocket
51 luasql-sqlite3 vyp
52 luassert
53 luasystem
54 luazip
55 luuid
56 luv
57 markdown
58 mediator_lua
59 mpack
60 moonscript arobyn
61 nvim-client
62 penlight
63 rapidjson
64 say
65 std__debug std._debug
66 std_normalize std.normalize
67 luv stdlib vyp
luasystem
mediator_lua http://luarocks.org/manifests/teto
mpack
nvim-client
busted http://luarocks.org/manifests/teto
luassert
coxpcall https://luarocks.org/manifests/hisham 1.17.0-1

View File

@ -5,7 +5,7 @@ stdenv.mkDerivation {
buildInputs = [ makeWrapper perl perlPackages.XMLSimple ]; buildInputs = [ makeWrapper perl perlPackages.XMLSimple ];
unpackPhase = "true"; dontUnpack = true;
buildPhase = "true"; buildPhase = "true";
installPhase = installPhase =

View File

@ -0,0 +1,36 @@
#!/usr/bin/env bash
# script to generate `pkgs/networking/instant-messengers/discord/default.nix`
set -e
exec >${1:?usage: $0 <output-file>}
cat <<EOF
{ branch ? "stable", pkgs }:
let
inherit (pkgs) callPackage fetchurl;
in {
EOF
for branch in "" ptb canary; do
url=$(curl -sI "https://discordapp.com/api/download${branch:+/}${branch}?platform=linux&format=tar.gz" | grep -oP 'location: \K\S+')
version=${url##https://dl*.discordapp.net/apps/linux/}
version=${version%%/*.tar.gz}
echo " ${branch:-stable} = callPackage ./base.nix {"
echo " pname = \"discord${branch:+-}${branch}\";"
case $branch in
"") suffix="" ;;
ptb) suffix="PTB" ;;
canary) suffix="Canary" ;;
esac
echo " binaryName = \"Discord${suffix}\";"
echo " desktopName = \"Discord${suffix:+ }${suffix}\";"
echo " version = \"${version}\";"
echo " src = fetchurl {"
echo " url = \"${url}\";"
echo " sha256 = \"$(nix-prefetch-url "$url")\";"
echo " };"
echo " };"
done
echo "}.\${branch}"

View File

@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell #!/usr/bin/env nix-shell
#!nix-shell -p nix-prefetch-scripts luarocks-nix -i bash #!nix-shell update-luarocks-shell.nix -i bash
# You'll likely want to use # You'll likely want to use
# `` # ``
@ -8,15 +8,19 @@
# to update all libraries in that folder. # to update all libraries in that folder.
# to debug, redirect stderr to stdout with 2>&1 # to debug, redirect stderr to stdout with 2>&1
# stop the script upon C-C # stop the script upon C-C
set -eu -o pipefail set -eu -o pipefail
CSV_FILE="maintainers/scripts/luarocks-packages.csv" CSV_FILE="maintainers/scripts/luarocks-packages.csv"
TMP_FILE="$(mktemp)" TMP_FILE="$(mktemp)"
# Set in the update-luarocks-shell.nix
NIXPKGS_PATH="$LUAROCKS_NIXPKGS_PATH"
exit_trap() # 10 is a pretty arbitrary number of simultaneous jobs, but it is generally
{ # impolite to hit a webserver with *too* many simultaneous connections :)
PARALLEL_JOBS=10
exit_trap() {
local lc="$BASH_COMMAND" rc=$? local lc="$BASH_COMMAND" rc=$?
test $rc -eq 0 || echo -e "*** error $rc: $lc.\nGenerated temporary file in $TMP_FILE" >&2 test $rc -eq 0 || echo -e "*** error $rc: $lc.\nGenerated temporary file in $TMP_FILE" >&2
} }
@ -49,7 +53,7 @@ while getopts ":hc:" opt; do
echo "Invalid option: -$OPTARG" >&2 echo "Invalid option: -$OPTARG" >&2
;; ;;
esac esac
shift $((OPTIND-1)) shift $((OPTIND - 1))
done done
GENERATED_NIXFILE="$1" GENERATED_NIXFILE="$1"
@ -72,43 +76,60 @@ FOOTER="
/* GENERATED */ /* GENERATED */
" "
function convert_pkg() {
function convert_pkg () {
nix_pkg_name="$1" nix_pkg_name="$1"
lua_pkg_name="$2" lua_pkg_name="$2"
server="${3:+--only-server=$3}" server="$3"
pkg_version="${4:-}" pkg_version="$4"
lua_version="${5:+--lua-dir=$(nix path-info nixpkgs.$5)/bin}" lua_version="$5"
maintainers="$6"
echo "looking at $lua_pkg_name (version $pkg_version) from server [$server]" >&2 if [ "${nix_pkg_name:0:1}" == "#" ]; then
cmd="luarocks nix $server $lua_version $lua_pkg_name $pkg_version" echo "Skipping comment ${*}" >&2
echo "Running $cmd" >&2 return
drv="$nix_pkg_name = $($cmd)" fi
if [ $? -ne 0 ]; then if [ -z "$lua_pkg_name" ]; then
echo "Failed to convert $pkg" >&2 echo "Using nix_name as lua_pkg_name for '$nix_pkg_name'" >&2
lua_pkg_name="$nix_pkg_name"
fi
echo "Building expression for $lua_pkg_name (version $pkg_version) from server [$server]" >&2
luarocks_args=(nix)
if [[ -n $server ]]; then
luarocks_args+=("--only-server=$server")
fi
if [[ -n $maintainers ]]; then
luarocks_args+=("--maintainers=$maintainers")
fi
if [[ -n $lua_version ]]; then
lua_drv_path=$(nix-build --no-out-link "$NIXPKGS_PATH" -A "$lua_version")
luarocks_args+=("--lua-dir=$lua_drv_path/bin")
fi
luarocks_args+=("$lua_pkg_name")
if [[ -n $pkg_version ]]; then
luarocks_args+=("$pkg_version")
fi
echo "Running 'luarocks ${luarocks_args[*]}'" >&2
if drv="$nix_pkg_name = $(luarocks "${luarocks_args[@]}")"; then
echo "$drv"
else else
echo "$drv" | tee -a "$TMP_FILE" echo "Failed to convert $nix_pkg_name" >&2
return 1
fi fi
} }
# params needed when called via callPackage # params needed when called via callPackage
echo "$HEADER" | tee "$TMP_FILE" echo "$HEADER" | tee "$TMP_FILE"
# list of packages with format # Ensure parallel can run our bash function
while IFS=, read -r nix_pkg_name lua_pkg_name server pkg_version luaversion export -f convert_pkg
do export SHELL=bash
if [ "${nix_pkg_name:0:1}" == "#" ]; then # Read each line in the csv file and run convert_pkg for each, in parallel
echo "Skipping comment ${nix_pkg_name}" >&2 parallel --group --keep-order --halt now,fail=1 --jobs "$PARALLEL_JOBS" --colsep ',' convert_pkg {} <"$CSV_FILE" | tee -a "$TMP_FILE"
continue
fi
if [ -z "$lua_pkg_name" ]; then
echo "Using nix_name as lua_pkg_name" >&2
lua_pkg_name="$nix_pkg_name"
fi
convert_pkg "$nix_pkg_name" "$lua_pkg_name" "$server" "$pkg_version" "$luaversion"
done < "$CSV_FILE"
# close the set # close the set
echo "$FOOTER" | tee -a "$TMP_FILE" echo "$FOOTER" | tee -a "$TMP_FILE"
cp "$TMP_FILE" "$GENERATED_NIXFILE" cp "$TMP_FILE" "$GENERATED_NIXFILE"
# vim: set ts=4 sw=4 ft=sh:

View File

@ -0,0 +1,9 @@
{ nixpkgs ? import ../.. { }
}:
with nixpkgs;
mkShell {
buildInputs = [
bash luarocks-nix nix-prefetch-scripts parallel
];
LUAROCKS_NIXPKGS_PATH = toString nixpkgs.path;
}

View File

@ -11,12 +11,12 @@
Nixs <emphasis>garbage collector</emphasis> to remove old, unreferenced Nixs <emphasis>garbage collector</emphasis> to remove old, unreferenced
packages. This is easy: packages. This is easy:
<screen> <screen>
$ nix-collect-garbage <prompt>$ </prompt>nix-collect-garbage
</screen> </screen>
Alternatively, you can use a systemd unit that does the same in the Alternatively, you can use a systemd unit that does the same in the
background: background:
<screen> <screen>
# systemctl start nix-gc.service <prompt># </prompt>systemctl start nix-gc.service
</screen> </screen>
You can tell NixOS in <filename>configuration.nix</filename> to run this unit You can tell NixOS in <filename>configuration.nix</filename> to run this unit
automatically at certain points in time, for instance, every night at 03:15: automatically at certain points in time, for instance, every night at 03:15:
@ -31,11 +31,11 @@ $ nix-collect-garbage
configurations. The following command deletes old roots, removing the ability configurations. The following command deletes old roots, removing the ability
to roll back to them: to roll back to them:
<screen> <screen>
$ nix-collect-garbage -d <prompt>$ </prompt>nix-collect-garbage -d
</screen> </screen>
You can also do this for specific profiles, e.g. You can also do this for specific profiles, e.g.
<screen> <screen>
$ nix-env -p /nix/var/nix/profiles/per-user/eelco/profile --delete-generations old <prompt>$ </prompt>nix-env -p /nix/var/nix/profiles/per-user/eelco/profile --delete-generations old
</screen> </screen>
Note that NixOS system configurations are stored in the profile Note that NixOS system configurations are stored in the profile
<filename>/nix/var/nix/profiles/system</filename>. <filename>/nix/var/nix/profiles/system</filename>.
@ -45,7 +45,7 @@ $ nix-env -p /nix/var/nix/profiles/per-user/eelco/profile --delete-generations o
Nix store) is to run Nixs store optimiser, which seeks out identical files Nix store) is to run Nixs store optimiser, which seeks out identical files
in the store and replaces them with hard links to a single copy. in the store and replaces them with hard links to a single copy.
<screen> <screen>
$ nix-store --optimise <prompt>$ </prompt>nix-store --optimise
</screen> </screen>
Since this command needs to read the entire Nix store, it can take quite a Since this command needs to read the entire Nix store, it can take quite a
while to finish. while to finish.

View File

@ -11,10 +11,10 @@
<literal>10.233.0.0/16</literal>. You can get the containers IPv4 address <literal>10.233.0.0/16</literal>. You can get the containers IPv4 address
as follows: as follows:
<screen> <screen>
# nixos-container show-ip foo <prompt># </prompt>nixos-container show-ip foo
10.233.4.2 10.233.4.2
$ ping -c1 10.233.4.2 <prompt>$ </prompt>ping -c1 10.233.4.2
64 bytes from 10.233.4.2: icmp_seq=1 ttl=64 time=0.106 ms 64 bytes from 10.233.4.2: icmp_seq=1 ttl=64 time=0.106 ms
</screen> </screen>
</para> </para>

View File

@ -16,7 +16,7 @@
<literal>systemd</literal> hierarchy, which is what systemd uses to keep <literal>systemd</literal> hierarchy, which is what systemd uses to keep
track of the processes belonging to each service or user session: track of the processes belonging to each service or user session:
<screen> <screen>
$ systemd-cgls <prompt>$ </prompt>systemd-cgls
├─user ├─user
│ └─eelco │ └─eelco
│ └─c1 │ └─c1

View File

@ -11,14 +11,14 @@
The command <literal>journalctl</literal> allows you to see the contents of The command <literal>journalctl</literal> allows you to see the contents of
the journal. For example, the journal. For example,
<screen> <screen>
$ journalctl -b <prompt>$ </prompt>journalctl -b
</screen> </screen>
shows all journal entries since the last reboot. (The output of shows all journal entries since the last reboot. (The output of
<command>journalctl</command> is piped into <command>less</command> by <command>journalctl</command> is piped into <command>less</command> by
default.) You can use various options and match operators to restrict output default.) You can use various options and match operators to restrict output
to messages of interest. For instance, to get all messages from PostgreSQL: to messages of interest. For instance, to get all messages from PostgreSQL:
<screen> <screen>
$ journalctl -u postgresql.service <prompt>$ </prompt>journalctl -u postgresql.service
-- Logs begin at Mon, 2013-01-07 13:28:01 CET, end at Tue, 2013-01-08 01:09:57 CET. -- -- Logs begin at Mon, 2013-01-07 13:28:01 CET, end at Tue, 2013-01-08 01:09:57 CET. --
... ...
Jan 07 15:44:14 hagbard postgres[2681]: [2-1] LOG: database system is shut down Jan 07 15:44:14 hagbard postgres[2681]: [2-1] LOG: database system is shut down
@ -29,7 +29,7 @@ Jan 07 15:45:13 hagbard postgres[2500]: [1-1] LOG: database system is ready to
Or to get all messages since the last reboot that have at least a Or to get all messages since the last reboot that have at least a
“critical” severity level: “critical” severity level:
<screen> <screen>
$ journalctl -b -p crit <prompt>$ </prompt>journalctl -b -p crit
Dec 17 21:08:06 mandark sudo[3673]: pam_unix(sudo:auth): auth could not identify password for [alice] Dec 17 21:08:06 mandark sudo[3673]: pam_unix(sudo:auth): auth could not identify password for [alice]
Dec 29 01:30:22 mandark kernel[6131]: [1053513.909444] CPU6: Core temperature above threshold, cpu clock throttled (total events = 1) Dec 29 01:30:22 mandark kernel[6131]: [1053513.909444] CPU6: Core temperature above threshold, cpu clock throttled (total events = 1)
</screen> </screen>

View File

@ -33,7 +33,7 @@
where <replaceable>N</replaceable> is the number of the NixOS system where <replaceable>N</replaceable> is the number of the NixOS system
configuration. To get a list of the available configurations, do: configuration. To get a list of the available configurations, do:
<screen> <screen>
$ ls -l /nix/var/nix/profiles/system-*-link <prompt>$ </prompt>ls -l /nix/var/nix/profiles/system-*-link
<replaceable>...</replaceable> <replaceable>...</replaceable>
lrwxrwxrwx 1 root root 78 Aug 12 13:54 /nix/var/nix/profiles/system-268-link -> /nix/store/202b...-nixos-13.07pre4932_5a676e4-4be1055 lrwxrwxrwx 1 root root 78 Aug 12 13:54 /nix/var/nix/profiles/system-268-link -> /nix/store/202b...-nixos-13.07pre4932_5a676e4-4be1055
</screen> </screen>

View File

@ -21,7 +21,7 @@
<command>systemd</command>. Without any arguments, it shows the status of <command>systemd</command>. Without any arguments, it shows the status of
active units: active units:
<screen> <screen>
$ systemctl <prompt>$ </prompt>systemctl
-.mount loaded active mounted / -.mount loaded active mounted /
swapfile.swap loaded active active /swapfile swapfile.swap loaded active active /swapfile
sshd.service loaded active running SSH Daemon sshd.service loaded active running SSH Daemon
@ -33,7 +33,7 @@ graphical.target loaded active active Graphical Interface
You can ask for detailed status information about a unit, for instance, the You can ask for detailed status information about a unit, for instance, the
PostgreSQL database service: PostgreSQL database service:
<screen> <screen>
$ systemctl status postgresql.service <prompt>$ </prompt>systemctl status postgresql.service
postgresql.service - PostgreSQL Server postgresql.service - PostgreSQL Server
Loaded: loaded (/nix/store/pn3q73mvh75gsrl8w7fdlfk3fq5qm5mw-unit/postgresql.service) Loaded: loaded (/nix/store/pn3q73mvh75gsrl8w7fdlfk3fq5qm5mw-unit/postgresql.service)
Active: active (running) since Mon, 2013-01-07 15:55:57 CET; 9h ago Active: active (running) since Mon, 2013-01-07 15:55:57 CET; 9h ago

View File

@ -18,7 +18,7 @@
If the corruption is in a path in the closure of the NixOS system If the corruption is in a path in the closure of the NixOS system
configuration, you can fix it by doing configuration, you can fix it by doing
<screen> <screen>
# nixos-rebuild switch --repair <prompt># </prompt>nixos-rebuild switch --repair
</screen> </screen>
This will cause Nix to check every path in the closure, and if its This will cause Nix to check every path in the closure, and if its
cryptographic hash differs from the hash recorded in Nixs database, the cryptographic hash differs from the hash recorded in Nixs database, the
@ -28,7 +28,7 @@
<para> <para>
You can also scan the entire Nix store for corrupt paths: You can also scan the entire Nix store for corrupt paths:
<screen> <screen>
# nix-store --verify --check-contents --repair <prompt># </prompt>nix-store --verify --check-contents --repair
</screen> </screen>
Any corrupt paths will be redownloaded if theyre available in a binary Any corrupt paths will be redownloaded if theyre available in a binary
cache; otherwise, they cannot be repaired. cache; otherwise, they cannot be repaired.

View File

@ -10,7 +10,7 @@
allows querying and manipulating user sessions. For instance, to list all allows querying and manipulating user sessions. For instance, to list all
user sessions: user sessions:
<screen> <screen>
$ loginctl <prompt>$ </prompt>loginctl
SESSION UID USER SEAT SESSION UID USER SEAT
c1 500 eelco seat0 c1 500 eelco seat0
c3 0 root seat0 c3 0 root seat0
@ -21,7 +21,7 @@ $ loginctl
devices attached to the system; usually, there is only one seat.) To get devices attached to the system; usually, there is only one seat.) To get
information about a session: information about a session:
<screen> <screen>
$ loginctl session-status c3 <prompt>$ </prompt>loginctl session-status c3
c3 - root (0) c3 - root (0)
Since: Tue, 2013-01-08 01:17:56 CET; 4min 42s ago Since: Tue, 2013-01-08 01:17:56 CET; 4min 42s ago
Leader: 2536 (login) Leader: 2536 (login)

View File

@ -9,7 +9,7 @@
With the command <command>nix-env</command>, you can install and uninstall With the command <command>nix-env</command>, you can install and uninstall
packages from the command line. For instance, to install Mozilla Thunderbird: packages from the command line. For instance, to install Mozilla Thunderbird:
<screen> <screen>
$ nix-env -iA nixos.thunderbird</screen> <prompt>$ </prompt>nix-env -iA nixos.thunderbird</screen>
If you invoke this as root, the package is installed in the Nix profile If you invoke this as root, the package is installed in the Nix profile
<filename>/nix/var/nix/profiles/default</filename> and visible to all users <filename>/nix/var/nix/profiles/default</filename> and visible to all users
of the system; otherwise, the package ends up in of the system; otherwise, the package ends up in
@ -25,7 +25,7 @@ $ nix-env -iA nixos.thunderbird</screen>
Packages come from the NixOS channel. You typically upgrade a package by Packages come from the NixOS channel. You typically upgrade a package by
updating to the latest version of the NixOS channel: updating to the latest version of the NixOS channel:
<screen> <screen>
$ nix-channel --update nixos <prompt>$ </prompt>nix-channel --update nixos
</screen> </screen>
and then running <literal>nix-env -i</literal> again. Other packages in the and then running <literal>nix-env -i</literal> again. Other packages in the
profile are <emphasis>not</emphasis> affected; this is the crucial difference profile are <emphasis>not</emphasis> affected; this is the crucial difference
@ -34,21 +34,21 @@ $ nix-channel --update nixos
their current versions in the NixOS channel. You can however upgrade all their current versions in the NixOS channel. You can however upgrade all
packages for which there is a newer version by doing: packages for which there is a newer version by doing:
<screen> <screen>
$ nix-env -u '*' <prompt>$ </prompt>nix-env -u '*'
</screen> </screen>
</para> </para>
<para> <para>
A package can be uninstalled using the <option>-e</option> flag: A package can be uninstalled using the <option>-e</option> flag:
<screen> <screen>
$ nix-env -e thunderbird <prompt>$ </prompt>nix-env -e thunderbird
</screen> </screen>
</para> </para>
<para> <para>
Finally, you can roll back an undesirable <command>nix-env</command> action: Finally, you can roll back an undesirable <command>nix-env</command> action:
<screen> <screen>
$ nix-env --rollback <prompt>$ </prompt>nix-env --rollback
</screen> </screen>
</para> </para>

View File

@ -14,8 +14,8 @@
xlink:href="http://nixos.org/nixpkgs/manual">Nixpkgs xlink:href="http://nixos.org/nixpkgs/manual">Nixpkgs
manual</link>. In short, you clone Nixpkgs: manual</link>. In short, you clone Nixpkgs:
<screen> <screen>
$ git clone https://github.com/NixOS/nixpkgs <prompt>$ </prompt>git clone https://github.com/NixOS/nixpkgs
$ cd nixpkgs <prompt>$ </prompt>cd nixpkgs
</screen> </screen>
Then you write and test the package as described in the Nixpkgs manual. Then you write and test the package as described in the Nixpkgs manual.
Finally, you add it to <literal>environment.systemPackages</literal>, e.g. Finally, you add it to <literal>environment.systemPackages</literal>, e.g.
@ -65,8 +65,8 @@ stdenv.mkDerivation rec {
</programlisting> </programlisting>
This allows testing the package easily: This allows testing the package easily:
<screen> <screen>
$ nix-build my-hello.nix <prompt>$ </prompt>nix-build my-hello.nix
$ ./result/bin/hello <prompt>$ </prompt>./result/bin/hello
Hello, world! Hello, world!
</screen> </screen>
</para> </para>

View File

@ -22,7 +22,7 @@
<para> <para>
You can get a list of the available packages as follows: You can get a list of the available packages as follows:
<screen> <screen>
$ nix-env -qaP '*' --description <prompt>$ </prompt>nix-env -qaP '*' --description
nixos.firefox firefox-23.0 Mozilla Firefox - the browser, reloaded nixos.firefox firefox-23.0 Mozilla Firefox - the browser, reloaded
<replaceable>...</replaceable> <replaceable>...</replaceable>
</screen> </screen>

View File

@ -39,7 +39,7 @@
<xref linkend="opt-networking.defaultGateway6"/> = { <xref linkend="opt-networking.defaultGateway6"/> = {
address = "fe00::1"; address = "fe00::1";
interface = "enp0s3"; interface = "enp0s3";
} };
</programlisting> </programlisting>
</para> </para>

View File

@ -33,12 +33,12 @@
<link xlink:href="https://github.com/matrix-org/synapse#synapse-installation"> <link xlink:href="https://github.com/matrix-org/synapse#synapse-installation">
installation instructions of Synapse </link>. installation instructions of Synapse </link>.
<programlisting> <programlisting>
let let
fqdn = fqdn =
let let
join = hostName: domain: hostName + optionalString (domain != null) ".${domain}"; join = hostName: domain: hostName + optionalString (domain != null) ".${domain}";
in join config.networking.hostName config.networking.domain; in join config.networking.hostName config.networking.domain;
in { in {
networking = { networking = {
hostName = "myhostname"; hostName = "myhostname";
domain = "example.org"; domain = "example.org";
@ -95,7 +95,7 @@
# forward all Matrix API calls to the synapse Matrix homeserver # forward all Matrix API calls to the synapse Matrix homeserver
locations."/_matrix" = { locations."/_matrix" = {
proxyPass = "http://[::1]:8008"; proxyPass = "http://[::1]:8008"; # without a trailing /
}; };
}; };
}; };
@ -116,8 +116,8 @@
} }
]; ];
}; };
}; };
</programlisting> </programlisting>
</para> </para>
<para> <para>
@ -141,15 +141,15 @@
<option>services.matrix-synapse.registration_shared_secret</option>. To <option>services.matrix-synapse.registration_shared_secret</option>. To
create a new user or admin, run the following after you have set the secret create a new user or admin, run the following after you have set the secret
and have rebuilt NixOS: and have rebuilt NixOS:
<programlisting> <screen>
$ nix run nixpkgs.matrix-synapse <prompt>$ </prompt>nix run nixpkgs.matrix-synapse
$ register_new_matrix_user -k &lt;your-registration-shared-secret&gt; http://localhost:8008 <prompt>$ </prompt>register_new_matrix_user -k <replaceable>your-registration-shared-secret</replaceable> http://localhost:8008
New user localpart: &lt;your-username&gt; <prompt>New user localpart: </prompt><replaceable>your-username</replaceable>
Password: <prompt>Password:</prompt>
Confirm password: <prompt>Confirm password:</prompt>
Make admin [no]: <prompt>Make admin [no]:</prompt>
Success! Success!
</programlisting> </screen>
In the example, this would create a user with the Matrix Identifier In the example, this would create a user with the Matrix Identifier
<literal>@your-username:example.org</literal>. Note that the registration <literal>@your-username:example.org</literal>. Note that the registration
secret ends up in the nix store and therefore is world-readable by any user secret ends up in the nix store and therefore is world-readable by any user
@ -177,7 +177,7 @@
Matrix Now!</link> for a list of existing clients and their supported Matrix Now!</link> for a list of existing clients and their supported
featureset. featureset.
<programlisting> <programlisting>
services.nginx.virtualHosts."riot.${fqdn}" = { services.nginx.virtualHosts."riot.${fqdn}" = {
enableACME = true; enableACME = true;
forceSSL = true; forceSSL = true;
serverAliases = [ serverAliases = [
@ -185,8 +185,8 @@
]; ];
root = pkgs.riot-web; root = pkgs.riot-web;
}; };
</programlisting> </programlisting>
</para> </para>
<para> <para>

View File

@ -106,21 +106,21 @@ The unique option `services.httpd.adminAddr' is defined multiple times, in `/etc
configuration option is. The command <option>nixos-option</option> allows you configuration option is. The command <option>nixos-option</option> allows you
to find out: to find out:
<screen> <screen>
$ nixos-option <xref linkend="opt-services.xserver.enable"/> <prompt>$ </prompt>nixos-option <xref linkend="opt-services.xserver.enable"/>
true true
$ nixos-option <xref linkend="opt-boot.kernelModules"/> <prompt>$ </prompt>nixos-option <xref linkend="opt-boot.kernelModules"/>
[ "tun" "ipv6" "loop" <replaceable>...</replaceable> ] [ "tun" "ipv6" "loop" <replaceable>...</replaceable> ]
</screen> </screen>
Interactive exploration of the configuration is possible using <command>nix Interactive exploration of the configuration is possible using <command>nix
repl</command>, a read-eval-print loop for Nix expressions. A typical use: repl</command>, a read-eval-print loop for Nix expressions. A typical use:
<screen> <screen>
$ nix repl '&lt;nixpkgs/nixos>' <prompt>$ </prompt>nix repl '&lt;nixpkgs/nixos>'
nix-repl> config.<xref linkend="opt-networking.hostName"/> <prompt>nix-repl> </prompt>config.<xref linkend="opt-networking.hostName"/>
"mandark" "mandark"
nix-repl> map (x: x.hostName) config.<xref linkend="opt-services.httpd.virtualHosts"/> <prompt>nix-repl> </prompt>map (x: x.hostName) config.<xref linkend="opt-services.httpd.virtualHosts"/>
[ "example.org" "example.gov" ] [ "example.org" "example.gov" ]
</screen> </screen>
</para> </para>
@ -129,17 +129,17 @@ nix-repl> map (x: x.hostName) config.<xref linkend="opt-services.httpd.virtualHo
While abstracting your configuration, you may find it useful to generate While abstracting your configuration, you may find it useful to generate
modules using code, instead of writing files. The example below would have modules using code, instead of writing files. The example below would have
the same effect as importing a file which sets those options. the same effect as importing a file which sets those options.
<screen> <programlisting>
{ config, pkgs, ... }: { config, pkgs, ... }:
let netConfig = { hostName }: { let netConfig = { hostName }: {
networking.hostName = hostName; networking.hostName = hostName;
networking.useDHCP = false; networking.useDHCP = false;
}; };
in in
{ imports = [ (netConfig "nixos.localdomain") ]; } { imports = [ (netConfig "nixos.localdomain") ]; }
</screen> </programlisting>
</para> </para>
</section> </section>

View File

@ -16,7 +16,7 @@
imports = [ imports = [
&lt;nixpkgs/nixos/modules/profiles/profile-name.nix&gt; &lt;nixpkgs/nixos/modules/profiles/profile-name.nix&gt;
]; ];
</programlisting> </programlisting>
<para> <para>
Even if some of these profiles seem only useful in the context of install Even if some of these profiles seem only useful in the context of install
media, many are actually intended to be used in real installs. media, many are actually intended to be used in real installs.

View File

@ -44,7 +44,7 @@
A user ID (uid) is assigned automatically. You can also specify a uid A user ID (uid) is assigned automatically. You can also specify a uid
manually by adding manually by adding
<programlisting> <programlisting>
uid = 1000; uid = 1000;
</programlisting> </programlisting>
to the user specification. to the user specification.
</para> </para>

View File

@ -37,7 +37,7 @@
If you are using WPA2 you can generate pskRaw key using If you are using WPA2 you can generate pskRaw key using
<command>wpa_passphrase</command>: <command>wpa_passphrase</command>:
<screen> <screen>
$ wpa_passphrase ESSID PSK <prompt>$ </prompt>wpa_passphrase ESSID PSK
network={ network={
ssid="echelon" ssid="echelon"
#psk="abcdefgh" #psk="abcdefgh"
@ -54,10 +54,10 @@ network={
or you can use it to directly generate the or you can use it to directly generate the
<literal>wpa_supplicant.conf</literal>: <literal>wpa_supplicant.conf</literal>:
<screen> <screen>
# wpa_passphrase ESSID PSK > /etc/wpa_supplicant.conf</screen> <prompt># </prompt>wpa_passphrase ESSID PSK > /etc/wpa_supplicant.conf</screen>
After you have edited the <literal>wpa_supplicant.conf</literal>, you need to After you have edited the <literal>wpa_supplicant.conf</literal>, you need to
restart the wpa_supplicant service. restart the wpa_supplicant service.
<screen> <screen>
# systemctl restart wpa_supplicant.service</screen> <prompt># </prompt>systemctl restart wpa_supplicant.service</screen>
</para> </para>
</section> </section>

View File

@ -125,10 +125,12 @@
You will need to reboot after enabling this driver to prevent a clash with You will need to reboot after enabling this driver to prevent a clash with
other kernel modules. other kernel modules.
</para> </para>
<note>
<para> <para>
Note: for recent AMD GPUs you most likely want to keep either the defaults For recent AMD GPUs you most likely want to keep either the defaults
or <literal>"amdgpu"</literal> (both free). or <literal>"amdgpu"</literal> (both free).
</para> </para>
</note>
</simplesect> </simplesect>
<simplesect xml:id="sec-x11-touchpads"> <simplesect xml:id="sec-x11-touchpads">
<title>Touchpads</title> <title>Touchpads</title>
@ -157,4 +159,134 @@
versions. versions.
</para> </para>
</simplesect> </simplesect>
<simplesect xml:id="custom-xkb-layouts">
<title>Custom XKB layouts</title>
<para>
It is possible to install custom
<link xlink:href="https://en.wikipedia.org/wiki/X_keyboard_extension">
XKB
</link>
keyboard layouts using the option
<option>
<link linkend="opt-services.xserver.extraLayouts">
services.xserver.extraLayouts
</link>
</option>.
As a first example, we are going to create a layout based on the basic US
layout, with an additional layer to type some greek symbols by pressing the
right-alt key.
</para>
<para>
To do this we are going to create a <literal>us-greek</literal> file
with a <literal>xkb_symbols</literal> section.
</para>
<programlisting>
xkb_symbols &quot;us-greek&quot;
{
include &quot;us(basic)&quot; // includes the base US keys
include &quot;level3(ralt_switch)&quot; // configures right alt as a third level switch
key &lt;LatA&gt; { [ a, A, Greek_alpha ] };
key &lt;LatB&gt; { [ b, B, Greek_beta ] };
key &lt;LatG&gt; { [ g, G, Greek_gamma ] };
key &lt;LatD&gt; { [ d, D, Greek_delta ] };
key &lt;LatZ&gt; { [ z, Z, Greek_zeta ] };
};
</programlisting>
<para>
To install the layout, the filepath, a description and the list of
languages must be given:
</para>
<programlisting>
<xref linkend="opt-services.xserver.extraLayouts"/>.us-greek = {
description = "US layout with alt-gr greek";
languages = [ "eng" ];
symbolsFile = /path/to/us-greek;
}
</programlisting>
<note>
<para>
The name should match the one given to the
<literal>xkb_symbols</literal> block.
</para>
</note>
<para>
The layout should now be installed and ready to use: try it by
running <literal>setxkbmap us-greek</literal> and type
<literal>&lt;alt&gt;+a</literal>. To change the default the usual
<option>
<link linkend="opt-services.xserver.layout">
services.xserver.layout
</link>
</option>
option can still be used.
</para>
<para>
A layout can have several other components besides
<literal>xkb_symbols</literal>, for example we will define new
keycodes for some multimedia key and bind these to some symbol.
</para>
<para>
Use the <emphasis>xev</emphasis> utility from
<literal>pkgs.xorg.xev</literal> to find the codes of the keys of
interest, then create a <literal>media-key</literal> file to hold
the keycodes definitions
</para>
<programlisting>
xkb_keycodes &quot;media&quot;
{
&lt;volUp&gt; = 123;
&lt;volDown&gt; = 456;
}
</programlisting>
<para>
Now use the newly define keycodes in <literal>media-sym</literal>:
</para>
<programlisting>
xkb_symbols &quot;media&quot;
{
key.type = &quot;ONE_LEVEL&quot;;
key &lt;volUp&gt; { [ XF86AudioLowerVolume ] };
key &lt;volDown&gt; { [ XF86AudioRaiseVolume ] };
}
</programlisting>
<para>
As before, to install the layout do
</para>
<programlisting>
<xref linkend="opt-services.xserver.extraLayouts"/>.media = {
description = "Multimedia keys remapping";
languages = [ "eng" ];
symbolsFile = /path/to/media-key;
keycodesFile = /path/to/media-sym;
};
</programlisting>
<note>
<para>
The function <literal>pkgs.writeText &lt;filename&gt; &lt;content&gt;
</literal> can be useful if you prefer to keep the layout definitions
inside the NixOS configuration.
</para>
</note>
<para>
Unfortunately, the Xorg server does not (currently) support setting a
keymap directly but relies instead on XKB rules to select the matching
components (keycodes, types, ...) of a layout. This means that components
other than symbols won't be loaded by default. As a workaround, you
can set the keymap using <literal>setxkbmap</literal> at the start of the
session with:
</para>
<programlisting>
<xref linkend="opt-services.xserver.displayManager.sessionCommands"/> = "setxkbmap -keycodes media";
</programlisting>
<para>
To learn how to write layouts take a look at the XKB
<link xlink:href="https://www.x.org/releases/current/doc/xorg-docs/input/XKB-Enhancing.html#Defining_New_Layouts">
documentation
</link>. More example layouts can also be found
<link xlink:href="https://wiki.archlinux.org/index.php/X_KeyBoard_extension#Basic_examples">
here
</link>.
</para>
</simplesect>
</chapter> </chapter>

View File

@ -11,7 +11,7 @@
<link linkend="opt-services.xserver.desktopManager.xfce.enable">xfce.enable</link> = true; <link linkend="opt-services.xserver.desktopManager.xfce.enable">xfce.enable</link> = true;
<link linkend="opt-services.xserver.desktopManager.default">default</link> = "xfce"; <link linkend="opt-services.xserver.desktopManager.default">default</link> = "xfce";
}; };
</programlisting> </programlisting>
</para> </para>
<para> <para>
Optionally, <emphasis>compton</emphasis> can be enabled for nice graphical Optionally, <emphasis>compton</emphasis> can be enabled for nice graphical
@ -24,7 +24,7 @@
<link linkend="opt-services.compton.shadow">shadow</link> = true; <link linkend="opt-services.compton.shadow">shadow</link> = true;
<link linkend="opt-services.compton.fadeDelta">fadeDelta</link> = 4; <link linkend="opt-services.compton.fadeDelta">fadeDelta</link> = 4;
}; };
</programlisting> </programlisting>
</para> </para>
<para> <para>
Some Xfce programs are not installed automatically. To install them manually Some Xfce programs are not installed automatically. To install them manually
@ -37,7 +37,7 @@
To enable <emphasis>Thunar</emphasis> volume support, put To enable <emphasis>Thunar</emphasis> volume support, put
<programlisting> <programlisting>
<xref linkend="opt-services.xserver.desktopManager.xfce.enable"/> = true; <xref linkend="opt-services.xserver.desktopManager.xfce.enable"/> = true;
</programlisting> </programlisting>
into your <emphasis>configuration.nix</emphasis>. into your <emphasis>configuration.nix</emphasis>.
</para> </para>
</simplesect> </simplesect>
@ -58,14 +58,14 @@
on start (look at <command>journalctl --user -b</command>). on start (look at <command>journalctl --user -b</command>).
<programlisting> <programlisting>
Thunar:2410): GVFS-RemoteVolumeMonitor-WARNING **: remote volume monitor with dbus name org.gtk.Private.UDisks2VolumeMonitor is not supported Thunar:2410): GVFS-RemoteVolumeMonitor-WARNING **: remote volume monitor with dbus name org.gtk.Private.UDisks2VolumeMonitor is not supported
</programlisting> </programlisting>
This is caused by some needed GNOME services not running. This is all fixed This is caused by some needed GNOME services not running. This is all fixed
by enabling "Launch GNOME services on startup" in the Advanced tab of the by enabling "Launch GNOME services on startup" in the Advanced tab of the
Session and Startup settings panel. Alternatively, you can run this command Session and Startup settings panel. Alternatively, you can run this command
to do the same thing. to do the same thing.
<programlisting> <programlisting>
$ xfconf-query -c xfce4-session -p /compat/LaunchGNOME -s true <prompt>$ </prompt>xfconf-query -c xfce4-session -p /compat/LaunchGNOME -s true
</programlisting> </programlisting>
A log-out and re-log will be needed for this to take effect. A log-out and re-log will be needed for this to take effect.
</para> </para>
</simplesect> </simplesect>

View File

@ -5,55 +5,6 @@ with pkgs;
let let
lib = pkgs.lib; lib = pkgs.lib;
# Remove invisible and internal options.
optionsListVisible = lib.filter (opt: opt.visible && !opt.internal) (lib.optionAttrSetToDocList options);
# Replace functions by the string <function>
substFunction = x:
if builtins.isAttrs x then lib.mapAttrs (name: substFunction) x
else if builtins.isList x then map substFunction x
else if lib.isFunction x then "<function>"
else x;
# Generate DocBook documentation for a list of packages. This is
# what `relatedPackages` option of `mkOption` from
# ../../../lib/options.nix influences.
#
# Each element of `relatedPackages` can be either
# - a string: that will be interpreted as an attribute name from `pkgs`,
# - a list: that will be interpreted as an attribute path from `pkgs`,
# - an attrset: that can specify `name`, `path`, `package`, `comment`
# (either of `name`, `path` is required, the rest are optional).
genRelatedPackages = packages:
let
unpack = p: if lib.isString p then { name = p; }
else if lib.isList p then { path = p; }
else p;
describe = args:
let
title = args.title or null;
name = args.name or (lib.concatStringsSep "." args.path);
path = args.path or [ args.name ];
package = args.package or (lib.attrByPath path (throw "Invalid package attribute path `${toString path}'") pkgs);
in "<listitem>"
+ "<para><literal>${lib.optionalString (title != null) "${title} aka "}pkgs.${name} (${package.meta.name})</literal>"
+ lib.optionalString (!package.meta.available) " <emphasis>[UNAVAILABLE]</emphasis>"
+ ": ${package.meta.description or "???"}.</para>"
+ lib.optionalString (args ? comment) "\n<para>${args.comment}</para>"
# Lots of `longDescription's break DocBook, so we just wrap them into <programlisting>
+ lib.optionalString (package.meta ? longDescription) "\n<programlisting>${package.meta.longDescription}</programlisting>"
+ "</listitem>";
in "<itemizedlist>${lib.concatStringsSep "\n" (map (p: describe (unpack p)) packages)}</itemizedlist>";
optionsListDesc = lib.flip map optionsListVisible (opt: opt // {
# Clean up declaration sites to not refer to the NixOS source tree.
declarations = map stripAnyPrefixes opt.declarations;
}
// lib.optionalAttrs (opt ? example) { example = substFunction opt.example; }
// lib.optionalAttrs (opt ? default) { default = substFunction opt.default; }
// lib.optionalAttrs (opt ? type) { type = substFunction opt.type; }
// lib.optionalAttrs (opt ? relatedPackages && opt.relatedPackages != []) { relatedPackages = genRelatedPackages opt.relatedPackages; });
# We need to strip references to /nix/store/* from options, # We need to strip references to /nix/store/* from options,
# including any `extraSources` if some modules came from elsewhere, # including any `extraSources` if some modules came from elsewhere,
# or else the build will fail. # or else the build will fail.
@ -63,37 +14,13 @@ let
prefixesToStrip = map (p: "${toString p}/") ([ ../../.. ] ++ extraSources); prefixesToStrip = map (p: "${toString p}/") ([ ../../.. ] ++ extraSources);
stripAnyPrefixes = lib.flip (lib.fold lib.removePrefix) prefixesToStrip; stripAnyPrefixes = lib.flip (lib.fold lib.removePrefix) prefixesToStrip;
# Custom "less" that pushes up all the things ending in ".enable*" optionsDoc = buildPackages.nixosOptionsDoc {
# and ".package*" inherit options revision;
optionLess = a: b: transformOptions = opt: opt // {
let # Clean up declaration sites to not refer to the NixOS source tree.
ise = lib.hasPrefix "enable"; declarations = map stripAnyPrefixes opt.declarations;
isp = lib.hasPrefix "package"; };
cmp = lib.splitByAndCompare ise lib.compare };
(lib.splitByAndCompare isp lib.compare lib.compare);
in lib.compareLists cmp a.loc b.loc < 0;
# Customly sort option list for the man page.
optionsList = lib.sort optionLess optionsListDesc;
# Convert the list of options into an XML file.
optionsXML = builtins.toFile "options.xml" (builtins.toXML optionsList);
optionsDocBook = runCommand "options-db.xml" {} ''
optionsXML=${optionsXML}
if grep /nixpkgs/nixos/modules $optionsXML; then
echo "The manual appears to depend on the location of Nixpkgs, which is bad"
echo "since this prevents sharing via the NixOS channel. This is typically"
echo "caused by an option default that refers to a relative path (see above"
echo "for hints about the offending path)."
exit 1
fi
${buildPackages.libxslt.bin}/bin/xsltproc \
--stringparam revision '${revision}' \
-o intermediate.xml ${./options-to-docbook.xsl} $optionsXML
${buildPackages.libxslt.bin}/bin/xsltproc \
-o "$out" ${./postprocess-option-descriptions.xsl} intermediate.xml
'';
sources = lib.sourceFilesBySuffices ./. [".xml"]; sources = lib.sourceFilesBySuffices ./. [".xml"];
@ -108,7 +35,7 @@ let
generatedSources = runCommand "generated-docbook" {} '' generatedSources = runCommand "generated-docbook" {} ''
mkdir $out mkdir $out
ln -s ${modulesDoc} $out/modules.xml ln -s ${modulesDoc} $out/modules.xml
ln -s ${optionsDocBook} $out/options-db.xml ln -s ${optionsDoc.optionsDocBook} $out/options-db.xml
printf "%s" "${version}" > $out/version printf "%s" "${version}" > $out/version
''; '';
@ -234,22 +161,7 @@ let
in rec { in rec {
inherit generatedSources; inherit generatedSources;
# The NixOS options in JSON format. inherit (optionsDoc) optionsJSON optionsXML optionsDocBook;
optionsJSON = runCommand "options-json"
{ meta.description = "List of NixOS options in JSON format";
}
''
# Export list of options in different format.
dst=$out/share/doc/nixos
mkdir -p $dst
cp ${builtins.toFile "options.json" (builtins.unsafeDiscardStringContext (builtins.toJSON
(builtins.listToAttrs (map (o: { name = o.name; value = removeAttrs o ["name" "visible" "internal"]; }) optionsList))))
} $dst/options.json
mkdir -p $out/nix-support
echo "file json $dst/options.json" >> $out/nix-support/hydra-build-products
''; # */
# Generate the NixOS manual. # Generate the NixOS manual.
manualHTML = runCommand "nixos-manual-html" manualHTML = runCommand "nixos-manual-html"

View File

@ -14,14 +14,14 @@
Default CD/DVD configurations are available inside Default CD/DVD configurations are available inside
<filename>nixos/modules/installer/cd-dvd</filename>. <filename>nixos/modules/installer/cd-dvd</filename>.
<screen> <screen>
$ git clone https://github.com/NixOS/nixpkgs.git <prompt>$ </prompt>git clone https://github.com/NixOS/nixpkgs.git
$ cd nixpkgs/nixos <prompt>$ </prompt>cd nixpkgs/nixos
$ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd-dvd/installation-cd-minimal.nix default.nix</screen> <prompt>$ </prompt>nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd-dvd/installation-cd-minimal.nix default.nix</screen>
</para> </para>
<para> <para>
Before burning your CD/DVD, you can check the content of the image by Before burning your CD/DVD, you can check the content of the image by
mounting anywhere like suggested by the following command: mounting anywhere like suggested by the following command:
<screen> <screen>
# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso</screen> <prompt># </prompt>mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso</screen>
</para> </para>
</chapter> </chapter>

View File

@ -8,8 +8,8 @@
With the command <command>nix-build</command>, you can build specific parts With the command <command>nix-build</command>, you can build specific parts
of your NixOS configuration. This is done as follows: of your NixOS configuration. This is done as follows:
<screen> <screen>
$ cd <replaceable>/path/to/nixpkgs/nixos</replaceable> <prompt>$ </prompt>cd <replaceable>/path/to/nixpkgs/nixos</replaceable>
$ nix-build -A config.<replaceable>option</replaceable></screen> <prompt>$ </prompt>nix-build -A config.<replaceable>option</replaceable></screen>
where <replaceable>option</replaceable> is a NixOS option with type where <replaceable>option</replaceable> is a NixOS option with type
“derivation” (i.e. something that can be built). Attributes of interest “derivation” (i.e. something that can be built). Attributes of interest
include: include:
@ -28,7 +28,7 @@ $ nix-build -A config.<replaceable>option</replaceable></screen>
<para> <para>
A shortcut to build this is: A shortcut to build this is:
<screen> <screen>
$ nix-build -A system</screen> <prompt>$ </prompt>nix-build -A system</screen>
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -66,9 +66,9 @@ $ nix-build -A system</screen>
test whether the kernel and the initial ramdisk boot correctly, by using test whether the kernel and the initial ramdisk boot correctly, by using
QEMUs <option>-kernel</option> and <option>-initrd</option> options: QEMUs <option>-kernel</option> and <option>-initrd</option> options:
<screen> <screen>
$ nix-build -A config.system.build.initialRamdisk -o initrd <prompt>$ </prompt>nix-build -A config.system.build.initialRamdisk -o initrd
$ nix-build -A config.system.build.kernel -o kernel <prompt>$ </prompt>nix-build -A config.system.build.kernel -o kernel
$ qemu-system-x86_64 -kernel ./kernel/bzImage -initrd ./initrd/initrd -hda /dev/null <prompt>$ </prompt>qemu-system-x86_64 -kernel ./kernel/bzImage -initrd ./initrd/initrd -hda /dev/null
</screen> </screen>
</para> </para>
</listitem> </listitem>
@ -99,15 +99,15 @@ $ qemu-system-x86_64 -kernel ./kernel/bzImage -initrd ./initrd/initrd -hda /dev/
contain dots (e.g. <literal>httpd.service</literal>), you need to put contain dots (e.g. <literal>httpd.service</literal>), you need to put
them between quotes, like this: them between quotes, like this:
<screen> <screen>
$ nix-build -A 'config.systemd.units."httpd.service".unit' <prompt>$ </prompt>nix-build -A 'config.systemd.units."httpd.service".unit'
</screen> </screen>
You can also test individual units, without rebuilding the whole system, You can also test individual units, without rebuilding the whole system,
by putting them in <filename>/run/systemd/system</filename>: by putting them in <filename>/run/systemd/system</filename>:
<screen> <screen>
$ cp $(nix-build -A 'config.systemd.units."httpd.service".unit')/httpd.service \ <prompt>$ </prompt>cp $(nix-build -A 'config.systemd.units."httpd.service".unit')/httpd.service \
/run/systemd/system/tmp-httpd.service /run/systemd/system/tmp-httpd.service
# systemctl daemon-reload <prompt># </prompt>systemctl daemon-reload
# systemctl start tmp-httpd.service <prompt># </prompt>systemctl start tmp-httpd.service
</screen> </screen>
Note that the unit must not have the same name as any unit in Note that the unit must not have the same name as any unit in
<filename>/etc/systemd/system</filename> since those take precedence over <filename>/etc/systemd/system</filename> since those take precedence over

View File

@ -346,6 +346,18 @@
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<varname>types.oneOf</varname> [ <replaceable>t1</replaceable> <replaceable>t2</replaceable> ... ]
</term>
<listitem>
<para>
Type <replaceable>t1</replaceable> or type <replaceable>t2</replaceable> and so forth,
e.g. <literal>with types; oneOf [ int str bool ]</literal>. Multiple definitions
cannot be merged.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<varname>types.coercedTo</varname> <replaceable>from</replaceable> <replaceable>f</replaceable> <replaceable>to</replaceable> <varname>types.coercedTo</varname> <replaceable>from</replaceable> <replaceable>f</replaceable> <replaceable>to</replaceable>

View File

@ -98,6 +98,16 @@
<literal>stableBranch</literal> set to false. <literal>stableBranch</literal> set to false.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Remove attributes that we know we will not be able to support,
especially if there is a stable alternative. E.g. Check that our
Linux kernels'
<link xlink:href="https://www.kernel.org/category/releases.html">
projected end-of-life</link> are after our release projected
end-of-life
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Edit changelog at Edit changelog at
@ -210,6 +220,30 @@
</itemizedlist> </itemizedlist>
</section> </section>
</section> </section>
<section xml:id="release-managers">
<title>Release Management Team</title>
<para>
For each release there are two release managers. After each release the
release manager having managed two releases steps down and the release
management team of the last release appoints a new release manager.
</para>
<para>
This makes sure a release management team always consists of one release
manager who already has managed one release and one release manager being
introduced to their role, making it easier to pass on knowledge and
experience.
</para>
<para>
A release manager's role and responsibilities are:
</para>
<itemizedlist>
<listitem><para>manage the release process</para></listitem>
<listitem><para>start discussions about features and changes for a given release</para></listitem>
<listitem><para>create a roadmap</para></listitem>
<listitem><para>release in cooperation with Eelco Dolstra</para></listitem>
<listitem><para>decide which bug fixes, features, etc... get backported after a release</para></listitem>
</itemizedlist>
</section>
<section xml:id="release-schedule"> <section xml:id="release-schedule">
<title>Release schedule</title> <title>Release schedule</title>

View File

@ -9,17 +9,17 @@
The test itself can be run interactively. This is particularly useful when The test itself can be run interactively. This is particularly useful when
developing or debugging a test: developing or debugging a test:
<screen> <screen>
$ nix-build nixos/tests/login.nix -A driver <prompt>$ </prompt>nix-build nixos/tests/login.nix -A driver
$ ./result/bin/nixos-test-driver <prompt>$ </prompt>./result/bin/nixos-test-driver
starting VDE switch for network 1 starting VDE switch for network 1
&gt; <prompt>&gt;</prompt>
</screen> </screen>
You can then take any Perl statement, e.g. You can then take any Perl statement, e.g.
<screen> <screen>
&gt; startAll <prompt>&gt;</prompt> startAll
&gt; testScript <prompt>&gt;</prompt> testScript
&gt; $machine->succeed("touch /tmp/foo") <prompt>&gt;</prompt> $machine->succeed("touch /tmp/foo")
&gt; print($machine->succeed("pwd")) # Show stdout of command <prompt>&gt;</prompt> print($machine->succeed("pwd")) # Show stdout of command
</screen> </screen>
The function <command>testScript</command> executes the entire test script The function <command>testScript</command> executes the entire test script
and drops you back into the test driver command line upon its completion. and drops you back into the test driver command line upon its completion.
@ -30,8 +30,8 @@ starting VDE switch for network 1
<para> <para>
To just start and experiment with the VMs, run: To just start and experiment with the VMs, run:
<screen> <screen>
$ nix-build nixos/tests/login.nix -A driver <prompt>$ </prompt>nix-build nixos/tests/login.nix -A driver
$ ./result/bin/nixos-run-vms <prompt>$ </prompt>./result/bin/nixos-run-vms
</screen> </screen>
The script <command>nixos-run-vms</command> starts the virtual machines The script <command>nixos-run-vms</command> starts the virtual machines
defined by test. defined by test.

View File

@ -12,12 +12,12 @@
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix">login.nix</filename>, xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix">login.nix</filename>,
you just do: you just do:
<screen> <screen>
$ nix-build '&lt;nixpkgs/nixos/tests/login.nix>' <prompt>$ </prompt>nix-build '&lt;nixpkgs/nixos/tests/login.nix>'
</screen> </screen>
or, if you dont want to rely on <envar>NIX_PATH</envar>: or, if you dont want to rely on <envar>NIX_PATH</envar>:
<screen> <screen>
$ cd /my/nixpkgs/nixos/tests <prompt>$ </prompt>cd /my/nixpkgs/nixos/tests
$ nix-build login.nix <prompt>$ </prompt>nix-build login.nix
running the VM test script running the VM test script
machine: QEMU running (pid 8841) machine: QEMU running (pid 8841)
@ -30,7 +30,7 @@ machine: QEMU running (pid 8841)
fast, as no disk image needs to be created. Afterwards, you can view a fast, as no disk image needs to be created. Afterwards, you can view a
pretty-printed log of the test: pretty-printed log of the test:
<screen> <screen>
$ firefox result/log.html <prompt>$ </prompt>firefox result/log.html
</screen> </screen>
</para> </para>
</section> </section>

View File

@ -11,10 +11,10 @@
modify NixOS, however, you should check out the latest sources from Git. This modify NixOS, however, you should check out the latest sources from Git. This
is as follows: is as follows:
<screen> <screen>
$ git clone https://github.com/NixOS/nixpkgs <prompt>$ </prompt>git clone https://github.com/NixOS/nixpkgs
$ cd nixpkgs <prompt>$ </prompt>cd nixpkgs
$ git remote add channels https://github.com/NixOS/nixpkgs-channels <prompt>$ </prompt>git remote add channels https://github.com/NixOS/nixpkgs-channels
$ git remote update channels <prompt>$ </prompt>git remote update channels
</screen> </screen>
This will check out the latest Nixpkgs sources to This will check out the latest Nixpkgs sources to
<filename>./nixpkgs</filename> the NixOS sources to <filename>./nixpkgs</filename> the NixOS sources to
@ -32,23 +32,23 @@ $ git remote update channels
not have caught up yet and youll have to rebuild everything from source. not have caught up yet and youll have to rebuild everything from source.
So you may want to create a local branch based on your current NixOS version: So you may want to create a local branch based on your current NixOS version:
<screen> <screen>
$ nixos-version <prompt>$ </prompt>nixos-version
17.09pre104379.6e0b727 (Hummingbird) 17.09pre104379.6e0b727 (Hummingbird)
$ git checkout -b local 6e0b727 <prompt>$ </prompt>git checkout -b local 6e0b727
</screen> </screen>
Or, to base your local branch on the latest version available in a NixOS Or, to base your local branch on the latest version available in a NixOS
channel: channel:
<screen> <screen>
$ git remote update channels <prompt>$ </prompt>git remote update channels
$ git checkout -b local channels/nixos-17.03 <prompt>$ </prompt>git checkout -b local channels/nixos-17.03
</screen> </screen>
(Replace <literal>nixos-17.03</literal> with the name of the channel you want (Replace <literal>nixos-17.03</literal> with the name of the channel you want
to use.) You can use <command>git merge</command> or <command>git to use.) You can use <command>git merge</command> or <command>git
rebase</command> to keep your local branch in sync with the channel, e.g. rebase</command> to keep your local branch in sync with the channel, e.g.
<screen> <screen>
$ git remote update channels <prompt>$ </prompt>git remote update channels
$ git merge channels/nixos-17.03 <prompt>$ </prompt>git merge channels/nixos-17.03
</screen> </screen>
You can use <command>git cherry-pick</command> to copy commits from your You can use <command>git cherry-pick</command> to copy commits from your
local branch to the upstream branch. local branch to the upstream branch.
@ -58,7 +58,7 @@ $ git merge channels/nixos-17.03
tell <command>nixos-rebuild</command> about them using the tell <command>nixos-rebuild</command> about them using the
<option>-I</option> flag: <option>-I</option> flag:
<screen> <screen>
# nixos-rebuild switch -I nixpkgs=<replaceable>/my/sources</replaceable>/nixpkgs <prompt># </prompt>nixos-rebuild switch -I nixpkgs=<replaceable>/my/sources</replaceable>/nixpkgs
</screen> </screen>
</para> </para>
<para> <para>
@ -67,7 +67,7 @@ $ git merge channels/nixos-17.03
<replaceable>/my/sources</replaceable>/nixpkgs</command>, or change the <replaceable>/my/sources</replaceable>/nixpkgs</command>, or change the
default by adding a symlink in <filename>~/.nix-defexpr</filename>: default by adding a symlink in <filename>~/.nix-defexpr</filename>:
<screen> <screen>
$ ln -s <replaceable>/my/sources</replaceable>/nixpkgs ~/.nix-defexpr/nixpkgs <prompt>$ </prompt>ln -s <replaceable>/my/sources</replaceable>/nixpkgs ~/.nix-defexpr/nixpkgs
</screen> </screen>
You may want to delete the symlink You may want to delete the symlink
<filename>~/.nix-defexpr/channels_root</filename> to prevent roots NixOS <filename>~/.nix-defexpr/channels_root</filename> to prevent roots NixOS

View File

@ -8,15 +8,15 @@
Building, burning, and booting from an installation CD is rather tedious, so Building, burning, and booting from an installation CD is rather tedious, so
here is a quick way to see if the installer works properly: here is a quick way to see if the installer works properly:
<screen> <screen>
# mount -t tmpfs none /mnt <prompt># </prompt>mount -t tmpfs none /mnt
# nixos-generate-config --root /mnt <prompt># </prompt>nixos-generate-config --root /mnt
$ nix-build '&lt;nixpkgs/nixos>' -A config.system.build.nixos-install <prompt>$ </prompt>nix-build '&lt;nixpkgs/nixos>' -A config.system.build.nixos-install
# ./result/bin/nixos-install</screen> <prompt># </prompt>./result/bin/nixos-install</screen>
To start a login shell in the new NixOS installation in To start a login shell in the new NixOS installation in
<filename>/mnt</filename>: <filename>/mnt</filename>:
<screen> <screen>
$ nix-build '&lt;nixpkgs/nixos>' -A config.system.build.nixos-enter <prompt>$ </prompt>nix-build '&lt;nixpkgs/nixos>' -A config.system.build.nixos-enter
# ./result/bin/nixos-enter <prompt># </prompt>./result/bin/nixos-enter
</screen> </screen>
</para> </para>
</chapter> </chapter>

View File

@ -397,9 +397,9 @@ startAll;
</para> </para>
<para> <para>
<programlisting> <programlisting>
$machine->systemctl("list-jobs --no-pager"); // runs `systemctl list-jobs --no-pager` $machine->systemctl("list-jobs --no-pager"); // runs `systemctl list-jobs --no-pager`
$machine->systemctl("list-jobs --no-pager", "any-user"); // spawns a shell for `any-user` and runs `systemctl --user list-jobs --no-pager` $machine->systemctl("list-jobs --no-pager", "any-user"); // spawns a shell for `any-user` and runs `systemctl --user list-jobs --no-pager`
</programlisting> </programlisting>
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -410,10 +410,10 @@ startAll;
To test user units declared by <literal>systemd.user.services</literal> the To test user units declared by <literal>systemd.user.services</literal> the
optional <literal>$user</literal> argument can be used: optional <literal>$user</literal> argument can be used:
<programlisting> <programlisting>
$machine->start; $machine->start;
$machine->waitForX; $machine->waitForX;
$machine->waitForUnit("xautolock.service", "x-session-user"); $machine->waitForUnit("xautolock.service", "x-session-user");
</programlisting> </programlisting>
This applies to <literal>systemctl</literal>, <literal>getUnitInfo</literal>, This applies to <literal>systemctl</literal>, <literal>getUnitInfo</literal>,
<literal>waitForUnit</literal>, <literal>startJob</literal> and <literal>waitForUnit</literal>, <literal>startJob</literal> and
<literal>stopJob</literal>. <literal>stopJob</literal>.

View File

@ -9,10 +9,18 @@
<link linkend="ch-configuration">changed something</link> in that file, you <link linkend="ch-configuration">changed something</link> in that file, you
should do should do
<screen> <screen>
# nixos-rebuild switch</screen> <prompt># </prompt>nixos-rebuild switch
</screen>
to build the new configuration, make it the default configuration for to build the new configuration, make it the default configuration for
booting, and try to realise the configuration in the running system (e.g., by booting, and try to realise the configuration in the running system (e.g., by
restarting system services). restarting system services).
<warning>
<para>
This command doesn't start/stop <link linkend="opt-systemd.user.services">user
services</link> automatically. <command>nixos-rebuild</command> only runs a
<literal>daemon-reload</literal> for each user with running user services.
</para>
</warning>
</para> </para>
<warning> <warning>
<para> <para>
@ -23,7 +31,8 @@
<para> <para>
You can also do You can also do
<screen> <screen>
# nixos-rebuild test</screen> <prompt># </prompt>nixos-rebuild test
</screen>
to build the configuration and switch the running system to it, but without to build the configuration and switch the running system to it, but without
making it the boot default. So if (say) the configuration locks up your making it the boot default. So if (say) the configuration locks up your
machine, you can just reboot to get back to a working configuration. machine, you can just reboot to get back to a working configuration.
@ -31,7 +40,8 @@
<para> <para>
There is also There is also
<screen> <screen>
# nixos-rebuild boot</screen> <prompt># </prompt>nixos-rebuild boot
</screen>
to build the configuration and make it the boot default, but not switch to it to build the configuration and make it the boot default, but not switch to it
now (so it will only take effect after the next reboot). now (so it will only take effect after the next reboot).
</para> </para>
@ -39,7 +49,8 @@
You can make your configuration show up in a different submenu of the GRUB 2 You can make your configuration show up in a different submenu of the GRUB 2
boot screen by giving it a different <emphasis>profile name</emphasis>, e.g. boot screen by giving it a different <emphasis>profile name</emphasis>, e.g.
<screen> <screen>
# nixos-rebuild switch -p test </screen> <prompt># </prompt>nixos-rebuild switch -p test
</screen>
which causes the new configuration (and previous ones created using which causes the new configuration (and previous ones created using
<literal>-p test</literal>) to show up in the GRUB submenu “NixOS - Profile <literal>-p test</literal>) to show up in the GRUB submenu “NixOS - Profile
'test'”. This can be useful to separate test configurations from 'test'”. This can be useful to separate test configurations from
@ -48,7 +59,8 @@
<para> <para>
Finally, you can do Finally, you can do
<screen> <screen>
$ nixos-rebuild build</screen> <prompt>$ </prompt>nixos-rebuild build
</screen>
to build the configuration but nothing more. This is useful to see whether to build the configuration but nothing more. This is useful to see whether
everything compiles cleanly. everything compiles cleanly.
</para> </para>
@ -58,8 +70,8 @@ $ nixos-rebuild build</screen>
<emphasis>virtual machine</emphasis> that contains the desired configuration. <emphasis>virtual machine</emphasis> that contains the desired configuration.
Just do Just do
<screen> <screen>
$ nixos-rebuild build-vm <prompt>$ </prompt>nixos-rebuild build-vm
$ ./result/bin/run-*-vm <prompt>$ </prompt>./result/bin/run-*-vm
</screen> </screen>
The VM does not have any data from your host system, so your existing user The VM does not have any data from your host system, so your existing user
accounts and home directories will not be available unless you have set accounts and home directories will not be available unless you have set
@ -74,12 +86,12 @@ $ ./result/bin/run-*-vm
guest. For instance, the following will forward host port 2222 to guest port guest. For instance, the following will forward host port 2222 to guest port
22 (SSH): 22 (SSH):
<screen> <screen>
$ QEMU_NET_OPTS="hostfwd=tcp::2222-:22" ./result/bin/run-*-vm <prompt>$ </prompt>QEMU_NET_OPTS="hostfwd=tcp::2222-:22" ./result/bin/run-*-vm
</screen> </screen>
allowing you to log in via SSH (assuming you have set the appropriate allowing you to log in via SSH (assuming you have set the appropriate
passwords or SSH authorized keys): passwords or SSH authorized keys):
<screen> <screen>
$ ssh -p 2222 localhost <prompt>$ </prompt>ssh -p 2222 localhost
</screen> </screen>
</para> </para>
</chapter> </chapter>

View File

@ -47,8 +47,8 @@
Short version: Short version:
</para> </para>
<screen> <screen>
$ curl https://nixos.org/nix/install | sh <prompt>$ </prompt>curl https://nixos.org/nix/install | sh
$ . $HOME/.nix-profile/etc/profile.d/nix.sh # …or open a fresh shell</screen> <prompt>$ </prompt>. $HOME/.nix-profile/etc/profile.d/nix.sh # …or open a fresh shell</screen>
<para> <para>
More details in the More details in the
<link <link
@ -65,14 +65,14 @@ $ . $HOME/.nix-profile/etc/profile.d/nix.sh # …or open a fresh shell</screen>
the <literal>nixpkgs</literal> channel by default. the <literal>nixpkgs</literal> channel by default.
</para> </para>
<screen> <screen>
$ nix-channel --list <prompt>$ </prompt>nix-channel --list
nixpkgs https://nixos.org/channels/nixpkgs-unstable</screen> nixpkgs https://nixos.org/channels/nixpkgs-unstable</screen>
<para> <para>
As that channel gets released without running the NixOS tests, it will be As that channel gets released without running the NixOS tests, it will be
safer to use the <literal>nixos-*</literal> channels instead: safer to use the <literal>nixos-*</literal> channels instead:
</para> </para>
<screen> <screen>
$ nix-channel --add https://nixos.org/channels/nixos-<replaceable>version</replaceable> nixpkgs</screen> <prompt>$ </prompt>nix-channel --add https://nixos.org/channels/nixos-<replaceable>version</replaceable> nixpkgs</screen>
<para> <para>
You may want to throw in a <literal>nix-channel --update</literal> for good You may want to throw in a <literal>nix-channel --update</literal> for good
measure. measure.
@ -89,7 +89,7 @@ $ nix-channel --add https://nixos.org/channels/nixos-<replaceable>version</repla
NixOS partition. They are installed by default on NixOS, but you don't have NixOS partition. They are installed by default on NixOS, but you don't have
NixOS yet.. NixOS yet..
</para> </para>
<screen>$ nix-env -iE "_: with import &lt;nixpkgs/nixos&gt; { configuration = {}; }; with config.system.build; [ nixos-generate-config nixos-install nixos-enter manual.manpages ]"</screen> <screen><prompt>$ </prompt>nix-env -iE "_: with import &lt;nixpkgs/nixos&gt; { configuration = {}; }; with config.system.build; [ nixos-generate-config nixos-install nixos-enter manual.manpages ]"</screen>
</listitem> </listitem>
<listitem> <listitem>
<note> <note>
@ -116,7 +116,7 @@ $ nix-channel --add https://nixos.org/channels/nixos-<replaceable>version</repla
<para> <para>
Generate your NixOS configuration: Generate your NixOS configuration:
</para> </para>
<screen>$ sudo `which nixos-generate-config` --root /mnt</screen> <screen><prompt>$ </prompt>sudo `which nixos-generate-config` --root /mnt</screen>
<para> <para>
You'll probably want to edit the configuration files. Refer to the You'll probably want to edit the configuration files. Refer to the
<literal>nixos-generate-config</literal> step in <literal>nixos-generate-config</literal> step in
@ -148,8 +148,8 @@ $ nix-channel --add https://nixos.org/channels/nixos-<replaceable>version</repla
distribution: distribution:
</para> </para>
<screen> <screen>
$ sudo groupadd -g 30000 nixbld <prompt>$ </prompt>sudo groupadd -g 30000 nixbld
$ sudo useradd -u 30000 -g nixbld -G nixbld nixbld</screen> <prompt>$ </prompt>sudo useradd -u 30000 -g nixbld -G nixbld nixbld</screen>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
@ -161,7 +161,7 @@ $ sudo useradd -u 30000 -g nixbld -G nixbld nixbld</screen>
existing systems without the help of a rescue USB drive or similar. existing systems without the help of a rescue USB drive or similar.
</para> </para>
</warning> </warning>
<screen>$ sudo PATH="$PATH" NIX_PATH="$NIX_PATH" `which nixos-install` --root /mnt</screen> <screen><prompt>$ </prompt>sudo PATH="$PATH" NIX_PATH="$NIX_PATH" `which nixos-install` --root /mnt</screen>
<para> <para>
Again, please refer to the <literal>nixos-install</literal> step in Again, please refer to the <literal>nixos-install</literal> step in
<xref linkend="sec-installation" /> for more information. <xref linkend="sec-installation" /> for more information.
@ -175,8 +175,8 @@ $ sudo useradd -u 30000 -g nixbld -G nixbld nixbld</screen>
Optionally, you may want to clean up your non-NixOS distribution: Optionally, you may want to clean up your non-NixOS distribution:
</para> </para>
<screen> <screen>
$ sudo userdel nixbld <prompt>$ </prompt>sudo userdel nixbld
$ sudo groupdel nixbld</screen> <prompt>$ </prompt>sudo groupdel nixbld</screen>
<para> <para>
If you do not wish to keep the Nix package manager installed either, run If you do not wish to keep the Nix package manager installed either, run
something like <literal>sudo rm -rv ~/.nix-* /nix</literal> and remove the something like <literal>sudo rm -rv ~/.nix-* /nix</literal> and remove the
@ -193,7 +193,7 @@ $ sudo groupdel nixbld</screen>
<para> <para>
Generate your NixOS configuration: Generate your NixOS configuration:
</para> </para>
<screen>$ sudo `which nixos-generate-config` --root /</screen> <screen><prompt>$ </prompt>sudo `which nixos-generate-config` --root /</screen>
<para> <para>
Note that this will place the generated configuration files in Note that this will place the generated configuration files in
<literal>/etc/nixos</literal>. You'll probably want to edit the <literal>/etc/nixos</literal>. You'll probably want to edit the
@ -212,21 +212,21 @@ $ sudo groupdel nixbld</screen>
</para> </para>
<programlisting> <programlisting>
<link linkend="opt-users.users._name__.initialHashedPassword">users.users.root.initialHashedPassword</link> = ""; <link linkend="opt-users.users._name__.initialHashedPassword">users.users.root.initialHashedPassword</link> = "";
</programlisting> </programlisting>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Build the NixOS closure and install it in the <literal>system</literal> Build the NixOS closure and install it in the <literal>system</literal>
profile: profile:
</para> </para>
<screen>$ nix-env -p /nix/var/nix/profiles/system -f '&lt;nixpkgs/nixos&gt;' -I nixos-config=/etc/nixos/configuration.nix -iA system</screen> <screen><prompt>$ </prompt>nix-env -p /nix/var/nix/profiles/system -f '&lt;nixpkgs/nixos&gt;' -I nixos-config=/etc/nixos/configuration.nix -iA system</screen>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Change ownership of the <literal>/nix</literal> tree to root (since your Change ownership of the <literal>/nix</literal> tree to root (since your
Nix install was probably single user): Nix install was probably single user):
</para> </para>
<screen>$ sudo chown -R 0.0 /nix</screen> <screen><prompt>$ </prompt>sudo chown -R 0.0 /nix</screen>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
@ -284,16 +284,16 @@ $ sudo groupdel nixbld</screen>
Let's create the files: Let's create the files:
</para> </para>
<screen> <screen>
$ sudo touch /etc/NIXOS <prompt>$ </prompt>sudo touch /etc/NIXOS
$ sudo touch /etc/NIXOS_LUSTRATE <prompt>$ </prompt>sudo touch /etc/NIXOS_LUSTRATE
</screen> </screen>
<para> <para>
Let's also make sure the NixOS configuration files are kept once we reboot Let's also make sure the NixOS configuration files are kept once we reboot
on NixOS: on NixOS:
</para> </para>
<screen> <screen>
$ echo etc/nixos | sudo tee -a /etc/NIXOS_LUSTRATE <prompt>$ </prompt>echo etc/nixos | sudo tee -a /etc/NIXOS_LUSTRATE
</screen> </screen>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
@ -312,8 +312,9 @@ $ echo etc/nixos | sudo tee -a /etc/NIXOS_LUSTRATE
</para> </para>
</warning> </warning>
<screen> <screen>
$ sudo mv -v /boot /boot.bak &amp;&amp; <prompt>$ </prompt>sudo mv -v /boot /boot.bak &amp;&amp;
sudo /nix/var/nix/profiles/system/bin/switch-to-configuration boot</screen> sudo /nix/var/nix/profiles/system/bin/switch-to-configuration boot
</screen>
<para> <para>
Cross your fingers, reboot, hopefully you should get a NixOS prompt! Cross your fingers, reboot, hopefully you should get a NixOS prompt!
</para> </para>

View File

@ -15,16 +15,16 @@
<note> <note>
<title>On macOS</title> <title>On macOS</title>
<para> <para>
<programlisting> <screen>
$ diskutil list <prompt>$ </prompt>diskutil list
[..] [..]
/dev/diskN (external, physical): /dev/diskN (external, physical):
#: TYPE NAME SIZE IDENTIFIER #: TYPE NAME SIZE IDENTIFIER
[..] [..]
$ diskutil unmountDisk diskN <prompt>$ </prompt>diskutil unmountDisk diskN
Unmount of all volumes on diskN was successful Unmount of all volumes on diskN was successful
$ sudo dd if=nix.iso of=/dev/rdiskN <prompt>$ </prompt>sudo dd if=nix.iso of=/dev/rdiskN
</programlisting> </screen>
Using the 'raw' <command>rdiskN</command> device instead of Using the 'raw' <command>rdiskN</command> device instead of
<command>diskN</command> completes in minutes instead of hours. After <command>diskN</command> completes in minutes instead of hours. After
<command>dd</command> completes, a GUI dialog "The disk you inserted was <command>dd</command> completes, a GUI dialog "The disk you inserted was

View File

@ -29,13 +29,14 @@
</para> </para>
<para> <para>
You are logged-in automatically as <literal>root</literal>. (The You are logged-in automatically as <literal>nixos</literal>.
<literal>root</literal> user account has an empty password.) The <literal>nixos</literal> user account has an empty password so you
can use <command>sudo</command> without a password.
</para> </para>
<para> <para>
If you downloaded the graphical ISO image, you can run <command>systemctl If you downloaded the graphical ISO image, you can run <command>systemctl
start display-manager</command> to start KDE. If you want to continue on the start display-manager</command> to start the desktop environment. If you want to continue on the
terminal, you can use <command>loadkeys</command> to switch to your terminal, you can use <command>loadkeys</command> to switch to your
preferred keyboard layout. (We even provide neo2 via <command>loadkeys de preferred keyboard layout. (We even provide neo2 via <command>loadkeys de
neo</command>!) neo</command>!)
@ -65,9 +66,9 @@
<para> <para>
If you would like to continue the installation from a different machine you If you would like to continue the installation from a different machine you
need to activate the SSH daemon via <literal>systemctl start need to activate the SSH daemon via <command>systemctl start
sshd</literal>. In order to be able to login you also need to set a sshd</command>. You then must set a password for either <literal>root</literal> or
password for <literal>root</literal> using <literal>passwd</literal>. <literal>nixos</literal> with <command>passwd></command> to be able to login.
</para> </para>
</section> </section>
</section> </section>
@ -110,7 +111,7 @@
<listitem> <listitem>
<para> <para>
Create a <emphasis>GPT</emphasis> partition table. Create a <emphasis>GPT</emphasis> partition table.
<screen language="commands"># parted /dev/sda -- mklabel gpt</screen> <screen language="commands"><prompt># </prompt>parted /dev/sda -- mklabel gpt</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -118,14 +119,14 @@
Add the <emphasis>root</emphasis> partition. This will fill the disk Add the <emphasis>root</emphasis> partition. This will fill the disk
except for the end part, where the swap will live, and the space left in except for the end part, where the swap will live, and the space left in
front (512MiB) which will be used by the boot partition. front (512MiB) which will be used by the boot partition.
<screen language="commands"># parted /dev/sda -- mkpart primary 512MiB -8GiB</screen> <screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart primary 512MiB -8GiB</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Next, add a <emphasis>swap</emphasis> partition. The size required will Next, add a <emphasis>swap</emphasis> partition. The size required will
vary according to needs, here a 8GiB one is created. vary according to needs, here a 8GiB one is created.
<screen language="commands"># parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen> <screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
<note> <note>
<para> <para>
The swap partition size rules are no different than for other Linux The swap partition size rules are no different than for other Linux
@ -140,8 +141,8 @@
the ESP (EFI system partition) as its <emphasis>/boot</emphasis> the ESP (EFI system partition) as its <emphasis>/boot</emphasis>
partition. It uses the initially reserved 512MiB at the start of the partition. It uses the initially reserved 512MiB at the start of the
disk. disk.
<screen language="commands"># parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB <screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB
# parted /dev/sda -- set 3 boot on</screen> <prompt># </prompt>parted /dev/sda -- set 3 boot on</screen>
</para> </para>
</listitem> </listitem>
</orderedlist> </orderedlist>
@ -172,21 +173,21 @@
<listitem> <listitem>
<para> <para>
Create a <emphasis>MBR</emphasis> partition table. Create a <emphasis>MBR</emphasis> partition table.
<screen language="commands"># parted /dev/sda -- mklabel msdos</screen> <screen language="commands"><prompt># </prompt>parted /dev/sda -- mklabel msdos</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add the <emphasis>root</emphasis> partition. This will fill the the disk Add the <emphasis>root</emphasis> partition. This will fill the the disk
except for the end part, where the swap will live. except for the end part, where the swap will live.
<screen language="commands"># parted /dev/sda -- mkpart primary 1MiB -8GiB</screen> <screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart primary 1MiB -8GiB</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Finally, add a <emphasis>swap</emphasis> partition. The size required Finally, add a <emphasis>swap</emphasis> partition. The size required
will vary according to needs, here a 8GiB one is created. will vary according to needs, here a 8GiB one is created.
<screen language="commands"># parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen> <screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
<note> <note>
<para> <para>
The swap partition size rules are no different than for other Linux The swap partition size rules are no different than for other Linux
@ -218,7 +219,7 @@
since this makes the file system configuration independent from device since this makes the file system configuration independent from device
changes. For example: changes. For example:
<screen> <screen>
# mkfs.ext4 -L nixos /dev/sda1</screen> <prompt># </prompt>mkfs.ext4 -L nixos /dev/sda1</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -227,7 +228,7 @@
recommended to assign a label to the swap partition: <option>-L recommended to assign a label to the swap partition: <option>-L
<replaceable>label</replaceable></option>. For example: <replaceable>label</replaceable></option>. For example:
<screen> <screen>
# mkswap -L swap /dev/sda2</screen> <prompt># </prompt>mkswap -L swap /dev/sda2</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -242,7 +243,7 @@
its recommended to assign a label to the boot partition: its recommended to assign a label to the boot partition:
<option>-n <replaceable>label</replaceable></option>. For example: <option>-n <replaceable>label</replaceable></option>. For example:
<screen> <screen>
# mkfs.fat -F 32 -n boot /dev/sda3</screen> <prompt># </prompt>mkfs.fat -F 32 -n boot /dev/sda3</screen>
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -273,7 +274,7 @@
Mount the target file system on which NixOS should be installed on Mount the target file system on which NixOS should be installed on
<filename>/mnt</filename>, e.g. <filename>/mnt</filename>, e.g.
<screen> <screen>
# mount /dev/disk/by-label/nixos /mnt <prompt># </prompt>mount /dev/disk/by-label/nixos /mnt
</screen> </screen>
</para> </para>
</listitem> </listitem>
@ -287,8 +288,8 @@
<para> <para>
Mount the boot file system on <filename>/mnt/boot</filename>, e.g. Mount the boot file system on <filename>/mnt/boot</filename>, e.g.
<screen> <screen>
# mkdir -p /mnt/boot <prompt># </prompt>mkdir -p /mnt/boot
# mount /dev/disk/by-label/boot /mnt/boot <prompt># </prompt>mount /dev/disk/by-label/boot /mnt/boot
</screen> </screen>
</para> </para>
</listitem> </listitem>
@ -303,7 +304,7 @@
the build actions that it may spawn) may need quite a bit of RAM, the build actions that it may spawn) may need quite a bit of RAM,
depending on your configuration. depending on your configuration.
<screen> <screen>
# swapon /dev/sda2</screen> <prompt># </prompt>swapon /dev/sda2</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -325,16 +326,16 @@
The command <command>nixos-generate-config</command> can generate an The command <command>nixos-generate-config</command> can generate an
initial configuration file for you: initial configuration file for you:
<screen> <screen>
# nixos-generate-config --root /mnt</screen> <prompt># </prompt>nixos-generate-config --root /mnt</screen>
You should then edit <filename>/mnt/etc/nixos/configuration.nix</filename> You should then edit <filename>/mnt/etc/nixos/configuration.nix</filename>
to suit your needs: to suit your needs:
<screen> <screen>
# nano /mnt/etc/nixos/configuration.nix <prompt># </prompt>nano /mnt/etc/nixos/configuration.nix
</screen> </screen>
If youre using the graphical ISO image, other editors may be available If youre using the graphical ISO image, other editors may be available
(such as <command>vim</command>). If you have network access, you can also (such as <command>vim</command>). If you have network access, you can also
install other editors — for instance, you can install Emacs by running install other editors — for instance, you can install Emacs by running
<literal>nix-env -i emacs</literal>. <literal>nix-env -f '&lt;nixpkgs&gt;' -iA emacs</literal>.
</para> </para>
<variablelist> <variablelist>
<varlistentry> <varlistentry>
@ -412,7 +413,7 @@
<para> <para>
Do the installation: Do the installation:
<screen> <screen>
# nixos-install</screen> <prompt># </prompt>nixos-install</screen>
Cross fingers. If this fails due to a temporary problem (such as a network Cross fingers. If this fails due to a temporary problem (such as a network
issue while downloading binaries from the NixOS binary cache), you can issue while downloading binaries from the NixOS binary cache), you can
just re-run <command>nixos-install</command>. Otherwise, fix your just re-run <command>nixos-install</command>. Otherwise, fix your
@ -439,7 +440,7 @@ Retype new UNIX password: ***</screen>
<para> <para>
If everything went well: If everything went well:
<screen> <screen>
# reboot</screen> <prompt># </prompt>reboot</screen>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -460,16 +461,16 @@ Retype new UNIX password: ***</screen>
Youll probably want to create some user accounts as well, which can be Youll probably want to create some user accounts as well, which can be
done with <command>useradd</command>: done with <command>useradd</command>:
<screen> <screen>
$ useradd -c 'Eelco Dolstra' -m eelco <prompt>$ </prompt>useradd -c 'Eelco Dolstra' -m eelco
$ passwd eelco</screen> <prompt>$ </prompt>passwd eelco</screen>
</para> </para>
<para> <para>
You may also want to install some software. For instance, You may also want to install some software. For instance,
<screen> <screen>
$ nix-env -qa \*</screen> <prompt>$ </prompt>nix-env -qaP \*</screen>
shows what packages are available, and shows what packages are available, and
<screen> <screen>
$ nix-env -i w3m</screen> <prompt>$ </prompt>nix-env -f '&lt;nixpkgs&gt;' -iA w3m</screen>
install the <literal>w3m</literal> browser. install the <literal>w3m</literal> browser.
</para> </para>
</listitem> </listitem>
@ -489,19 +490,19 @@ $ nix-env -i w3m</screen>
<example xml:id="ex-partition-scheme-MBR"> <example xml:id="ex-partition-scheme-MBR">
<title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (MBR)</title> <title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (MBR)</title>
<screen language="commands"> <screen language="commands">
# parted /dev/sda -- mklabel msdos <prompt># </prompt>parted /dev/sda -- mklabel msdos
# parted /dev/sda -- mkpart primary 1MiB -8GiB <prompt># </prompt>parted /dev/sda -- mkpart primary 1MiB -8GiB
# parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen> <prompt># </prompt>parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
</example> </example>
<example xml:id="ex-partition-scheme-UEFI"> <example xml:id="ex-partition-scheme-UEFI">
<title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (UEFI)</title> <title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (UEFI)</title>
<screen language="commands"> <screen language="commands">
# parted /dev/sda -- mklabel gpt <prompt># </prompt>parted /dev/sda -- mklabel gpt
# parted /dev/sda -- mkpart primary 512MiB -8GiB <prompt># </prompt>parted /dev/sda -- mkpart primary 512MiB -8GiB
# parted /dev/sda -- mkpart primary linux-swap -8GiB 100% <prompt># </prompt>parted /dev/sda -- mkpart primary linux-swap -8GiB 100%
# parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB <prompt># </prompt>parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB
# parted /dev/sda -- set 3 boot on</screen> <prompt># </prompt>parted /dev/sda -- set 3 boot on</screen>
</example> </example>
<example xml:id="ex-install-sequence"> <example xml:id="ex-install-sequence">
@ -509,23 +510,23 @@ $ nix-env -i w3m</screen>
<para> <para>
With a partitioned disk. With a partitioned disk.
<screen language="commands"> <screen language="commands">
# mkfs.ext4 -L nixos /dev/sda1 <prompt># </prompt>mkfs.ext4 -L nixos /dev/sda1
# mkswap -L swap /dev/sda2 <prompt># </prompt>mkswap -L swap /dev/sda2
# swapon /dev/sda2 <prompt># </prompt>swapon /dev/sda2
# mkfs.fat -F 32 -n boot /dev/sda3 # <lineannotation>(for UEFI systems only)</lineannotation> <prompt># </prompt>mkfs.fat -F 32 -n boot /dev/sda3 # <lineannotation>(for UEFI systems only)</lineannotation>
# mount /dev/disk/by-label/nixos /mnt <prompt># </prompt>mount /dev/disk/by-label/nixos /mnt
# mkdir -p /mnt/boot # <lineannotation>(for UEFI systems only)</lineannotation> <prompt># </prompt>mkdir -p /mnt/boot # <lineannotation>(for UEFI systems only)</lineannotation>
# mount /dev/disk/by-label/boot /mnt/boot # <lineannotation>(for UEFI systems only)</lineannotation> <prompt># </prompt>mount /dev/disk/by-label/boot /mnt/boot # <lineannotation>(for UEFI systems only)</lineannotation>
# nixos-generate-config --root /mnt <prompt># </prompt>nixos-generate-config --root /mnt
# nano /mnt/etc/nixos/configuration.nix <prompt># </prompt>nano /mnt/etc/nixos/configuration.nix
# nixos-install <prompt># </prompt>nixos-install
# reboot</screen> <prompt># </prompt>reboot</screen>
</para> </para>
</example> </example>
<example xml:id='ex-config'> <example xml:id='ex-config'>
<title>NixOS Configuration</title> <title>NixOS Configuration</title>
<screen> <programlisting>
{ config, pkgs, ... }: { { config, pkgs, ... }: {
imports = [ imports = [
# Include the results of the hardware scan. # Include the results of the hardware scan.
@ -543,7 +544,7 @@ $ nix-env -i w3m</screen>
# Enable the OpenSSH server. # Enable the OpenSSH server.
services.sshd.enable = true; services.sshd.enable = true;
} }
</screen> </programlisting>
</example> </example>
</section> </section>
<section xml:id="sec-installation-additional-notes"> <section xml:id="sec-installation-additional-notes">

View File

@ -35,6 +35,12 @@
<replaceable>shell-command</replaceable> <replaceable>shell-command</replaceable>
</arg> </arg>
<arg>
<arg choice='plain'>
<option>--silent</option>
</arg>
</arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--help</option> <option>--help</option>
@ -100,6 +106,16 @@
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<option>--silent</option>
</term>
<listitem>
<para>
Suppresses all output from the activation script of the target system.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<option>--</option> <option>--</option>

View File

@ -154,7 +154,7 @@
file systems on <filename>/mnt</filename> and file systems on <filename>/mnt</filename> and
<filename>/mnt/boot</filename>, you would run: <filename>/mnt/boot</filename>, you would run:
<screen> <screen>
$ nixos-generate-config --root /mnt <prompt>$ </prompt>nixos-generate-config --root /mnt
</screen> </screen>
The resulting file The resulting file
<filename>/mnt/etc/nixos/hardware-configuration.nix</filename> might look <filename>/mnt/etc/nixos/hardware-configuration.nix</filename> might look
@ -204,7 +204,7 @@ $ nixos-generate-config --root /mnt
<para> <para>
After installation, if your hardware configuration changes, you can run: After installation, if your hardware configuration changes, you can run:
<screen> <screen>
$ nixos-generate-config <prompt>$ </prompt>nixos-generate-config
</screen> </screen>
to update <filename>/etc/nixos/hardware-configuration.nix</filename>. Your to update <filename>/etc/nixos/hardware-configuration.nix</filename>. Your
<filename>/etc/nixos/configuration.nix</filename> will <filename>/etc/nixos/configuration.nix</filename> will

View File

@ -255,12 +255,12 @@
on an <literal>ext4</literal> file system created in on an <literal>ext4</literal> file system created in
<filename>/dev/sda1</filename>: <filename>/dev/sda1</filename>:
<screen> <screen>
$ mkfs.ext4 /dev/sda1 <prompt>$ </prompt>mkfs.ext4 /dev/sda1
$ mount /dev/sda1 /mnt <prompt>$ </prompt>mount /dev/sda1 /mnt
$ nixos-generate-config --root /mnt <prompt>$ </prompt>nixos-generate-config --root /mnt
$ # edit /mnt/etc/nixos/configuration.nix <prompt>$ </prompt># edit /mnt/etc/nixos/configuration.nix
$ nixos-install <prompt>$ </prompt>nixos-install
$ reboot <prompt>$ </prompt>reboot
</screen> </screen>
</para> </para>
</refsection> </refsection>

View File

@ -103,13 +103,13 @@
<title>Examples</title> <title>Examples</title>
<para> <para>
Investigate option values: Investigate option values:
<screen>$ nixos-option boot.loader <screen><prompt>$ </prompt>nixos-option boot.loader
This attribute set contains: This attribute set contains:
generationsDir generationsDir
grub grub
initScript initScript
$ nixos-option boot.loader.grub.enable <prompt>$ </prompt>nixos-option boot.loader.grub.enable
Value: Value:
true true

View File

@ -90,6 +90,35 @@
<arg> <arg>
<option>--show-trace</option> <option>--show-trace</option>
</arg> </arg>
<arg>
<option>-I</option>
<replaceable>path</replaceable>
</arg>
<arg>
<group choice='req'>
<arg choice='plain'><option>--verbose</option></arg>
<arg choice='plain'><option>-v</option></arg>
</group>
</arg>
<arg>
<group choice='req'>
<arg choice='plain'><option>--max-jobs</option></arg>
<arg choice='plain'><option>-j</option></arg>
</group>
<replaceable>number</replaceable>
</arg>
<arg>
<group choice='req'>
<arg choice='plain'><option>--keep-failed</option></arg>
<arg choice='plain'><option>-K</option></arg>
</group>
</arg>
<arg>
<group choice='req'>
<arg choice='plain'><option>--keep-going</option></arg>
<arg choice='plain'><option>-k</option></arg>
</group>
</arg>
</cmdsynopsis> </cmdsynopsis>
</refsynopsisdiv> </refsynopsisdiv>
<refsection> <refsection>
@ -101,7 +130,8 @@
NixOS module, you must run <command>nixos-rebuild</command> to make the NixOS module, you must run <command>nixos-rebuild</command> to make the
changes take effect. It builds the new system in changes take effect. It builds the new system in
<filename>/nix/store</filename>, runs its activation script, and stop and <filename>/nix/store</filename>, runs its activation script, and stop and
(re)starts any system services if needed. (re)starts any system services if needed. Please note that user services need
to be started manually as they aren't detected by the activation script at the moment.
</para> </para>
<para> <para>
This command has one required argument, which specifies the desired This command has one required argument, which specifies the desired
@ -160,7 +190,7 @@
the current directory, which points to the output of the top-level the current directory, which points to the output of the top-level
“system” derivation. This is essentially the same as doing “system” derivation. This is essentially the same as doing
<screen> <screen>
$ nix-build /path/to/nixpkgs/nixos -A system <prompt>$ </prompt>nix-build /path/to/nixpkgs/nixos -A system
</screen> </screen>
Note that you do not need to be <literal>root</literal> to run Note that you do not need to be <literal>root</literal> to run
<command>nixos-rebuild build</command>. <command>nixos-rebuild build</command>.
@ -215,8 +245,8 @@ $ nix-build /path/to/nixpkgs/nixos -A system
at the script that starts the VM. Thus, to test a NixOS configuration in at the script that starts the VM. Thus, to test a NixOS configuration in
a virtual machine, you should do the following: a virtual machine, you should do the following:
<screen> <screen>
$ nixos-rebuild build-vm <prompt>$ </prompt>nixos-rebuild build-vm
$ ./result/bin/run-*-vm <prompt>$ </prompt>./result/bin/run-*-vm
</screen> </screen>
</para> </para>
<para> <para>
@ -375,7 +405,7 @@ $ ./result/bin/run-*-vm
<filename>test.nix</filename> without affecting the default system <filename>test.nix</filename> without affecting the default system
profile, you would do: profile, you would do:
<screen> <screen>
$ nixos-rebuild switch -p test -I nixos-config=./test.nix <prompt>$ </prompt>nixos-rebuild switch -p test -I nixos-config=./test.nix
</screen> </screen>
The new configuration will appear in the GRUB 2 submenu “NixOS - The new configuration will appear in the GRUB 2 submenu “NixOS -
Profile 'test'”. Profile 'test'”.

View File

@ -6,7 +6,7 @@
<author><personname><firstname>Eelco</firstname><surname>Dolstra</surname></personname> <author><personname><firstname>Eelco</firstname><surname>Dolstra</surname></personname>
<contrib>Author</contrib> <contrib>Author</contrib>
</author> </author>
<copyright><year>2007-2018</year><holder>Eelco Dolstra</holder> <copyright><year>2007-2019</year><holder>Eelco Dolstra</holder>
</copyright> </copyright>
</info> </info>
<xi:include href="man-configuration.xml" /> <xi:include href="man-configuration.xml" />

View File

@ -627,7 +627,7 @@ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA haskellPackages.pandoc
In case of an infinite loop, use the <command>--show-trace</command> In case of an infinite loop, use the <command>--show-trace</command>
command line argument and read the line just above the error message. command line argument and read the line just above the error message.
<screen> <screen>
$ nixos-rebuild build --show-trace <prompt>$ </prompt>nixos-rebuild build --show-trace
while evaluating the module argument `pkgs' in "/etc/nixos/my-module.nix": while evaluating the module argument `pkgs' in "/etc/nixos/my-module.nix":
infinite recursion encountered infinite recursion encountered

Some files were not shown because too many files have changed in this diff Show More