Merge branch 'master' into postgresql-plugins-bin

This commit is contained in:
Danylo Hlynskyi 2019-07-16 11:32:52 +03:00 committed by GitHub
commit 475f1ebd98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4817 changed files with 114960 additions and 70598 deletions

3
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,3 @@
# These are supported funding model platforms
custom: https://nixos.org/nixos/foundation.html

View File

@ -15,7 +15,7 @@
- [ ] 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).
--- ---

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

@ -480,9 +480,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 +491,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 +537,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,25 +35,25 @@
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
echo I can write data to the Nix store > $out/message echo I can write data to the Nix store > $out/message
echo I can also run basic commands like: echo I can also run basic commands like:
echo ls echo ls
ls ls
echo whoami echo whoami
whoami whoami
echo date echo date
date date
'' ''
</programlisting> </programlisting>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>

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,22 +178,22 @@ $ 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";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "ericbmerritt"; owner = "ericbmerritt";
repo = "hex2nix"; repo = "hex2nix";
rev = "${version}"; rev = "${version}";
sha256 = "1w7xjidz1l5yjmhlplfx7kphmnpvqm67w99hd2m7kdixwdxq0zqg"; sha256 = "1w7xjidz1l5yjmhlplfx7kphmnpvqm67w99hd2m7kdixwdxq0zqg";
}; };
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,29 +228,29 @@ $ 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";
src = fetchHex { src = fetchHex {
pkg = "cowboy"; pkg = "cowboy";
version = "1.0.4"; version = "1.0.4";
sha256 = "6a0edee96885fae3a8dd0ac1f333538a42e807db638a9453064ccfdaa6b9fdac"; sha256 = "6a0edee96885fae3a8dd0ac1f333538a42e807db638a9453064ccfdaa6b9fdac";
}; };
beamDeps = [ cowlib ranch ]; beamDeps = [ cowlib ranch ];
meta = { meta = {
description = '' description = ''
Small, fast, modular HTTP server written in Erlang Small, fast, modular HTTP server written in Erlang
''; '';
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,56 +262,56 @@ $ 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";
src = fetchHex { src = fetchHex {
pkg = "absinthe_plug"; pkg = "absinthe_plug";
version = "1.0.0"; version = "1.0.0";
sha256 = "08459823fe1fd4f0325a8bf0c937a4520583a5a26d73b193040ab30a1dfc0b33"; sha256 = "08459823fe1fd4f0325a8bf0c937a4520583a5a26d73b193040ab30a1dfc0b33";
}; };
beamDeps = [ plug absinthe ]; beamDeps = [ plug absinthe ];
meta = { meta = {
description = '' description = ''
A plug for Absinthe, an experimental GraphQL toolkit A plug for Absinthe, an experimental GraphQL toolkit
''; '';
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";
sha256 = "08459823fe1fd4f0325a8bf0c937a4520583a5a26d73b193040ab30a1dfc0b33"; sha256 = "08459823fe1fd4f0325a8bf0c937a4520583a5a26d73b193040ab30a1dfc0b33";
builder = buildMix; builder = buildMix;
beamDeps = [ plug absinthe ]; beamDeps = [ plug absinthe ];
meta = { meta = {
description = '' description = ''
A plug for Absinthe, an experimental GraphQL toolkit A plug for Absinthe, an experimental GraphQL toolkit
''; '';
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

@ -953,7 +953,7 @@ is essentially a "free software" license (BSD3), according to
paragraph 2 of the LGPL, GHC must be distributed under the terms of the LGPL! paragraph 2 of the LGPL, GHC must be distributed under the terms of the LGPL!
To work around these problems GHC can be build with a slower but LGPL-free To work around these problems GHC can be build with a slower but LGPL-free
alternative implemention for Integer called alternative implementation for Integer called
[integer-simple](http://hackage.haskell.org/package/integer-simple). [integer-simple](http://hackage.haskell.org/package/integer-simple).
To get a GHC compiler build with `integer-simple` instead of `integer-gmp` use To get a GHC compiler build with `integer-simple` instead of `integer-gmp` use

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:

View File

@ -68,7 +68,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>

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>.)
@ -148,7 +148,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 +156,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

@ -594,6 +594,7 @@ All parameters from `stdenv.mkDerivation` function are still supported. The foll
* `catchConflicts ? true`: If `true`, abort package build if a package name appears more than once in dependency tree. Default is `true`. * `catchConflicts ? true`: If `true`, abort package build if a package name appears more than once in dependency tree. Default is `true`.
* `disabled` ? false: If `true`, package is not build for the particular Python interpreter version. * `disabled` ? false: If `true`, package is not build for the particular Python interpreter version.
* `dontWrapPythonPrograms ? false`: Skip wrapping of python programs. * `dontWrapPythonPrograms ? false`: Skip wrapping of python programs.
* `permitUserSite ? false`: Skip setting the `PYTHONNOUSERSITE` environment variable in wrapped programs.
* `installFlags ? []`: A list of strings. Arguments to be passed to `pip install`. To pass options to `python setup.py install`, use `--install-option`. E.g., `installFlags=["--install-option='--cpp_implementation'"]`. * `installFlags ? []`: A list of strings. Arguments to be passed to `pip install`. To pass options to `python setup.py install`, use `--install-option`. E.g., `installFlags=["--install-option='--cpp_implementation'"]`.
* `format ? "setuptools"`: Format of the source. Valid options are `"setuptools"`, `"pyproject"`, `"flit"`, `"wheel"`, and `"other"`. `"setuptools"` is for when the source has a `setup.py` and `setuptools` is used to build a wheel, `flit`, in case `flit` should be used to build a wheel, and `wheel` in case a wheel is provided. Use `other` when a custom `buildPhase` and/or `installPhase` is needed. * `format ? "setuptools"`: Format of the source. Valid options are `"setuptools"`, `"pyproject"`, `"flit"`, `"wheel"`, and `"other"`. `"setuptools"` is for when the source has a `setup.py` and `setuptools` is used to build a wheel, `flit`, in case `flit` should be used to build a wheel, and `wheel` in case a wheel is provided. Use `other` when a custom `buildPhase` and/or `installPhase` is needed.
* `makeWrapperArgs ? []`: A list of strings. Arguments to be passed to `makeWrapper`, which wraps generated binaries. By default, the arguments to `makeWrapper` set `PATH` and `PYTHONPATH` environment variables before calling the binary. Additional arguments here can allow a developer to set environment variables which will be available when the binary is run. For example, `makeWrapperArgs = ["--set FOO BAR" "--set BAZ QUX"]`. * `makeWrapperArgs ? []`: A list of strings. Arguments to be passed to `makeWrapper`, which wraps generated binaries. By default, the arguments to `makeWrapper` set `PATH` and `PYTHONPATH` environment variables before calling the binary. Additional arguments here can allow a developer to set environment variables which will be available when the binary is run. For example, `makeWrapperArgs = ["--set FOO BAR" "--set BAZ QUX"]`.
@ -635,7 +636,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
``` ```
@ -756,6 +757,7 @@ specified packages in its path.
* `extraLibs`: List of packages installed inside the environment. * `extraLibs`: List of packages installed inside the environment.
* `postBuild`: Shell command executed after the build of environment. * `postBuild`: Shell command executed after the build of environment.
* `ignoreCollisions`: Ignore file collisions inside the environment (default is `false`). * `ignoreCollisions`: Ignore file collisions inside the environment (default is `false`).
* `permitUserSite`: Skip setting the `PYTHONNOUSERSITE` environment variable in wrapped binaries in the environment.
#### `python.withPackages` function #### `python.withPackages` function

View File

@ -336,9 +336,9 @@ with import <nixpkgs> {};
let src = fetchFromGitHub { let src = fetchFromGitHub {
owner = "mozilla"; owner = "mozilla";
repo = "nixpkgs-mozilla"; repo = "nixpkgs-mozilla";
# commit from: 2018-03-27 # commit from: 2019-05-15
rev = "2945b0b6b2fd19e7d23bac695afd65e320efcebe"; rev = "9f35c4b09fd44a77227e79ff0c1b4b6a69dff533";
sha256 = "034m1dryrzh2lmjvk3c0krgip652dql46w5yfwpvh7gavd3iypyw"; sha256 = "18h0nvh55b5an4gmlgfbvwbyqj91bklf1zymis6lbdh75571qaz0";
}; };
in in
with import "${src.out}/rust-overlay.nix" pkgs pkgs; with import "${src.out}/rust-overlay.nix" pkgs pkgs;

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

@ -1,12 +1,13 @@
<book xmlns="http://docbook.org/ns/docbook" <book xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"> xmlns:xi="http://www.w3.org/2001/XInclude">
<info> <info>
<title>Nixpkgs Contributors Guide</title> <title>Nixpkgs Users and Contributors Guide</title>
<subtitle>Version <xi:include href=".version" parse="text" /> <subtitle>Version <xi:include href=".version" parse="text" />
</subtitle> </subtitle>
</info> </info>
<xi:include href="introduction.chapter.xml" /> <xi:include href="introduction.chapter.xml" />
<xi:include href="quick-start.xml" /> <xi:include href="quick-start.xml" />
<xi:include href="package-specific-user-notes.xml" />
<xi:include href="stdenv.xml" /> <xi:include href="stdenv.xml" />
<xi:include href="multiple-output.xml" /> <xi:include href="multiple-output.xml" />
<xi:include href="cross-compilation.xml" /> <xi:include href="cross-compilation.xml" />

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>
@ -150,6 +150,19 @@ hello-2.3 A program that produces a familiar, friendly greeting
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<varname>changelog</varname>
</term>
<listitem>
<para>
A link or a list of links to the location of Changelog for a package.
A link may use expansion to refer to the correct changelog version.
Example:
<literal>"https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${version}"</literal>
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<varname>license</varname> <varname>license</varname>
@ -259,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>
@ -352,312 +364,6 @@ packageOverrides = pkgs: {
</screen> </screen>
</para> </para>
</section> </section>
<section xml:id="sec-steam">
<title>Steam</title>
<section xml:id="sec-steam-nix">
<title>Steam in Nix</title>
<para>
Steam is distributed as a <filename>.deb</filename> file, for now only as
an i686 package (the amd64 package only has documentation). When unpacked,
it has a script called <filename>steam</filename> that in ubuntu (their
target distro) would go to <filename>/usr/bin </filename>. When run for the
first time, this script copies some files to the user's home, which include
another script that is the ultimate responsible for launching the steam
binary, which is also in $HOME.
</para>
<para>
Nix problems and constraints:
<itemizedlist>
<listitem>
<para>
We don't have <filename>/bin/bash</filename> and many scripts point
there. Similarly for <filename>/usr/bin/python</filename> .
</para>
</listitem>
<listitem>
<para>
We don't have the dynamic loader in <filename>/lib </filename>.
</para>
</listitem>
<listitem>
<para>
The <filename>steam.sh</filename> script in $HOME can not be patched, as
it is checked and rewritten by steam.
</para>
</listitem>
<listitem>
<para>
The steam binary cannot be patched, it's also checked.
</para>
</listitem>
</itemizedlist>
</para>
<para>
The current approach to deploy Steam in NixOS is composing a FHS-compatible
chroot environment, as documented
<link xlink:href="http://sandervanderburg.blogspot.nl/2013/09/composing-fhs-compatible-chroot.html">here</link>.
This allows us to have binaries in the expected paths without disrupting
the system, and to avoid patching them to work in a non FHS environment.
</para>
</section>
<section xml:id="sec-steam-play">
<title>How to play</title>
<para>
For 64-bit systems it's important to have
<programlisting>hardware.opengl.driSupport32Bit = true;</programlisting>
in your <filename>/etc/nixos/configuration.nix</filename>. You'll also need
<programlisting>hardware.pulseaudio.support32Bit = true;</programlisting>
if you are using PulseAudio - this will enable 32bit ALSA apps integration.
To use the Steam controller or other Steam supported controllers such as
the DualShock 4 or Nintendo Switch Pro, you need to add
<programlisting>hardware.steam-hardware.enable = true;</programlisting>
to your configuration.
</para>
</section>
<section xml:id="sec-steam-troub">
<title>Troubleshooting</title>
<para>
<variablelist>
<varlistentry>
<term>
Steam fails to start. What do I do?
</term>
<listitem>
<para>
Try to run
<programlisting>strace steam</programlisting>
to see what is causing steam to fail.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
Using the FOSS Radeon or nouveau (nvidia) drivers
</term>
<listitem>
<itemizedlist>
<listitem>
<para>
The <literal>newStdcpp</literal> parameter was removed since NixOS
17.09 and should not be needed anymore.
</para>
</listitem>
<listitem>
<para>
Steam ships statically linked with a version of libcrypto that
conflics with the one dynamically loaded by radeonsi_dri.so. If you
get the error
<programlisting>steam.sh: line 713: 7842 Segmentation fault (core dumped)</programlisting>
have a look at
<link xlink:href="https://github.com/NixOS/nixpkgs/pull/20269">this
pull request</link>.
</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
<varlistentry>
<term>
Java
</term>
<listitem>
<orderedlist>
<listitem>
<para>
There is no java in steam chrootenv by default. If you get a message
like
<programlisting>/home/foo/.local/share/Steam/SteamApps/common/towns/towns.sh: line 1: java: command not found</programlisting>
You need to add
<programlisting> steam.override { withJava = true; };</programlisting>
to your configuration.
</para>
</listitem>
</orderedlist>
</listitem>
</varlistentry>
</variablelist>
</para>
</section>
<section xml:id="sec-steam-run">
<title>steam-run</title>
<para>
The FHS-compatible chroot used for steam can also be used to run other
linux games that expect a FHS environment. To do it, add
<programlisting>pkgs.(steam.override {
nativeOnly = true;
newStdcpp = true;
}).run</programlisting>
to your configuration, rebuild, and run the game with
<programlisting>steam-run ./foo</programlisting>
</para>
</section>
</section>
<section xml:id="sec-emacs">
<title>Emacs</title>
<section xml:id="sec-emacs-config">
<title>Configuring Emacs</title>
<para>
The Emacs package comes with some extra helpers to make it easier to
configure. <varname>emacsWithPackages</varname> allows you to manage
packages from ELPA. This means that you will not have to install that
packages from within Emacs. For instance, if you wanted to use
<literal>company</literal>, <literal>counsel</literal>,
<literal>flycheck</literal>, <literal>ivy</literal>,
<literal>magit</literal>, <literal>projectile</literal>, and
<literal>use-package</literal> you could use this as a
<filename>~/.config/nixpkgs/config.nix</filename> override:
</para>
<screen>
{
packageOverrides = pkgs: with pkgs; {
myEmacs = emacsWithPackages (epkgs: (with epkgs.melpaStablePackages; [
company
counsel
flycheck
ivy
magit
projectile
use-package
]));
}
}
</screen>
<para>
You can install it like any other packages via <command>nix-env -iA
myEmacs</command>. However, this will only install those packages. It will
not <literal>configure</literal> them for us. To do this, we need to
provide a configuration file. Luckily, it is possible to do this from
within Nix! By modifying the above example, we can make Emacs load a custom
config file. The key is to create a package that provide a
<filename>default.el</filename> file in
<filename>/share/emacs/site-start/</filename>. Emacs knows to load this
file automatically when it starts.
</para>
<screen>
{
packageOverrides = pkgs: with pkgs; rec {
myEmacsConfig = writeText "default.el" ''
;; initialize package
(require 'package)
(package-initialize 'noactivate)
(eval-when-compile
(require 'use-package))
;; load some packages
(use-package company
:bind ("&lt;C-tab&gt;" . company-complete)
:diminish company-mode
:commands (company-mode global-company-mode)
:defer 1
:config
(global-company-mode))
(use-package counsel
:commands (counsel-descbinds)
:bind (([remap execute-extended-command] . counsel-M-x)
("C-x C-f" . counsel-find-file)
("C-c g" . counsel-git)
("C-c j" . counsel-git-grep)
("C-c k" . counsel-ag)
("C-x l" . counsel-locate)
("M-y" . counsel-yank-pop)))
(use-package flycheck
:defer 2
:config (global-flycheck-mode))
(use-package ivy
:defer 1
:bind (("C-c C-r" . ivy-resume)
("C-x C-b" . ivy-switch-buffer)
:map ivy-minibuffer-map
("C-j" . ivy-call))
:diminish ivy-mode
:commands ivy-mode
:config
(ivy-mode 1))
(use-package magit
:defer
:if (executable-find "git")
:bind (("C-x g" . magit-status)
("C-x G" . magit-dispatch-popup))
:init
(setq magit-completing-read-function 'ivy-completing-read))
(use-package projectile
:commands projectile-mode
:bind-keymap ("C-c p" . projectile-command-map)
:defer 5
:config
(projectile-global-mode))
'';
myEmacs = emacsWithPackages (epkgs: (with epkgs.melpaStablePackages; [
(runCommand "default.el" {} ''
mkdir -p $out/share/emacs/site-lisp
cp ${myEmacsConfig} $out/share/emacs/site-lisp/default.el
'')
company
counsel
flycheck
ivy
magit
projectile
use-package
]));
};
}
</screen>
<para>
This provides a fairly full Emacs start file. It will load in addition to
the user's presonal config. You can always disable it by passing
<command>-q</command> to the Emacs command.
</para>
<para>
Sometimes <varname>emacsWithPackages</varname> is not enough, as this
package set has some priorities imposed on packages (with the lowest
priority assigned to Melpa Unstable, and the highest for packages manually
defined in <filename>pkgs/top-level/emacs-packages.nix</filename>). But you
can't control this priorities when some package is installed as a
dependency. You can override it on per-package-basis, providing all the
required dependencies manually - but it's tedious and there is always a
possibility that an unwanted dependency will sneak in through some other
package. To completely override such a package you can use
<varname>overrideScope'</varname>.
</para>
<screen>
overrides = self: super: rec {
haskell-mode = self.melpaPackages.haskell-mode;
...
};
((emacsPackagesNgGen emacs).overrideScope' overrides).emacsWithPackages (p: with p; [
# here both these package will use haskell-mode of our own choice
ghc-mod
dante
])
</screen>
</section>
</section>
<section xml:id="sec-weechat"> <section xml:id="sec-weechat">
<title>Weechat</title> <title>Weechat</title>
@ -762,64 +468,6 @@ stdenv.mkDerivation {
}</programlisting> }</programlisting>
</para> </para>
</section> </section>
<section xml:id="sec-citrix">
<title>Citrix Receiver</title>
<para>
The <link xlink:href="https://www.citrix.com/products/receiver/">Citrix
Receiver</link> is a remote desktop viewer which provides access to
<link xlink:href="https://www.citrix.com/products/xenapp-xendesktop/">XenDesktop</link>
installations.
</para>
<section xml:id="sec-citrix-base">
<title>Basic usage</title>
<para>
The tarball archive needs to be downloaded manually as the licenses
agreements of the vendor need to be accepted first. This is available at
the
<link xlink:href="https://www.citrix.com/downloads/citrix-receiver/">download
page at citrix.com</link>. Then run <literal>nix-prefetch-url
file://$PWD/linuxx64-$version.tar.gz</literal>. With the archive available
in the store the package can be built and installed with Nix.
</para>
<para>
<emphasis>Note: it's recommended to install <literal>Citrix
Receiver</literal> using <literal>nix-env -i</literal> or globally to
ensure that the <literal>.desktop</literal> files are installed properly
into <literal>$XDG_CONFIG_DIRS</literal>. Otherwise it won't be possible to
open <literal>.ica</literal> files automatically from the browser to start
a Citrix connection.</emphasis>
</para>
</section>
<section xml:id="sec-citrix-custom-certs">
<title>Custom certificates</title>
<para>
The <literal>Citrix Receiver</literal> in <literal>nixpkgs</literal> trusts
several certificates
<link xlink:href="https://curl.haxx.se/docs/caextract.html">from the
Mozilla database</link> by default. However several companies using Citrix
might require their own corporate certificate. On distros with imperative
packaging these certs can be stored easily in
<link xlink:href="https://developer-docs.citrix.com/projects/receiver-for-linux-command-reference/en/13.7/"><literal>$ICAROOT</literal></link>,
however this directory is a store path in <literal>nixpkgs</literal>. In
order to work around this issue the package provides a simple mechanism to
add custom certificates without rebuilding the entire package using
<literal>symlinkJoin</literal>:
<programlisting>
<![CDATA[with import <nixpkgs> { config.allowUnfree = true; };
let extraCerts = [ ./custom-cert-1.pem ./custom-cert-2.pem /* ... */ ]; in
citrix_receiver.override {
inherit extraCerts;
}]]>
</programlisting>
</para>
</section>
</section>
<section xml:id="sec-ibus-typing-booster"> <section xml:id="sec-ibus-typing-booster">
<title>ibus-engines.typing-booster</title> <title>ibus-engines.typing-booster</title>
@ -858,7 +506,7 @@ citrix_receiver.override {
<para> <para>
The IBus engine is based on <literal>hunspell</literal> to support The IBus engine is based on <literal>hunspell</literal> to support
completion in many languages. By default the dictionaries completion in many languages. By default the dictionaries
<literal>de-de</literal>, <literal>en-us</literal>, <literal>de-de</literal>, <literal>en-us</literal>, <literal>fr-moderne</literal>
<literal>es-es</literal>, <literal>it-it</literal>, <literal>es-es</literal>, <literal>it-it</literal>,
<literal>sv-se</literal> and <literal>sv-fi</literal> are in use. To add <literal>sv-se</literal> and <literal>sv-fi</literal> are in use. To add
another dictionary, the package can be overridden like this: another dictionary, the package can be overridden like this:
@ -891,30 +539,51 @@ citrix_receiver.override {
</para> </para>
</section> </section>
</section> </section>
<section xml:id="dlib"> <section xml:id="sec-nginx">
<title>DLib</title> <title>Nginx</title>
<para> <para>
<link xlink:href="http://dlib.net/">DLib</link> is a modern, C++-based toolkit which <link xlink:href="https://nginx.org/">Nginx</link> is a
provides several machine learning algorithms. reverse proxy and lightweight webserver.
</para> </para>
<section xml:id="compiling-without-avx-support"> <section xml:id="sec-nginx-etag">
<title>Compiling without AVX support</title> <title>ETags on static files served from the Nix store</title>
<para> <para>
Especially older CPUs don't support HTTP has a couple different mechanisms for caching to prevent
<link xlink:href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions">AVX</link> clients from having to download the same content repeatedly
(<abbrev>Advanced Vector Extensions</abbrev>) instructions that are used by DLib to if a resource has not changed since the last time it was requested.
optimize their algorithms. When nginx is used as a server for static files, it implements
the caching mechanism based on the
<link xlink:href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified"><literal>Last-Modified</literal></link>
response header automatically; unfortunately, it works by using
filesystem timestamps to determine the value of the
<literal>Last-Modified</literal> header. This doesn't give the
desired behavior when the file is in the Nix store, because all
file timestamps are set to 0 (for reasons related to build
reproducibility).
</para> </para>
<para> <para>
On the affected hardware errors like <literal>Illegal instruction</literal> will occur. Fortunately, HTTP supports an alternative (and more effective)
In those cases AVX support needs to be disabled: caching mechanism: the
<programlisting>self: super: { <link xlink:href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag"><literal>ETag</literal></link>
dlib = super.dlib.override { avxSupport = false; }; response header. The value of the <literal>ETag</literal> header
}</programlisting> specifies some identifier for the particular content that the
server is sending (e.g. a hash). When a client makes a second
request for the same resource, it sends that value back in an
<literal>If-None-Match</literal> header. If the ETag value is
unchanged, then the server does not need to resend the content.
</para>
<para>
As of NixOS 19.09, the nginx package in Nixpkgs is patched such
that when nginx serves a file out of <filename>/nix/store</filename>,
the hash in the store path is used as the <literal>ETag</literal>
header in the HTTP response, thus providing proper caching functionality.
This happens automatically; you do not need to do modify any
configuration to get this behavior.
</para> </para>
</section> </section>
</section> </section>

View File

@ -0,0 +1,469 @@
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="package-specific-user-notes">
<title>Package-specific usage notes</title>
<para>
These chapters includes some notes
that apply to specific packages and should
answer some of the frequently asked questions
related to Nixpkgs use.
Some useful information related to package use
can be found in <link linkend="chap-package-notes">package-specific development notes</link>.
</para>
<section xml:id="opengl">
<title>OpenGL</title>
<para>
Packages that use OpenGL have NixOS desktop as their primary target. The
current solution for loading the GPU-specific drivers is based on
<literal>libglvnd</literal> and looks for the driver implementation in
<literal>LD_LIBRARY_PATH</literal>. If you are using a non-NixOS
GNU/Linux/X11 desktop with free software video drivers, consider launching
OpenGL-dependent programs from Nixpkgs with Nixpkgs versions of
<literal>libglvnd</literal> and <literal>mesa_drivers</literal> in
<literal>LD_LIBRARY_PATH</literal>. For proprietary video drivers you might
have luck with also adding the corresponding video driver package.
</para>
</section>
<section xml:id="locales">
<title>Locales</title>
<para>
To allow simultaneous use of packages linked against different versions of
<literal>glibc</literal> with different locale archive formats Nixpkgs
patches <literal>glibc</literal> to rely on
<literal>LOCALE_ARCHIVE</literal> environment variable.
</para>
<para>
On non-NixOS distributions this variable is obviously not set. This can
cause regressions in language support or even crashes in some
Nixpkgs-provided programs. The simplest way to mitigate this problem is
exporting the <literal>LOCALE_ARCHIVE</literal> variable pointing to
<literal>${glibcLocales}/lib/locale/locale-archive</literal>. The drawback
(and the reason this is not the default) is the relatively large (a hundred
MiB) size of the full set of locales. It is possible to build a custom set
of locales by overriding parameters <literal>allLocales</literal> and
<literal>locales</literal> of the package.
</para>
</section>
<section xml:id="sec-emacs">
<title>Emacs</title>
<section xml:id="sec-emacs-config">
<title>Configuring Emacs</title>
<para>
The Emacs package comes with some extra helpers to make it easier to
configure. <varname>emacsWithPackages</varname> allows you to manage
packages from ELPA. This means that you will not have to install that
packages from within Emacs. For instance, if you wanted to use
<literal>company</literal>, <literal>counsel</literal>,
<literal>flycheck</literal>, <literal>ivy</literal>,
<literal>magit</literal>, <literal>projectile</literal>, and
<literal>use-package</literal> you could use this as a
<filename>~/.config/nixpkgs/config.nix</filename> override:
</para>
<screen>
{
packageOverrides = pkgs: with pkgs; {
myEmacs = emacsWithPackages (epkgs: (with epkgs.melpaStablePackages; [
company
counsel
flycheck
ivy
magit
projectile
use-package
]));
}
}
</screen>
<para>
You can install it like any other packages via <command>nix-env -iA
myEmacs</command>. However, this will only install those packages. It will
not <literal>configure</literal> them for us. To do this, we need to
provide a configuration file. Luckily, it is possible to do this from
within Nix! By modifying the above example, we can make Emacs load a custom
config file. The key is to create a package that provide a
<filename>default.el</filename> file in
<filename>/share/emacs/site-start/</filename>. Emacs knows to load this
file automatically when it starts.
</para>
<screen>
{
packageOverrides = pkgs: with pkgs; rec {
myEmacsConfig = writeText "default.el" ''
;; initialize package
(require 'package)
(package-initialize 'noactivate)
(eval-when-compile
(require 'use-package))
;; load some packages
(use-package company
:bind ("&lt;C-tab&gt;" . company-complete)
:diminish company-mode
:commands (company-mode global-company-mode)
:defer 1
:config
(global-company-mode))
(use-package counsel
:commands (counsel-descbinds)
:bind (([remap execute-extended-command] . counsel-M-x)
("C-x C-f" . counsel-find-file)
("C-c g" . counsel-git)
("C-c j" . counsel-git-grep)
("C-c k" . counsel-ag)
("C-x l" . counsel-locate)
("M-y" . counsel-yank-pop)))
(use-package flycheck
:defer 2
:config (global-flycheck-mode))
(use-package ivy
:defer 1
:bind (("C-c C-r" . ivy-resume)
("C-x C-b" . ivy-switch-buffer)
:map ivy-minibuffer-map
("C-j" . ivy-call))
:diminish ivy-mode
:commands ivy-mode
:config
(ivy-mode 1))
(use-package magit
:defer
:if (executable-find "git")
:bind (("C-x g" . magit-status)
("C-x G" . magit-dispatch-popup))
:init
(setq magit-completing-read-function 'ivy-completing-read))
(use-package projectile
:commands projectile-mode
:bind-keymap ("C-c p" . projectile-command-map)
:defer 5
:config
(projectile-global-mode))
'';
myEmacs = emacsWithPackages (epkgs: (with epkgs.melpaStablePackages; [
(runCommand "default.el" {} ''
mkdir -p $out/share/emacs/site-lisp
cp ${myEmacsConfig} $out/share/emacs/site-lisp/default.el
'')
company
counsel
flycheck
ivy
magit
projectile
use-package
]));
};
}
</screen>
<para>
This provides a fairly full Emacs start file. It will load in addition to
the user's presonal config. You can always disable it by passing
<command>-q</command> to the Emacs command.
</para>
<para>
Sometimes <varname>emacsWithPackages</varname> is not enough, as this
package set has some priorities imposed on packages (with the lowest
priority assigned to Melpa Unstable, and the highest for packages manually
defined in <filename>pkgs/top-level/emacs-packages.nix</filename>). But you
can't control this priorities when some package is installed as a
dependency. You can override it on per-package-basis, providing all the
required dependencies manually - but it's tedious and there is always a
possibility that an unwanted dependency will sneak in through some other
package. To completely override such a package you can use
<varname>overrideScope'</varname>.
</para>
<screen>
overrides = self: super: rec {
haskell-mode = self.melpaPackages.haskell-mode;
...
};
((emacsPackagesNgGen emacs).overrideScope' overrides).emacsWithPackages (p: with p; [
# here both these package will use haskell-mode of our own choice
ghc-mod
dante
])
</screen>
</section>
</section>
<section xml:id="dlib">
<title>DLib</title>
<para>
<link xlink:href="http://dlib.net/">DLib</link> is a modern, C++-based toolkit which
provides several machine learning algorithms.
</para>
<section xml:id="compiling-without-avx-support">
<title>Compiling without AVX support</title>
<para>
Especially older CPUs don't support
<link xlink:href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions">AVX</link>
(<abbrev>Advanced Vector Extensions</abbrev>) instructions that are used by DLib to
optimize their algorithms.
</para>
<para>
On the affected hardware errors like <literal>Illegal instruction</literal> will occur.
In those cases AVX support needs to be disabled:
<programlisting>self: super: {
dlib = super.dlib.override { avxSupport = false; };
}</programlisting>
</para>
</section>
</section>
<section xml:id="unfree-software">
<title>Unfree software</title>
<para>
All users of Nixpkgs are free software users, and many users (and
developers) of Nixpkgs want to limit and tightly control their exposure to
unfree software. At the same time, many users need (or want)
to run some specific
pieces of proprietary software. Nixpkgs includes some expressions for unfree
software packages. By default unfree software cannot be installed and
doesnt show up in searches. To allow installing unfree software in a
single Nix invocation one can export
<literal>NIXPKGS_ALLOW_UNFREE=1</literal>. For a persistent solution, users
can set <literal>allowUnfree</literal> in the Nixpkgs configuration.
</para>
<para>
Fine-grained control is possible by defining
<literal>allowUnfreePredicate</literal> function in config; it takes the
<literal>mkDerivation</literal> parameter attrset and returns
<literal>true</literal> for unfree packages that should be allowed.
</para>
</section>
<section xml:id="sec-steam">
<title>Steam</title>
<section xml:id="sec-steam-nix">
<title>Steam in Nix</title>
<para>
Steam is distributed as a <filename>.deb</filename> file, for now only as
an i686 package (the amd64 package only has documentation). When unpacked,
it has a script called <filename>steam</filename> that in Ubuntu (their
target distro) would go to <filename>/usr/bin </filename>. When run for the
first time, this script copies some files to the user's home, which include
another script that is the ultimate responsible for launching the steam
binary, which is also in $HOME.
</para>
<para>
Nix problems and constraints:
<itemizedlist>
<listitem>
<para>
We don't have <filename>/bin/bash</filename> and many scripts point
there. Similarly for <filename>/usr/bin/python</filename> .
</para>
</listitem>
<listitem>
<para>
We don't have the dynamic loader in <filename>/lib </filename>.
</para>
</listitem>
<listitem>
<para>
The <filename>steam.sh</filename> script in $HOME can not be patched, as
it is checked and rewritten by steam.
</para>
</listitem>
<listitem>
<para>
The steam binary cannot be patched, it's also checked.
</para>
</listitem>
</itemizedlist>
</para>
<para>
The current approach to deploy Steam in NixOS is composing a FHS-compatible
chroot environment, as documented
<link xlink:href="http://sandervanderburg.blogspot.nl/2013/09/composing-fhs-compatible-chroot.html">here</link>.
This allows us to have binaries in the expected paths without disrupting
the system, and to avoid patching them to work in a non FHS environment.
</para>
</section>
<section xml:id="sec-steam-play">
<title>How to play</title>
<para>
For 64-bit systems it's important to have
<programlisting>hardware.opengl.driSupport32Bit = true;</programlisting>
in your <filename>/etc/nixos/configuration.nix</filename>. You'll also need
<programlisting>hardware.pulseaudio.support32Bit = true;</programlisting>
if you are using PulseAudio - this will enable 32bit ALSA apps integration.
To use the Steam controller or other Steam supported controllers such as
the DualShock 4 or Nintendo Switch Pro, you need to add
<programlisting>hardware.steam-hardware.enable = true;</programlisting>
to your configuration.
</para>
</section>
<section xml:id="sec-steam-troub">
<title>Troubleshooting</title>
<para>
<variablelist>
<varlistentry>
<term>
Steam fails to start. What do I do?
</term>
<listitem>
<para>
Try to run
<programlisting>strace steam</programlisting>
to see what is causing steam to fail.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
Using the FOSS Radeon or nouveau (nvidia) drivers
</term>
<listitem>
<itemizedlist>
<listitem>
<para>
The <literal>newStdcpp</literal> parameter was removed since NixOS
17.09 and should not be needed anymore.
</para>
</listitem>
<listitem>
<para>
Steam ships statically linked with a version of libcrypto that
conflics with the one dynamically loaded by radeonsi_dri.so. If you
get the error
<programlisting>steam.sh: line 713: 7842 Segmentation fault (core dumped)</programlisting>
have a look at
<link xlink:href="https://github.com/NixOS/nixpkgs/pull/20269">this
pull request</link>.
</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
<varlistentry>
<term>
Java
</term>
<listitem>
<orderedlist>
<listitem>
<para>
There is no java in steam chrootenv by default. If you get a message
like
<programlisting>/home/foo/.local/share/Steam/SteamApps/common/towns/towns.sh: line 1: java: command not found</programlisting>
You need to add
<programlisting> steam.override { withJava = true; };</programlisting>
to your configuration.
</para>
</listitem>
</orderedlist>
</listitem>
</varlistentry>
</variablelist>
</para>
</section>
<section xml:id="sec-steam-run">
<title>steam-run</title>
<para>
The FHS-compatible chroot used for steam can also be used to run other
linux games that expect a FHS environment. To do it, add
<programlisting>pkgs.(steam.override {
nativeOnly = true;
newStdcpp = true;
}).run</programlisting>
to your configuration, rebuild, and run the game with
<programlisting>steam-run ./foo</programlisting>
</para>
</section>
</section>
<section xml:id="sec-citrix">
<title>Citrix Receiver</title>
<para>
The <link xlink:href="https://www.citrix.com/products/receiver/">Citrix
Receiver</link> is a remote desktop viewer which provides access to
<link xlink:href="https://www.citrix.com/products/xenapp-xendesktop/">XenDesktop</link>
installations.
</para>
<section xml:id="sec-citrix-base">
<title>Basic usage</title>
<para>
The tarball archive needs to be downloaded manually as the license
agreements of the vendor need to be accepted first. This is available at
the
<link xlink:href="https://www.citrix.com/downloads/citrix-receiver/">download
page at citrix.com</link>. Then run <literal>nix-prefetch-url
file://$PWD/linuxx64-$version.tar.gz</literal>. With the archive available
in the store the package can be built and installed with Nix.
</para>
<para>
<emphasis>Note: it's recommended to install <literal>Citrix
Receiver</literal> using <literal>nix-env -i</literal> or globally to
ensure that the <literal>.desktop</literal> files are installed properly
into <literal>$XDG_CONFIG_DIRS</literal>. Otherwise it won't be possible to
open <literal>.ica</literal> files automatically from the browser to start
a Citrix connection.</emphasis>
</para>
</section>
<section xml:id="sec-citrix-custom-certs">
<title>Custom certificates</title>
<para>
The <literal>Citrix Receiver</literal> in <literal>nixpkgs</literal> trusts
several certificates
<link xlink:href="https://curl.haxx.se/docs/caextract.html">from the
Mozilla database</link> by default. However several companies using Citrix
might require their own corporate certificate. On distros with imperative
packaging these certs can be stored easily in
<link xlink:href="https://developer-docs.citrix.com/projects/receiver-for-linux-command-reference/en/13.7/"><literal>$ICAROOT</literal></link>,
however this directory is a store path in <literal>nixpkgs</literal>. In
order to work around this issue the package provides a simple mechanism to
add custom certificates without rebuilding the entire package using
<literal>symlinkJoin</literal>:
<programlisting>
<![CDATA[with import <nixpkgs> { config.allowUnfree = true; };
let extraCerts = [ ./custom-cert-1.pem ./custom-cert-2.pem /* ... */ ]; in
citrix_receiver.override {
inherit extraCerts;
}]]>
</programlisting>
</para>
</section>
</section>
</chapter>

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,7 +205,7 @@ $ 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>

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
@ -709,19 +728,16 @@ passthru.updateScript = writeScript "update-zoom-us" ''
<programlisting> <programlisting>
passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ]; passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ];
</programlisting> </programlisting>
Note that the update scripts will be run in parallel by default; you </para>
should avoid running <command>git commit</command> or any other commands <para>
that cannot handle that. The script will be usually run from the root of the Nixpkgs repository
but you should not rely on that. Also note that the update scripts will
be run in parallel by default; you should avoid running <command>git
commit</command> or any other commands that cannot handle that.
</para> </para>
<para> <para>
For information about how to run the updates, execute For information about how to run the updates, execute
<cmdsynopsis> <command>nix-shell maintainers/scripts/update.nix</command>.
<command>nix-shell</command>
<arg>
maintainers/scripts/update.nix
</arg>
</cmdsynopsis>
.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -747,7 +763,8 @@ passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ]
latter is convenient from a build script. However, typically one only wants latter is convenient from a build script. However, typically one only wants
to <emphasis>add</emphasis> some commands to a phase, e.g. by defining to <emphasis>add</emphasis> some commands to a phase, e.g. by defining
<literal>postInstall</literal> or <literal>preFixup</literal>, as skipping <literal>postInstall</literal> or <literal>preFixup</literal>, as skipping
some of the default actions may have unexpected consequences. some of the default actions may have unexpected consequences. The default
script for each phase is defined in the file <filename>pkgs/stdenv/generic/setup.sh</filename>.
</para> </para>
<section xml:id="ssec-controlling-phases"> <section xml:id="ssec-controlling-phases">
@ -970,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>
@ -1092,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>
@ -1579,7 +1616,7 @@ installTargets = "install-bin install-doc";</programlisting>
</term> </term>
<listitem> <listitem>
<para> <para>
Like <varname>dontStripHost</varname>, but only affects the Like <varname>dontStrip</varname>, but only affects the
<command>strip</command> command targetting the package's host platform. <command>strip</command> command targetting the package's host platform.
Useful when supporting cross compilation, but otherwise feel free to Useful when supporting cross compilation, but otherwise feel free to
ignore. ignore.
@ -1592,7 +1629,7 @@ installTargets = "install-bin install-doc";</programlisting>
</term> </term>
<listitem> <listitem>
<para> <para>
Like <varname>dontStripHost</varname>, but only affects the Like <varname>dontStrip</varname>, but only affects the
<command>strip</command> command targetting the packages' target <command>strip</command> command targetting the packages' target
platform. Useful when supporting cross compilation, but otherwise feel platform. Useful when supporting cross compilation, but otherwise feel
free to ignore. free to ignore.
@ -2212,7 +2249,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>
@ -2643,20 +2680,28 @@ addEnvHooks "$hostOffset" myBashFunction
At <filename>/var/lib/cntr</filename> the sandboxed filesystem is At <filename>/var/lib/cntr</filename> the sandboxed filesystem is
mounted. All commands and files of the system are still accessible mounted. All commands and files of the system are still accessible
within the shell. To execute commands from the sandbox use the cntr exec within the shell. To execute commands from the sandbox use the cntr exec
subcommand. Note that <command>cntr</command> also needs to be executed subcommand. <command>cntr</command> is only supported
on the machine that is doing the build, which might not be the case when
remote builders are enabled. <command>cntr</command> is only supported
on Linux-based platforms. To use it first add <literal>cntr</literal> to on Linux-based platforms. To use it first add <literal>cntr</literal> to
your <literal>environment.systemPackages</literal> on NixOS or your <literal>environment.systemPackages</literal> on NixOS or
alternatively to the root user on non-NixOS systems. Then in the package alternatively to the root user on non-NixOS systems. Then in the package
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>
<note>
<title>Caution with remote builds</title>
<para>
This won't work with remote builds as the build environment is on
a different machine and can't be accessed by <command>cntr</command>.
Remote builds can be turned off by setting <literal>--option builders ''</literal>
for <command>nix-build</command> or <literal>--builders ''</literal> for
<command>nix build</command>.
</para>
</note>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -2838,7 +2883,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>
@ -2860,7 +2905,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>
@ -2889,19 +2934,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>
@ -2926,7 +2971,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>
@ -2990,7 +3035,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

@ -50,7 +50,7 @@ let
filesystem = callLibs ./filesystem.nix; filesystem = callLibs ./filesystem.nix;
# back-compat aliases # back-compat aliases
platforms = systems.forMeta; platforms = systems.doubles;
inherit (builtins) add addErrorContext attrNames concatLists inherit (builtins) add addErrorContext attrNames concatLists
deepSeq elem elemAt filter genericClosure genList getAttr deepSeq elem elemAt filter genericClosure genList getAttr

View File

@ -178,7 +178,7 @@ rec {
toPlist = {}: v: let toPlist = {}: v: let
isFloat = builtins.isFloat or (x: false); isFloat = builtins.isFloat or (x: false);
expr = ind: x: with builtins; expr = ind: x: with builtins;
if isNull x then "" else if x == null then "" else
if isBool x then bool ind x else if isBool x then bool ind x else
if isInt x then int ind x else if isInt x then int ind x else
if isString x then str ind x else if isString x then str ind x else

View File

@ -434,12 +434,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
lgpl21 = spdx { lgpl21 = spdx {
spdxId = "LGPL-2.1-only"; spdxId = "LGPL-2.1-only";
fullName = "GNU Library General Public License v2.1 only"; fullName = "GNU Lesser General Public License v2.1 only";
}; };
lgpl21Plus = spdx { lgpl21Plus = spdx {
spdxId = "LGPL-2.1-or-later"; spdxId = "LGPL-2.1-or-later";
fullName = "GNU Library General Public License v2.1 or later"; fullName = "GNU Lesser General Public License v2.1 or later";
}; };
lgpl3 = spdx { lgpl3 = spdx {
@ -457,9 +457,9 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "libpng License"; fullName = "libpng License";
}; };
libpng2 = { libpng2 = spdx {
fullName = "libpng License v2"; # 1.6.36+ spdxId = "libpng-2.0"; # Used since libpng 1.6.36.
url = "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt"; fullName = "PNG Reference Library version 2";
}; };
libtiff = spdx { libtiff = spdx {

View File

@ -101,7 +101,7 @@ rec {
mergeOneOption = loc: defs: mergeOneOption = loc: defs:
if defs == [] then abort "This case should never happen." if defs == [] then abort "This case should never happen."
else if length defs != 1 then else if length defs != 1 then
throw "The unique option `${showOption loc}' is defined multiple times, in ${showFiles (getFiles defs)}." throw "The unique option `${showOption loc}' is defined multiple times, in:\n - ${concatStringsSep "\n - " (getFiles defs)}."
else (head defs).value; else (head defs).value;
/* "Merge" option definitions by checking that they all have the same value. */ /* "Merge" option definitions by checking that they all have the same value. */

View File

@ -83,7 +83,7 @@ rec {
# Sometimes git stores the commitId directly in the file but # Sometimes git stores the commitId directly in the file but
# sometimes it stores something like: «ref: refs/heads/branch-name» # sometimes it stores something like: «ref: refs/heads/branch-name»
matchRef = match "^ref: (.*)$" fileContent; matchRef = match "^ref: (.*)$" fileContent;
in if isNull matchRef in if matchRef == null
then fileContent then fileContent
else readCommitFromFile (lib.head matchRef) path else readCommitFromFile (lib.head matchRef) path
# Sometimes, the file isn't there at all and has been packed away in the # Sometimes, the file isn't there at all and has been packed away in the
@ -92,7 +92,7 @@ rec {
then then
let fileContent = readFile packedRefsName; let fileContent = readFile packedRefsName;
matchRef = match (".*\n([^\n ]*) " + file + "\n.*") fileContent; matchRef = match (".*\n([^\n ]*) " + file + "\n.*") fileContent;
in if isNull matchRef in if matchRef == null
then throw ("Could not find " + file + " in " + packedRefsName) then throw ("Could not find " + file + " in " + packedRefsName)
else lib.head matchRef else lib.head matchRef
else throw ("Not a .git directory: " + path); else throw ("Not a .git directory: " + path);

View File

@ -3,7 +3,6 @@
rec { rec {
doubles = import ./doubles.nix { inherit lib; }; doubles = import ./doubles.nix { inherit lib; };
forMeta = import ./for-meta.nix { inherit lib; };
parse = import ./parse.nix { inherit lib; }; parse = import ./parse.nix { inherit lib; };
inspect = import ./inspect.nix { inherit lib; }; inspect = import ./inspect.nix { inherit lib; };
platforms = import ./platforms.nix { inherit lib; }; platforms = import ./platforms.nix { inherit lib; };
@ -15,7 +14,9 @@ rec {
# `parsed` is inferred from args, both because there are two options with one # `parsed` is inferred from args, both because there are two options with one
# clearly prefered, and to prevent cycles. A simpler fixed point where the RHS # clearly prefered, and to prevent cycles. A simpler fixed point where the RHS
# always just used `final.*` would fail on both counts. # always just used `final.*` would fail on both counts.
elaborate = args: let elaborate = args': let
args = if lib.isString args' then { system = args'; }
else args';
final = { final = {
# Prefer to parse `config` as it is strictly more informative. # Prefer to parse `config` as it is strictly more informative.
parsed = parse.mkSystemFromString (if args ? config then args.config else args.system); parsed = parse.mkSystemFromString (if args ? config then args.config else args.system);

View File

@ -13,12 +13,20 @@ 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"
"powerpc64le-linux"
"riscv32-linux" "riscv64-linux"
"aarch64-none" "avr-none" "arm-none" "i686-none" "x86_64-none" "powerpc-none" "msp430-none"
]; ];
allParsed = map parse.mkSystemFromString all; allParsed = map parse.mkSystemFromString all;
@ -36,6 +44,7 @@ in rec {
i686 = filterDoubles predicates.isi686; i686 = filterDoubles predicates.isi686;
x86_64 = filterDoubles predicates.isx86_64; x86_64 = filterDoubles predicates.isx86_64;
mips = filterDoubles predicates.isMips; mips = filterDoubles predicates.isMips;
riscv = filterDoubles predicates.isRiscV;
cygwin = filterDoubles predicates.isCygwin; cygwin = filterDoubles predicates.isCygwin;
darwin = filterDoubles predicates.isDarwin; darwin = filterDoubles predicates.isDarwin;
@ -50,5 +59,7 @@ in rec {
wasi = filterDoubles predicates.isWasi; wasi = filterDoubles predicates.isWasi;
windows = filterDoubles predicates.isWindows; windows = filterDoubles predicates.isWindows;
embedded = filterDoubles predicates.isNone;
mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "armv7a-linux" "aarch64-linux" "powerpc64le-linux"]; mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "armv7a-linux" "aarch64-linux" "powerpc64le-linux"];
} }

View File

@ -88,6 +88,9 @@ rec {
config = "aarch64-unknown-linux-musl"; config = "aarch64-unknown-linux-musl";
}; };
gnu64 = { config = "x86_64-unknown-linux-gnu"; };
gnu32 = { config = "i686-unknown-linux-gnu"; };
musl64 = { config = "x86_64-unknown-linux-musl"; }; musl64 = { config = "x86_64-unknown-linux-musl"; };
musl32 = { config = "i686-unknown-linux-musl"; }; musl32 = { config = "i686-unknown-linux-musl"; };

View File

@ -1,38 +0,0 @@
{ lib }:
let
inherit (lib.systems) parse;
inherit (lib.systems.inspect) patterns;
abis = lib.mapAttrs (_: abi: builtins.removeAttrs abi [ "assertions" ]) parse.abis;
in rec {
all = [ {} ]; # `{}` matches anything
none = [];
arm = [ patterns.isAarch32 ];
aarch64 = [ patterns.isAarch64 ];
x86 = [ patterns.isx86 ];
i686 = [ patterns.isi686 ];
x86_64 = [ patterns.isx86_64 ];
mips = [ patterns.isMips ];
riscv = [ patterns.isRiscV ];
cygwin = [ patterns.isCygwin ];
darwin = [ patterns.isDarwin ];
freebsd = [ patterns.isFreeBSD ];
# Should be better, but MinGW is unclear.
gnu = [
{ kernel = parse.kernels.linux; abi = abis.gnu; }
{ kernel = parse.kernels.linux; abi = abis.gnueabi; }
{ kernel = parse.kernels.linux; abi = abis.gnueabihf; }
];
illumos = [ patterns.isSunOS ];
linux = [ patterns.isLinux ];
netbsd = [ patterns.isNetBSD ];
openbsd = [ patterns.isOpenBSD ];
unix = patterns.isUnix; # Actually a list
windows = [ patterns.isWindows ];
wasi = [ patterns.isWasi ];
inherit (lib.systems.doubles) mesaPlatforms;
}

View File

@ -44,6 +44,7 @@ rec {
isCygwin = { kernel = kernels.windows; abi = abis.cygnus; }; isCygwin = { kernel = kernels.windows; abi = abis.cygnus; };
isMinGW = { kernel = kernels.windows; abi = abis.gnu; }; isMinGW = { kernel = kernels.windows; abi = abis.gnu; };
isWasi = { kernel = kernels.wasi; }; isWasi = { kernel = kernels.wasi; };
isNone = { kernel = kernels.none; };
isAndroid = [ { abi = abis.android; } { abi = abis.androideabi; } ]; isAndroid = [ { abi = abis.android; } { abi = abis.androideabi; } ];
isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf ]; isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf ];

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

@ -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

@ -12,19 +12,19 @@ let
expected = lib.sort lib.lessThan y; expected = lib.sort lib.lessThan y;
}; };
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); testall = mseteq all (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos ++ wasi ++ windows ++ embedded);
testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv7l-linux" ]; 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" ]; 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" ]; 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" ];
testlinux = mseteq linux [ "i686-linux" "x86_64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux" "mipsel-linux" ]; testlinux = mseteq linux [ "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "i686-linux" "mipsel-linux" "riscv32-linux" "riscv64-linux" "x86_64-linux" "powerpc64le-linux" ];
testnetbsd = mseteq netbsd [ "i686-netbsd" "x86_64-netbsd" ]; testnetbsd = mseteq netbsd [ "i686-netbsd" "x86_64-netbsd" ];
testopenbsd = mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ]; testopenbsd = mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ];
testwindows = mseteq windows [ "i686-cygwin" "x86_64-cygwin" "i686-windows" "x86_64-windows" ]; testwindows = mseteq windows [ "i686-cygwin" "x86_64-cygwin" "i686-windows" "x86_64-windows" ];

View File

@ -112,7 +112,7 @@ rec {
# Function to call # Function to call
f: f:
# Argument to check for null before passing it to `f` # Argument to check for null before passing it to `f`
a: if isNull a then a else f a; a: if a == null then a else f a;
# Pull in some builtins not included elsewhere. # Pull in some builtins not included elsewhere.
inherit (builtins) inherit (builtins)

View File

@ -62,6 +62,19 @@
github = "aanderse"; github = "aanderse";
name = "Aaron Andersen"; name = "Aaron Andersen";
}; };
aaronjanse = {
email = "aaron@ajanse.me";
github = "aaronjanse";
name = "Aaron Janse";
keys = [
{ longkeyid = "rsa2048/0x651BD4B37D75E234"; # Email only
fingerprint = "490F 5009 34E7 20BD 4C53 96C2 651B D4B3 7D75 E234";
}
{ longkeyid = "rsa4096/0xBE6C92145BFF4A34"; # Git, etc
fingerprint = "CED9 6DF4 63D7 B86A 1C4B 1322 BE6C 9214 5BFF 4A34";
}
];
};
aaronschif = { aaronschif = {
email = "aaronschif@gmail.com"; email = "aaronschif@gmail.com";
github = "aaronschif"; github = "aaronschif";
@ -375,6 +388,11 @@
github = "ankhers"; github = "ankhers";
name = "Justin Wood"; name = "Justin Wood";
}; };
anpryl = {
email = "anpryl@gmail.com";
github = "anpryl";
name = "Anatolii Prylutskyi";
};
anton-dessiatov = { anton-dessiatov = {
email = "anton.dessiatov@gmail.com"; email = "anton.dessiatov@gmail.com";
github = "anton-dessiatov"; github = "anton-dessiatov";
@ -489,6 +507,11 @@
github = "aszlig"; github = "aszlig";
name = "aszlig"; name = "aszlig";
}; };
athas = {
email = "athas@sigkill.dk";
github = "athas";
name = "Troels Henriksen";
};
atnnn = { atnnn = {
email = "etienne@atnnn.com"; email = "etienne@atnnn.com";
github = "atnnn"; github = "atnnn";
@ -608,6 +631,11 @@
github = "bcdarwin"; github = "bcdarwin";
name = "Ben Darwin"; name = "Ben Darwin";
}; };
bdesham = {
email = "benjamin@esham.io";
github = "bdesham";
name = "Benjamin Esham";
};
bdimcheff = { bdimcheff = {
email = "brandon@dimcheff.com"; email = "brandon@dimcheff.com";
github = "bdimcheff"; github = "bdimcheff";
@ -653,6 +681,11 @@
github = "bergey"; github = "bergey";
name = "Daniel Bergey"; name = "Daniel Bergey";
}; };
betaboon = {
email = "betaboon@0x80.ninja";
github = "betaboon";
name = "betaboon";
};
bfortz = { bfortz = {
email = "bernard.fortz@gmail.com"; email = "bernard.fortz@gmail.com";
github = "bfortz"; github = "bfortz";
@ -757,6 +790,11 @@
github = "brian-dawn"; github = "brian-dawn";
name = "Brian Dawn"; name = "Brian Dawn";
}; };
brianhicks = {
email = "brian@brianthicks.com";
github = "BrianHicks";
name = "Brian Hicks";
};
bricewge = { bricewge = {
email = "bricewge@gmail.com"; email = "bricewge@gmail.com";
github = "bricewge"; github = "bricewge";
@ -792,10 +830,6 @@
github = "c0deaddict"; github = "c0deaddict";
name = "Jos van Bakel"; name = "Jos van Bakel";
}; };
c0dehero = {
email = "codehero@nerdpol.ch";
name = "CodeHero";
};
calbrecht = { calbrecht = {
email = "christian.albrecht@mayflower.de"; email = "christian.albrecht@mayflower.de";
github = "calbrecht"; github = "calbrecht";
@ -871,6 +905,11 @@
github = "ceedubs"; github = "ceedubs";
name = "Cody Allen"; name = "Cody Allen";
}; };
cf6b88f = {
email = "elmo.todurov@eesti.ee";
github = "cf6b88f";
name = "Elmo Todurov";
};
cfouche = { cfouche = {
email = "chaddai.fouche@gmail.com"; email = "chaddai.fouche@gmail.com";
github = "Chaddai"; github = "Chaddai";
@ -1095,6 +1134,11 @@
github = "cwoac"; github = "cwoac";
name = "Oliver Matthews"; name = "Oliver Matthews";
}; };
dalance = {
email = "dalance@gmail.com";
github = "dalance";
name = "Naoya Hatta";
};
DamienCassou = { DamienCassou = {
email = "damien@cassou.me"; email = "damien@cassou.me";
github = "DamienCassou"; github = "DamienCassou";
@ -1159,6 +1203,11 @@
github = "davorb"; github = "davorb";
name = "Davor Babic"; name = "Davor Babic";
}; };
dawidsowa = {
email = "dawid_sowa@posteo.net";
github = "dawidsowa";
name = "Dawid Sowa";
};
dbohdan = { dbohdan = {
email = "dbohdan@dbohdan.com"; email = "dbohdan@dbohdan.com";
github = "dbohdan"; github = "dbohdan";
@ -1294,6 +1343,11 @@
github = "dmjio"; github = "dmjio";
name = "David Johnson"; name = "David Johnson";
}; };
dmvianna = {
email = "dmlvianna@gmail.com";
github = "dmvianna";
name = "Daniel Vianna";
};
dochang = { dochang = {
email = "dochang@gmail.com"; email = "dochang@gmail.com";
github = "dochang"; github = "dochang";
@ -1304,6 +1358,11 @@
github = "domenkozar"; github = "domenkozar";
name = "Domen Kozar"; name = "Domen Kozar";
}; };
doronbehar = {
email = "me@doronbehar.com";
github = "doronbehar";
name = "Doron Behar";
};
dotlambda = { dotlambda = {
email = "rschuetz17@gmail.com"; email = "rschuetz17@gmail.com";
github = "dotlambda"; github = "dotlambda";
@ -1339,9 +1398,13 @@
name = "David Sferruzza"; name = "David Sferruzza";
}; };
dtzWill = { dtzWill = {
email = "nix@wdtz.org"; email = "w@wdtz.org";
github = "dtzWill"; github = "dtzWill";
name = "Will Dietz"; name = "Will Dietz";
keys = [{
longkeyid = "rsa4096/0xFD42C7D0D41494C8";
fingerprint = "389A 78CB CD88 5E0C 4701 DEB9 FD42 C7D0 D414 94C8";
}];
}; };
dxf = { dxf = {
email = "dingxiangfei2009@gmail.com"; email = "dingxiangfei2009@gmail.com";
@ -1507,6 +1570,11 @@
github = "endgame"; github = "endgame";
name = "Jack Kelly"; name = "Jack Kelly";
}; };
enorris = {
name = "Eric Norris";
email = "erictnorris@gmail.com";
github = "ericnorris";
};
enzime = { enzime = {
email = "enzime@users.noreply.github.com"; email = "enzime@users.noreply.github.com";
github = "enzime"; github = "enzime";
@ -1526,6 +1594,11 @@
github = "eqyiel"; github = "eqyiel";
name = "Ruben Maher"; name = "Ruben Maher";
}; };
eraserhd = {
email = "jason.m.felice@gmail.com";
github = "eraserhd";
name = "Jason Felice";
};
ericbmerritt = { ericbmerritt = {
email = "eric@afiniate.com"; email = "eric@afiniate.com";
github = "ericbmerritt"; github = "ericbmerritt";
@ -1717,16 +1790,28 @@
github = "fps"; github = "fps";
name = "Florian Paul Schmidt"; name = "Florian Paul Schmidt";
}; };
fragamus = {
email = "innovative.engineer@gmail.com";
github = "fragamus";
name = "Michael Gough";
};
fredeb = { fredeb = {
email = "im@fredeb.dev"; email = "im@fredeb.dev";
github = "fredeeb"; github = "fredeeb";
name = "Frede Emil"; name = "Frede Emil";
}; };
freepotion = { freepotion = {
email = "freepotion@protonmail.com"; email = "free.potion@yandex.ru";
github = "freepotion"; github = "freepotion";
name = "Free Potion"; name = "Free Potion";
}; };
freezeboy = {
email = "freezeboy@users.noreply.github.com";
github = "freezeboy";
name = "freezeboy";
};
Fresheyeball = { Fresheyeball = {
email = "fresheyeball@gmail.com"; email = "fresheyeball@gmail.com";
github = "fresheyeball"; github = "fresheyeball";
@ -1865,6 +1950,11 @@
github = "glenns"; github = "glenns";
name = "Glenn Searby"; name = "Glenn Searby";
}; };
gloaming = {
email = "ch9871@gmail.com";
github = "gloaming";
name = "Craig Hall";
};
globin = { globin = {
email = "mail@glob.in"; email = "mail@glob.in";
github = "globin"; github = "globin";
@ -2115,7 +2205,7 @@
name = "Imuli"; name = "Imuli";
}; };
infinisil = { infinisil = {
email = "infinisil@icloud.com"; email = "contact@infinisil.com";
github = "infinisil"; github = "infinisil";
name = "Silvan Mosberger"; name = "Silvan Mosberger";
}; };
@ -2138,6 +2228,15 @@
email = "tkatchev@gmail.com"; email = "tkatchev@gmail.com";
name = "Ivan Tkatchev"; name = "Ivan Tkatchev";
}; };
ivanbrennan = {
email = "ivan.brennan@gmail.com";
github = "ivanbrennan";
name = "Ivan Brennan";
keys = [{
longkeyid = "rsa4096/0x79C3C47DC652EA54";
fingerprint = "7311 2700 AB4F 4CDF C68C F6A5 79C3 C47D C652 EA54";
}];
};
ivegotasthma = { ivegotasthma = {
email = "ivegotasthma@protonmail.com"; email = "ivegotasthma@protonmail.com";
github = "ivegotasthma"; github = "ivegotasthma";
@ -2410,6 +2509,16 @@
github = "joncojonathan"; github = "joncojonathan";
name = "Jonathan Haddock"; name = "Jonathan Haddock";
}; };
jonringer = {
email = "jonringer117@gmail.com";
github = "jonringer";
name = "Jonathan Ringer";
};
jorise = {
email = "info@jorisengbers.nl";
github = "JorisE";
name = "Joris Engbers";
};
jorsn = { jorsn = {
name = "Johannes Rosenberger"; name = "Johannes Rosenberger";
email = "johannes@jorsn.eu"; email = "johannes@jorsn.eu";
@ -2445,6 +2554,11 @@
github = "jtojnar"; github = "jtojnar";
name = "Jan Tojnar"; name = "Jan Tojnar";
}; };
juaningan = {
email = "juaningan@gmail.com";
github = "juaningan";
name = "Juan Rodal";
};
juliendehos = { juliendehos = {
email = "dehos@lisic.univ-littoral.fr"; email = "dehos@lisic.univ-littoral.fr";
github = "juliendehos"; github = "juliendehos";
@ -2528,6 +2642,11 @@
github = "kierdavis"; github = "kierdavis";
name = "Kier Davis"; name = "Kier Davis";
}; };
killercup = {
email = "killercup@gmail.com";
github = "killercup";
name = "Pascal Hertleif";
};
kiloreux = { kiloreux = {
email = "kiloreux@gmail.com"; email = "kiloreux@gmail.com";
github = "kiloreux"; github = "kiloreux";
@ -2553,6 +2672,15 @@
github = "kisonecat"; github = "kisonecat";
name = "Jim Fowler"; name = "Jim Fowler";
}; };
kiwi = {
email = "envy1988@gmail.com";
github = "Kiwi";
name = "Robert Djubek";
keys = [{
longkeyid = "rsa4096/0x156C88A5B0A04B2A";
fingerprint = "8992 44FC D291 5CA2 0A97 802C 156C 88A5 B0A0 4B2A";
}];
};
kjuvi = { kjuvi = {
email = "quentin.vaucher@pm.me"; email = "quentin.vaucher@pm.me";
github = "kjuvi"; github = "kjuvi";
@ -2573,6 +2701,12 @@
github = "Kmeakin"; github = "Kmeakin";
}; };
kmein = {
email = "kieran.meinhardt@gmail.com";
name = "Kierán Meinhardt";
github = "kmein";
};
knedlsepp = { knedlsepp = {
email = "josef.kemetmueller@gmail.com"; email = "josef.kemetmueller@gmail.com";
github = "knedlsepp"; github = "knedlsepp";
@ -2583,6 +2717,11 @@
github = "knl"; github = "knl";
name = "Nikola Knežević"; name = "Nikola Knežević";
}; };
kolaente = {
email = "k@knt.li";
github = "kolaente";
name = "Konrad Langenberg";
};
konimex = { konimex = {
email = "herdiansyah@netc.eu"; email = "herdiansyah@netc.eu";
github = "konimex"; github = "konimex";
@ -2648,6 +2787,11 @@
github = "lasandell"; github = "lasandell";
name = "Luke Sandell"; name = "Luke Sandell";
}; };
lambda-11235 = {
email = "taranlynn0@gmail.com";
github = "lambda-11235";
name = "Taran Lynn";
};
lassulus = { lassulus = {
email = "lassulus@gmail.com"; email = "lassulus@gmail.com";
github = "Lassulus"; github = "Lassulus";
@ -2868,6 +3012,11 @@
github = "lukeadams"; github = "lukeadams";
name = "Luke Adams"; name = "Luke Adams";
}; };
lukebfox = {
email = "lbentley-fox1@sheffield.ac.uk";
github = "lukebfox";
name = "Luke Bentley-Fox";
};
lukego = { lukego = {
email = "luke@snabb.co"; email = "luke@snabb.co";
github = "lukego"; github = "lukego";
@ -2911,6 +3060,11 @@
github = "MarcFontaine"; github = "MarcFontaine";
name = "Marc Fontaine"; name = "Marc Fontaine";
}; };
magenbluten = {
email = "magenbluten@codemonkey.cc";
github = "magenbluten";
name = "magenbluten";
};
magnetophon = { magnetophon = {
email = "bart@magnetophon.nl"; email = "bart@magnetophon.nl";
github = "magnetophon"; github = "magnetophon";
@ -2980,6 +3134,15 @@
github = "martingms"; github = "martingms";
name = "Martin Gammelsæter"; name = "Martin Gammelsæter";
}; };
marzipankaiser = {
email = "nixos@gaisseml.de";
github = "marzipankaiser";
name = "Marcial Gaißert";
keys = [{
longkeyid = "rsa2048/0xB629036BE399EEE9";
fingerprint = "B573 5118 0375 A872 FBBF 7770 B629 036B E399 EEE9";
}];
};
matejc = { matejc = {
email = "cotman.matej@gmail.com"; email = "cotman.matej@gmail.com";
github = "matejc"; github = "matejc";
@ -3154,6 +3317,11 @@
github = "michelk"; github = "michelk";
name = "Michel Kuhlmann"; name = "Michel Kuhlmann";
}; };
michojel = {
email = "mic.liamg@gmail.com";
github = "michojel";
name = "Michal Minář";
};
mickours = { mickours = {
email = "mickours@gmail.com<"; email = "mickours@gmail.com<";
github = "mickours"; github = "mickours";
@ -3183,6 +3351,11 @@
github = "mimadrid"; github = "mimadrid";
name = "Miguel Madrid"; name = "Miguel Madrid";
}; };
minijackson = {
email = "minijackson@riseup.net";
github = "minijackson";
name = "Rémi Nicole";
};
mirdhyn = { mirdhyn = {
email = "mirdhyn@gmail.com"; email = "mirdhyn@gmail.com";
github = "mirdhyn"; github = "mirdhyn";
@ -3303,6 +3476,11 @@
github = "mpickering"; github = "mpickering";
name = "Matthew Pickering"; name = "Matthew Pickering";
}; };
mpoquet = {
email = "millian.poquet@gmail.com";
github = "mpoquet";
name = "Millian Poquet";
};
mpscholten = { mpscholten = {
email = "marc@mpscholten.de"; email = "marc@mpscholten.de";
github = "mpscholten"; github = "mpscholten";
@ -3313,11 +3491,21 @@
github = "fstamour"; github = "fstamour";
name = "Francis St-Amour"; name = "Francis St-Amour";
}; };
mredaelli = {
email = "massimo@typish.io";
github = "mredaelli";
name = "Massimo Redaelli";
};
mrkkrp = { mrkkrp = {
email = "markkarpov92@gmail.com"; email = "markkarpov92@gmail.com";
github = "mrkkrp"; github = "mrkkrp";
name = "Mark Karpov"; name = "Mark Karpov";
}; };
mrmebelman = {
email = "burzakovskij@protonmail.com";
github = "MrMebelMan";
name = "Vladyslav Burzakovskyy";
};
mrVanDalo = { mrVanDalo = {
email = "contact@ingolf-wagner.de"; email = "contact@ingolf-wagner.de";
github = "mrVanDalo"; github = "mrVanDalo";
@ -3327,6 +3515,10 @@
email = "matthew@wellquite.org"; email = "matthew@wellquite.org";
name = "Matthew Sackman"; name = "Matthew Sackman";
}; };
mschneider = {
email = "markus.schneider.sic+nix@gmail.com";
name = "Markus Schneider";
};
mschristiansen = { mschristiansen = {
email = "mikkel@rheosystems.com"; email = "mikkel@rheosystems.com";
github = "mschristiansen"; github = "mschristiansen";
@ -3416,6 +3608,11 @@
github = "nathan-gs"; github = "nathan-gs";
name = "Nathan Bijnens"; name = "Nathan Bijnens";
}; };
nathyong = {
email = "nathyong@noreply.github.com";
github = "nathyong";
name = "Nathan Yong";
};
nckx = { nckx = {
email = "github@tobias.gr"; email = "github@tobias.gr";
github = "nckx"; github = "nckx";
@ -3546,6 +3743,11 @@
github = "nphilou"; github = "nphilou";
name = "Philippe Nguyen"; name = "Philippe Nguyen";
}; };
nshalman = {
email = "nahamu@gmail.com";
github = "nshalman";
name = "Nahum Shalman";
};
nslqqq = { nslqqq = {
email = "nslqqq@gmail.com"; email = "nslqqq@gmail.com";
name = "Nikita Mikhailov"; name = "Nikita Mikhailov";
@ -3798,6 +4000,11 @@
github = "pierrechevalier83"; github = "pierrechevalier83";
name = "Pierre Chevalier"; name = "Pierre Chevalier";
}; };
pierreis = {
email = "pierre@pierre.is";
github = "pierreis";
name = "Pierre Matri";
};
pierrer = { pierrer = {
email = "pierrer@pi3r.be"; email = "pierrer@pi3r.be";
github = "pierrer"; github = "pierrer";
@ -3887,6 +4094,16 @@
github = "pradeepchhetri"; github = "pradeepchhetri";
name = "Pradeep Chhetri"; name = "Pradeep Chhetri";
}; };
pradyuman = {
email = "me@pradyuman.co";
github = "pradyuman";
name = "Pradyuman Vig";
keys = [
{ longkeyid = "rsa4096/4F74D5361C4CA31E";
fingerprint = "240B 57DE 4271 2480 7CE3 EAC8 4F74 D536 1C4C A31E";
}
];
};
prikhi = { prikhi = {
email = "pavan.rikhi@gmail.com"; email = "pavan.rikhi@gmail.com";
github = "prikhi"; github = "prikhi";
@ -3949,6 +4166,11 @@
github = "Ptival"; github = "Ptival";
name = "Valentin Robert"; name = "Valentin Robert";
}; };
ptrhlm = {
email = "ptrhlm0@gmail.com";
github = "ptrhlm";
name = "Piotr Halama";
};
puffnfresh = { puffnfresh = {
email = "brian@brianmckenna.org"; email = "brian@brianmckenna.org";
github = "puffnfresh"; github = "puffnfresh";
@ -3958,6 +4180,11 @@
email = "patrick.callahan@latitudeengineering.com"; email = "patrick.callahan@latitudeengineering.com";
name = "Patrick Callahan"; name = "Patrick Callahan";
}; };
pyrolagus = {
email = "pyrolagus@gmail.com";
github = "PyroLagus";
name = "Danny Bautista";
};
q3k = { q3k = {
email = "q3k@q3k.org"; email = "q3k@q3k.org";
github = "q3k"; github = "q3k";
@ -4106,6 +4333,11 @@
github = "retrry"; github = "retrry";
name = "Tadas Barzdžius"; name = "Tadas Barzdžius";
}; };
rexim = {
email = "reximkut@gmail.com";
github = "rexim";
name = "Alexey Kutepov";
};
rht = { rht = {
email = "rhtbot@protonmail.com"; email = "rhtbot@protonmail.com";
github = "rht"; github = "rht";
@ -4290,6 +4522,10 @@
email = "robert@rycee.net"; email = "robert@rycee.net";
github = "rycee"; github = "rycee";
name = "Robert Helgesson"; name = "Robert Helgesson";
keys = [{
longkeyid = "rsa4096/0x3573356C25C424D4";
fingerprint = "36CA CF52 D098 CC0E 78FB 0CB1 3573 356C 25C4 24D4";
}];
}; };
ryneeverett = { ryneeverett = {
email = "ryneeverett@gmail.com"; email = "ryneeverett@gmail.com";
@ -4311,6 +4547,11 @@
github = "samdroid-apps"; github = "samdroid-apps";
name = "Sam Parkinson"; name = "Sam Parkinson";
}; };
samrose = {
email = "samuel.rose@gmail.com";
github = "samrose";
name = "Sam Rose";
};
samueldr = { samueldr = {
email = "samuel@dionne-riel.com"; email = "samuel@dionne-riel.com";
github = "samueldr"; github = "samueldr";
@ -4331,6 +4572,11 @@
github = "sargon"; github = "sargon";
name = "Daniel Ehlers"; name = "Daniel Ehlers";
}; };
saschagrunert = {
email = "mail@saschagrunert.de";
github = "saschagrunert";
name = "Sascha Grunert";
};
sauyon = { sauyon = {
email = "s@uyon.co"; email = "s@uyon.co";
github = "sauyon"; github = "sauyon";
@ -4434,6 +4680,11 @@
github = "sfrijters"; github = "sfrijters";
name = "Stefan Frijters"; name = "Stefan Frijters";
}; };
sgraf = {
email = "sgraf1337@gmail.com";
github = "sgraf812";
name = "Sebastian Graf";
};
shanemikel = { shanemikel = {
email = "shanemikel1@gmail.com"; email = "shanemikel1@gmail.com";
github = "shanemikel"; github = "shanemikel";
@ -4444,6 +4695,11 @@
github = "shawndellysse"; github = "shawndellysse";
name = "Shawn Dellysse"; name = "Shawn Dellysse";
}; };
shazow = {
email = "andrey.petrov@shazow.net";
github = "shazow";
name = "Andrey Petrov";
};
sheenobu = { sheenobu = {
email = "sheena.artrip@gmail.com"; email = "sheena.artrip@gmail.com";
github = "sheenobu"; github = "sheenobu";
@ -4464,6 +4720,11 @@
github = "shlevy"; github = "shlevy";
name = "Shea Levy"; name = "Shea Levy";
}; };
shmish111 = {
email = "shmish111@gmail.com";
github = "shmish111";
name = "David Smith";
};
shou = { shou = {
email = "x+g@shou.io"; email = "x+g@shou.io";
github = "Shou"; github = "Shou";
@ -4489,6 +4750,11 @@
github = "sigma"; github = "sigma";
name = "Yann Hodique"; name = "Yann Hodique";
}; };
sikmir = {
email = "sikmir@gmail.com";
github = "sikmir";
name = "Nikolay Korotkiy";
};
simonvandel = { simonvandel = {
email = "simon.vandel@gmail.com"; email = "simon.vandel@gmail.com";
github = "simonvandel"; github = "simonvandel";
@ -4629,6 +4895,11 @@
github = "srghma"; github = "srghma";
name = "Sergei Khoma"; name = "Sergei Khoma";
}; };
srgom = {
email = "srgom@users.noreply.github.com";
github = "srgom";
name = "SRGOM";
};
srhb = { srhb = {
email = "sbrofeldt@gmail.com"; email = "sbrofeldt@gmail.com";
github = "srhb"; github = "srhb";
@ -4639,6 +4910,11 @@
github = "severen"; github = "severen";
name = "Severen Redwood"; name = "Severen Redwood";
}; };
steell = {
email = "steve@steellworks.com";
github = "Steell";
name = "Steve Elliott";
};
stephenmw = { stephenmw = {
email = "stephen@q5comm.com"; email = "stephen@q5comm.com";
github = "stephenmw"; github = "stephenmw";
@ -4853,6 +5129,11 @@
github = "terlar"; github = "terlar";
name = "Terje Larsen"; name = "Terje Larsen";
}; };
tesq0 = {
email = "mikolaj.galkowski@gmail.com";
github = "tesq0";
name = "Mikolaj Galkowski";
};
teto = { teto = {
email = "mcoudron@hotmail.com"; email = "mcoudron@hotmail.com";
github = "teto"; github = "teto";
@ -4888,6 +5169,16 @@
github = "the-kenny"; github = "the-kenny";
name = "Moritz Ulrich"; name = "Moritz Ulrich";
}; };
thedavidmeister = {
email = "thedavidmeister@gmail.com";
github = "thedavidmeister";
name = "David Meister";
};
thefloweringash = {
email = "lorne@cons.org.nz";
github = "thefloweringash";
name = "Andrew Childs";
};
thesola10 = { thesola10 = {
email = "thesola10@bobile.fr"; email = "thesola10@bobile.fr";
github = "thesola10"; github = "thesola10";
@ -4902,6 +5193,11 @@
github = "ctheune"; github = "ctheune";
name = "Christian Theune"; name = "Christian Theune";
}; };
thiagokokada = {
email = "thiagokokada@gmail.com";
github = "thiagokokada";
name = "Thiago K. Okada";
};
ThomasMader = { ThomasMader = {
email = "thomas.mader@gmail.com"; email = "thomas.mader@gmail.com";
github = "ThomasMader"; github = "ThomasMader";
@ -4967,6 +5263,11 @@
github = "tobimpub"; github = "tobimpub";
name = "Tobias Mayer"; name = "Tobias Mayer";
}; };
tobiasBora = {
email = "tobias.bora.list@gmail.com";
github = "tobiasBora";
name = "Tobias Bora";
};
tohl = { tohl = {
email = "tom@logand.com"; email = "tom@logand.com";
github = "tohl"; github = "tohl";
@ -5244,6 +5545,11 @@
github = "vskilet"; github = "vskilet";
name = "Victor SENE"; name = "Victor SENE";
}; };
vyorkin = {
email = "vasiliy.yorkin@gmail.com";
github = "vyorkin";
name = "Vasiliy Yorkin";
};
vyp = { vyp = {
email = "elisp.vim@gmail.com"; email = "elisp.vim@gmail.com";
github = "vyp"; github = "vyp";
@ -5336,6 +5642,11 @@
github = "xaverdh"; github = "xaverdh";
name = "Dominik Xaver Hörl"; name = "Dominik Xaver Hörl";
}; };
xbreak = {
email = "xbreak@alphaware.se";
github = "xbreak";
name = "Calle Rosenquist";
};
xeji = { xeji = {
email = "xeji@cat3.de"; email = "xeji@cat3.de";
github = "xeji"; github = "xeji";
@ -5520,34 +5831,9 @@
github = "zzamboni"; github = "zzamboni";
name = "Diego Zamboni"; name = "Diego Zamboni";
}; };
mredaelli = { turbomack = {
email = "massimo@typish.io"; email = "marek.faj@gmail.com";
github = "mredaelli"; github = "turboMaCk";
name = "Massimo Redaelli"; name = "Marek Fajkus";
}; };
shmish111 = {
email = "shmish111@gmail.com";
github = "shmish111";
name = "David Smith";
};
minijackson = {
email = "minijackson@riseup.net";
github = "minijackson";
name = "Rémi Nicole";
};
shazow = {
email = "andrey.petrov@shazow.net";
github = "shazow";
name = "Andrey Petrov";
};
freezeboy = {
email = "freezeboy@users.noreply.github.com";
github = "freezeboy";
name = "freezeboy";
};
tesq0 = {
email = "mikolaj.galkowski@gmail.com";
github = "tesq0";
name = "Mikolaj Galkowski";
};
} }

View File

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

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

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,48 +8,52 @@
# 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
if [ $# -lt 1 ]; then
print_help
exit 1
fi
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 :)
local lc="$BASH_COMMAND" rc=$? PARALLEL_JOBS=10
test $rc -eq 0 || echo -e "*** error $rc: $lc.\nGenerated temporary file in $TMP_FILE" >&2
exit_trap() {
local lc="$BASH_COMMAND" rc=$?
test $rc -eq 0 || echo -e "*** error $rc: $lc.\nGenerated temporary file in $TMP_FILE" >&2
} }
trap exit_trap EXIT
print_help() { print_help() {
echo "Usage: $0 <GENERATED_FILE>" echo "Usage: $0 <GENERATED_FILE>"
echo "(most likely pkgs/development/lua-modules/generated-packages.nix)" echo "(most likely pkgs/development/lua-modules/generated-packages.nix)"
echo "" echo ""
echo " -c <CSV_FILE> to set the list of luarocks package to generate" echo " -c <CSV_FILE> to set the list of luarocks package to generate"
exit 1 exit 1
} }
if [ $# -lt 1 ]; then
print_help
exit 1
fi
trap exit_trap EXIT
while getopts ":hc:" opt; do while getopts ":hc:" opt; do
case $opt in case $opt in
h) h)
print_help print_help
;; ;;
c) c)
echo "Loading package list from $OPTARG !" >&2 echo "Loading package list from $OPTARG !" >&2
CSV_FILE="$OPTARG" CSV_FILE="$OPTARG"
;; ;;
\?) \?)
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,47 +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="" server="$3"
if [ ! -z "$3" ]; then pkg_version="$4"
server=" --server=$3" lua_version="$5"
fi maintainers="$6"
version="${4:-}" if [ "${nix_pkg_name:0:1}" == "#" ]; then
echo "Skipping comment ${*}" >&2
return
fi
if [ -z "$lua_pkg_name" ]; then
echo "Using nix_name as lua_pkg_name for '$nix_pkg_name'" >&2
lua_pkg_name="$nix_pkg_name"
fi
echo "looking at $lua_pkg_name (version $version) from server [$server]" >&2 echo "Building expression for $lua_pkg_name (version $pkg_version) from server [$server]" >&2
cmd="luarocks nix $server $lua_pkg_name $version" luarocks_args=(nix)
drv="$nix_pkg_name = $($cmd)" if [[ -n $server ]]; then
if [ $? -ne 0 ]; then luarocks_args+=("--only-server=$server")
echo "Failed to convert $pkg" >&2 fi
echo "$drv" >&2 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
# name,server,version export -f convert_pkg
while IFS=, read -r nix_pkg_name lua_pkg_name server version export SHELL=bash
do # Read each line in the csv file and run convert_pkg for each, in parallel
if [ "${nix_pkg_name:0:1}" == "#" ]; then parallel --group --keep-order --halt now,fail=1 --jobs "$PARALLEL_JOBS" --colsep ',' convert_pkg {} <"$CSV_FILE" | tee -a "$TMP_FILE"
echo "Skipping comment ${nix_pkg_name}" >&2
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" "$version"
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

@ -20,7 +20,9 @@ let
in in
[x] ++ nubOn f xs; [x] ++ nubOn f xs;
pkgs = import ./../../default.nix { }; pkgs = import ./../../default.nix {
overlays = [];
};
packagesWith = cond: return: set: packagesWith = cond: return: set:
nubOn (pkg: pkg.updateScript) nubOn (pkg: pkg.updateScript)
@ -67,9 +69,12 @@ let
let let
attrSet = pkgs.lib.attrByPath (pkgs.lib.splitString "." path) null pkgs; attrSet = pkgs.lib.attrByPath (pkgs.lib.splitString "." path) null pkgs;
in in
packagesWith (name: pkg: builtins.hasAttr "updateScript" pkg) if attrSet == null then
(name: pkg: pkg) builtins.throw "Attribute path `${path}` does not exists."
attrSet; else
packagesWith (name: pkg: builtins.hasAttr "updateScript" pkg)
(name: pkg: pkg)
attrSet;
packageByName = name: packageByName = name:
let let
@ -122,9 +127,17 @@ let
packageData = package: { packageData = package: {
name = package.name; name = package.name;
pname = (builtins.parseDrvName package.name).name; pname = (builtins.parseDrvName package.name).name;
updateScript = pkgs.lib.toList package.updateScript; updateScript = map builtins.toString (pkgs.lib.toList package.updateScript);
}; };
packagesJson = pkgs.writeText "packages.json" (builtins.toJSON (map packageData packages));
optionalArgs =
pkgs.lib.optional (max-workers != null) "--max-workers=${max-workers}"
++ pkgs.lib.optional (keep-going == "true") "--keep-going";
args = [ packagesJson ] ++ optionalArgs;
in pkgs.stdenv.mkDerivation { in pkgs.stdenv.mkDerivation {
name = "nixpkgs-update-script"; name = "nixpkgs-update-script";
buildCommand = '' buildCommand = ''
@ -139,6 +152,6 @@ in pkgs.stdenv.mkDerivation {
''; '';
shellHook = '' shellHook = ''
unset shellHook # do not contaminate nested shells unset shellHook # do not contaminate nested shells
exec ${pkgs.python3.interpreter} ${./update.py} ${pkgs.writeText "packages.json" (builtins.toJSON (map packageData packages))}${pkgs.lib.optionalString (max-workers != null) " --max-workers=${max-workers}"}${pkgs.lib.optionalString (keep-going == "true") " --keep-going"} exec ${pkgs.python3.interpreter} ${./update.py} ${builtins.concatStringsSep " " args}
''; '';
} }

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

@ -29,6 +29,13 @@
<xref linkend="opt-services.openssh.enable"/> = true; <xref linkend="opt-services.openssh.enable"/> = true;
<link linkend="opt-users.users._name__.openssh.authorizedKeys.keys">users.users.root.openssh.authorizedKeys.keys</link> = ["ssh-dss AAAAB3N…"]; <link linkend="opt-users.users._name__.openssh.authorizedKeys.keys">users.users.root.openssh.authorizedKeys.keys</link> = ["ssh-dss AAAAB3N…"];
' '
</screen>
By default the next free address in the <literal>10.233.0.0/16</literal> subnet will be chosen
as container IP. This behavior can be altered by setting <literal>--host-address</literal> and
<literal>--local-address</literal>:
<screen>
# nixos-container create test --config-file test-container.nix \
--local-address 10.235.1.2 --host-address 10.235.1.1
</screen> </screen>
</para> </para>

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,91 +33,91 @@
<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
fqdn =
let let
fqdn = join = hostName: domain: hostName + optionalString (domain != null) ".${domain}";
let in join config.networking.hostName config.networking.domain;
join = hostName: domain: hostName + optionalString (domain != null) ".${domain}"; in {
in join config.networking.hostName config.networking.domain; networking = {
in { hostName = "myhostname";
networking = { domain = "example.org";
hostName = "myhostname"; };
domain = "example.org"; networking.firewall.allowedTCPPorts = [ 80 443 ];
};
networking.firewall.allowedTCPPorts = [ 80 443 ];
services.nginx = { services.nginx = {
enable = true; enable = true;
# only recommendedProxySettings and recommendedGzipSettings are strictly required, # only recommendedProxySettings and recommendedGzipSettings are strictly required,
# but the rest make sense as well # but the rest make sense as well
recommendedTlsSettings = true; recommendedTlsSettings = true;
recommendedOptimisation = true; recommendedOptimisation = true;
recommendedGzipSettings = true; recommendedGzipSettings = true;
recommendedProxySettings = true; recommendedProxySettings = true;
virtualHosts = { virtualHosts = {
# This host section can be placed on a different host than the rest, # This host section can be placed on a different host than the rest,
# i.e. to delegate from the host being accessible as ${config.networking.domain} # i.e. to delegate from the host being accessible as ${config.networking.domain}
# to another host actually running the Matrix homeserver. # to another host actually running the Matrix homeserver.
"${config.networking.domain}" = { "${config.networking.domain}" = {
locations."= /.well-known/matrix/server".extraConfig = locations."= /.well-known/matrix/server".extraConfig =
let let
# use 443 instead of the default 8448 port to unite # use 443 instead of the default 8448 port to unite
# the client-server and server-server port for simplicity # the client-server and server-server port for simplicity
server = { "m.server" = "${fqdn}:443"; }; server = { "m.server" = "${fqdn}:443"; };
in '' in ''
add_header Content-Type application/json; add_header Content-Type application/json;
return 200 '${builtins.toJSON server}'; return 200 '${builtins.toJSON server}';
''; '';
locations."= /.well-known/matrix/client".extraConfig = locations."= /.well-known/matrix/client".extraConfig =
let let
client = { client = {
"m.homeserver" = { "base_url" = "https://${fqdn}"; }; "m.homeserver" = { "base_url" = "https://${fqdn}"; };
"m.identity_server" = { "base_url" = "https://vector.im"; }; "m.identity_server" = { "base_url" = "https://vector.im"; };
};
# ACAO required to allow riot-web on any URL to request this json file
in ''
add_header Content-Type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '${builtins.toJSON client}';
'';
};
# Reverse proxy for Matrix client-server and server-server communication
${fqdn} = {
enableACME = true;
forceSSL = true;
# Or do a redirect instead of the 404, or whatever is appropriate for you.
# But do not put a Matrix Web client here! See the Riot Web section below.
locations."/".extraConfig = ''
return 404;
'';
# forward all Matrix API calls to the synapse Matrix homeserver
locations."/_matrix" = {
proxyPass = "http://[::1]:8008";
}; };
}; # ACAO required to allow riot-web on any URL to request this json file
in ''
add_header Content-Type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '${builtins.toJSON client}';
'';
};
# Reverse proxy for Matrix client-server and server-server communication
${fqdn} = {
enableACME = true;
forceSSL = true;
# Or do a redirect instead of the 404, or whatever is appropriate for you.
# But do not put a Matrix Web client here! See the Riot Web section below.
locations."/".extraConfig = ''
return 404;
'';
# forward all Matrix API calls to the synapse Matrix homeserver
locations."/_matrix" = {
proxyPass = "http://[::1]:8008/_matrix";
}; };
}; };
services.matrix-synapse = {
enable = true;
server_name = config.networking.domain;
listeners = [
{
port = 8008;
bind_address = "::1";
type = "http";
tls = false;
x_forwarded = true;
resources = [
{ names = [ "client" "federation" ]; compress = false; }
];
}
];
};
}; };
</programlisting> };
services.matrix-synapse = {
enable = true;
server_name = config.networking.domain;
listeners = [
{
port = 8008;
bind_address = "::1";
type = "http";
tls = false;
x_forwarded = true;
resources = [
{ names = [ "client" "federation" ]; compress = false; }
];
}
];
};
};
</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,16 +177,16 @@
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 = [
"riot.${config.networking.domain}" "riot.${config.networking.domain}"
]; ];
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

@ -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

@ -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

@ -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,7 +9,8 @@
<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).
@ -23,7 +24,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 +33,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 +42,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 +52,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 +63,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 +79,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

@ -110,7 +110,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 +118,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 +140,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 +172,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 +218,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 +227,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 +242,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 +273,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 +287,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 +303,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,11 +325,11 @@
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
@ -412,7 +412,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 +439,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 +460,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 -qa \*</screen>
shows what packages are available, and shows what packages are available, and
<screen> <screen>
$ nix-env -i w3m</screen> <prompt>$ </prompt>nix-env -i w3m</screen>
install the <literal>w3m</literal> browser. install the <literal>w3m</literal> browser.
</para> </para>
</listitem> </listitem>
@ -489,19 +489,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 +509,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 +543,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

@ -13,18 +13,18 @@
</refnamediv> </refnamediv>
<refsynopsisdiv> <refsynopsisdiv>
<cmdsynopsis> <cmdsynopsis>
<command>nixos-generate-config</command> <command>nixos-generate-config</command>
<arg> <arg>
<option>--force</option> <option>--force</option>
</arg> </arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--root</option> <option>--root</option>
</arg> </arg>
<replaceable>root</replaceable> <replaceable>root</replaceable>
</arg> </arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--dir</option> <option>--dir</option>
@ -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

@ -13,72 +13,72 @@
</refnamediv> </refnamediv>
<refsynopsisdiv> <refsynopsisdiv>
<cmdsynopsis> <cmdsynopsis>
<command>nixos-install</command> <command>nixos-install</command>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>-I</option> <option>-I</option>
</arg> </arg>
<replaceable>path</replaceable> <replaceable>path</replaceable>
</arg> </arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--root</option> <option>--root</option>
</arg> </arg>
<replaceable>root</replaceable> <replaceable>root</replaceable>
</arg> </arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--system</option> <option>--system</option>
</arg> </arg>
<replaceable>path</replaceable> <replaceable>path</replaceable>
</arg> </arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--no-channel-copy</option> <option>--no-channel-copy</option>
</arg> </arg>
</arg> </arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--no-root-passwd</option> <option>--no-root-passwd</option>
</arg> </arg>
</arg> </arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--no-bootloader</option> <option>--no-bootloader</option>
</arg> </arg>
</arg> </arg>
<arg> <arg>
<group choice='req'> <group choice='req'>
<arg choice='plain'> <arg choice='plain'>
<option>--max-jobs</option> <option>--max-jobs</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>-j</option> <option>-j</option>
</arg> </arg>
</group> <replaceable>number</replaceable> </group> <replaceable>number</replaceable>
</arg> </arg>
<arg> <arg>
<option>--cores</option> <replaceable>number</replaceable> <option>--cores</option> <replaceable>number</replaceable>
</arg> </arg>
<arg> <arg>
<option>--option</option> <replaceable>name</replaceable> <replaceable>value</replaceable> <option>--option</option> <replaceable>name</replaceable> <replaceable>value</replaceable>
</arg> </arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--show-trace</option> <option>--show-trace</option>
</arg> </arg>
</arg> </arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>--help</option> <option>--help</option>
@ -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

@ -13,19 +13,19 @@
</refnamediv> </refnamediv>
<refsynopsisdiv> <refsynopsisdiv>
<cmdsynopsis> <cmdsynopsis>
<command>nixos-option</command> <command>nixos-option</command>
<arg> <arg>
<option>-I</option> <replaceable>path</replaceable> <option>-I</option> <replaceable>path</replaceable>
</arg> </arg>
<arg> <arg>
<option>--verbose</option> <option>--verbose</option>
</arg> </arg>
<arg> <arg>
<option>--xml</option> <option>--xml</option>
</arg> </arg>
<arg choice="plain"> <arg choice="plain">
<replaceable>option.name</replaceable> <replaceable>option.name</replaceable>
</arg> </arg>
@ -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

@ -13,39 +13,39 @@
</refnamediv> </refnamediv>
<refsynopsisdiv> <refsynopsisdiv>
<cmdsynopsis> <cmdsynopsis>
<command>nixos-rebuild</command><group choice='req'> <command>nixos-rebuild</command><group choice='req'>
<arg choice='plain'> <arg choice='plain'>
<option>switch</option> <option>switch</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>boot</option> <option>boot</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>test</option> <option>test</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>build</option> <option>build</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>dry-build</option> <option>dry-build</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>dry-activate</option> <option>dry-activate</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>edit</option> <option>edit</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>build-vm</option> <option>build-vm</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>build-vm-with-bootloader</option> <option>build-vm-with-bootloader</option>
</arg> </arg>
@ -54,33 +54,33 @@
<arg> <arg>
<option>--upgrade</option> <option>--upgrade</option>
</arg> </arg>
<arg> <arg>
<option>--install-bootloader</option> <option>--install-bootloader</option>
</arg> </arg>
<arg> <arg>
<option>--no-build-nix</option> <option>--no-build-nix</option>
</arg> </arg>
<arg> <arg>
<option>--fast</option> <option>--fast</option>
</arg> </arg>
<arg> <arg>
<option>--rollback</option> <option>--rollback</option>
</arg> </arg>
<arg> <arg>
<option>--builders</option> <replaceable>builder-spec</replaceable> <option>--builders</option> <replaceable>builder-spec</replaceable>
</arg> </arg>
<sbr /> <sbr />
<arg> <arg>
<group choice='req'> <group choice='req'>
<arg choice='plain'> <arg choice='plain'>
<option>--profile-name</option> <option>--profile-name</option>
</arg> </arg>
<arg choice='plain'> <arg choice='plain'>
<option>-p</option> <option>-p</option>
</arg> </arg>
@ -160,7 +160,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 +215,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 +375,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

@ -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

View File

@ -626,17 +626,17 @@
xlink:href="https://nixos.org/nixpkgs/manual/#sec-overlays-install"> xlink:href="https://nixos.org/nixpkgs/manual/#sec-overlays-install">
overlays</link>. For example, the following code: overlays</link>. For example, the following code:
<programlisting> <programlisting>
let let
pkgs = import &lt;nixpkgs&gt; {}; pkgs = import &lt;nixpkgs&gt; {};
in in
pkgs.overridePackages (self: super: ...) pkgs.overridePackages (self: super: ...)
</programlisting> </programlisting>
should be replaced by: should be replaced by:
<programlisting> <programlisting>
let let
pkgs = import &lt;nixpkgs&gt; {}; pkgs = import &lt;nixpkgs&gt; {};
in in
import pkgs.path { overlays = [(self: super: ...)]; } import pkgs.path { overlays = [(self: super: ...)]; }
</programlisting> </programlisting>
</para> </para>
</listitem> </listitem>

View File

@ -3,7 +3,7 @@
xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xi="http://www.w3.org/2001/XInclude"
version="5.0" version="5.0"
xml:id="sec-release-19.03"> xml:id="sec-release-19.03">
<title>Release 19.03 (“Koi”, 2019/03/??)</title> <title>Release 19.03 (“Koi”, 2019/04/11)</title>
<section xmlns="http://docbook.org/ns/docbook" <section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
@ -18,6 +18,11 @@
</para> </para>
<itemizedlist> <itemizedlist>
<listitem>
<para>
End of support is planned for end of October 2019, handing over to 19.09.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
The default Python 3 interpreter is now CPython 3.7 instead of CPython The default Python 3 interpreter is now CPython 3.7 instead of CPython

View File

@ -19,7 +19,19 @@
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para /> <para>
End of support is planned for end of April 2020, handing over to 20.03.
</para>
</listitem>
<listitem>
<para>
PHP now defaults to PHP 7.3, updated from 7.2.
</para>
</listitem>
<listitem>
<para>
PHP 7.1 is no longer supported due to upstream not supporting this version for the entire lifecycle of the 19.09 release.
</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</section> </section>
@ -69,37 +81,118 @@
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The options <option>services.prometheus.alertmanager.user</option> and The options <option>services.prometheus.alertmanager.user</option> and
<option>services.prometheus.alertmanager.group</option> have been removed <option>services.prometheus.alertmanager.group</option> have been removed
because the alertmanager service is now using systemd's <link because the alertmanager service is now using systemd's <link
xlink:href="http://0pointer.net/blog/dynamic-users-with-systemd.html"> xlink:href="http://0pointer.net/blog/dynamic-users-with-systemd.html">
DynamicUser mechanism</link> which obviates these options. DynamicUser mechanism</link> which obviates these options.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The NetworkManager systemd unit was renamed back from network-manager.service to The NetworkManager systemd unit was renamed back from network-manager.service to
NetworkManager.service for better compatibility with other applications expecting this name. NetworkManager.service for better compatibility with other applications expecting this name.
The same applies to ModemManager where modem-manager.service is now called ModemManager.service again. The same applies to ModemManager where modem-manager.service is now called ModemManager.service again.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The <option>services.nzbget.configFile</option> and <option>services.nzbget.openFirewall</option> The <option>services.nzbget.configFile</option> and <option>services.nzbget.openFirewall</option>
options were removed as they are managed internally by the nzbget. The options were removed as they are managed internally by the nzbget. The
<option>services.nzbget.dataDir</option> option hadn't actually been used by <option>services.nzbget.dataDir</option> option hadn't actually been used by
the module for some time and so was removed as cleanup. the module for some time and so was removed as cleanup.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The <option>services.emby.enable</option> module has been removed, see The <option>services.mysql.pidDir</option> option was removed, as it was only used by the wordpress
<option>services.jellyfin.enable</option> instead for a free software fork of Emby. apache-httpd service to wait for mysql to have started up.
This can be accomplished by either describing a dependency on mysql.service (preferred)
or waiting for the (hardcoded) <filename>/run/mysqld/mysql.sock</filename> file to appear.
</para>
</listitem>
<listitem>
<para>
The <option>services.emby.enable</option> module has been removed, see
<option>services.jellyfin.enable</option> instead for a free software fork of Emby.
See the Jellyfin documentation: See the Jellyfin documentation:
<link xlink:href="https://jellyfin.readthedocs.io/en/latest/administrator-docs/migrate-from-emby/"> <link xlink:href="https://jellyfin.readthedocs.io/en/latest/administrator-docs/migrate-from-emby/">
Migrating from Emby to Jellyfin Migrating from Emby to Jellyfin
</link> </link>
</para>
</listitem>
<listitem>
<para>
IPv6 Privacy Extensions are now enabled by default for undeclared
interfaces. The previous behaviour was quite misleading — even though
the default value for
<option>networking.interfaces.*.preferTempAddress</option> was
<literal>true</literal>, undeclared interfaces would not prefer temporary
addresses. Now, interfaces not mentioned in the config will prefer
temporary addresses. EUI64 addresses can still be set as preferred by
explicitly setting the option to <literal>false</literal> for the
interface in question.
</para>
</listitem>
<listitem>
<para>
Since Bittorrent Sync was superseded by Resilio Sync in 2016, the
<literal>bittorrentSync</literal>, <literal>bittorrentSync14</literal>,
and <literal>bittorrentSync16</literal> packages have been removed in
favor of <literal>resilio-sync</literal>.
</para>
<para>
The corresponding module, <option>services.btsync</option> has been
replaced by the <option>services.resilio</option> module.
</para>
</listitem>
<listitem>
<para>
Several of the apache subservices have been replaced with full NixOS
modules including LimeSurvey, WordPress, and Zabbix.
These modules can be enabled using the <option>services.limesurvey.enable</option>,
<option>services.wordpress.enable</option>, and <option>services.zabbixWeb.enable</option> options.
</para>
</listitem>
<listitem>
<para>
The option <option>systemd.network.networks.&lt;name&gt;.routes.*.routeConfig.GatewayOnlink</option>
was renamed to <option>systemd.network.networks.&lt;name&gt;.routes.*.routeConfig.GatewayOnLink</option>
(capital <literal>L</literal>). This follows
<link xlink:href="https://github.com/systemd/systemd/commit/9cb8c5593443d24c19e40bfd4fc06d672f8c554c">
upstreams renaming
</link> of the setting.
</para>
</listitem>
<listitem>
<para>
As of this release the NixOps feature <literal>autoLuks</literal> is deprecated. It no longer works
with our systemd version without manual intervention.
</para>
<para>
Whenever the usage of the module is detected the evaluation will fail with a message
explaining why and how to deal with the situation.
</para>
<para>
A new knob named <literal>nixops.enableDeprecatedAutoLuks</literal>
has been introduced to disable the eval failure and to acknowledge the notice was received and read.
If you plan on using the feature please note that it might break with subsequent updates.
</para>
<para>
Make sure you set the <literal>_netdev</literal> option for each of the file systems referring to block
devices provided by the autoLuks module. Not doing this might render the system in a
state where it doesn't boot anymore.
</para>
<para>
If you are actively using the <literal>autoLuks</literal> module please let us know in
<link xlink:href="https://github.com/NixOS/nixpkgs/issues/62211">issue #62211</link>.
</para>
</listitem>
<listitem>
<para>
The setopt declarations will be evaluated at the end of <literal>/etc/zshrc</literal>, so any code in <xref linkend="opt-programs.zsh.interactiveShellInit" />,
<xref linkend="opt-programs.zsh.loginShellInit" /> and <xref linkend="opt-programs.zsh.promptInit" /> may break if it relies on those options being set.
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
@ -154,6 +247,101 @@
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</listitem> </listitem>
<listitem>
<para>
The <literal>hunspellDicts.fr-any</literal> dictionary now ships with <literal>fr_FR.{aff,dic}</literal>
which is linked to <literal>fr-toutesvariantes.{aff,dic}</literal>.
</para>
</listitem>
<listitem>
<para>
The <literal>mysql</literal> service now runs as <literal>mysql</literal>
user. Previously, systemd did execute it as root, and mysql dropped privileges
itself.
This includes <literal>ExecStartPre=</literal> and
<literal>ExecStartPost=</literal> phases.
To accomplish that, runtime and data directory setup was delegated to
RuntimeDirectory and tmpfiles.
</para>
</listitem>
<listitem>
<para>
With the upgrade to systemd version 242 the <literal>systemd-timesyncd</literal>
service is no longer using <literal>DynamicUser=yes</literal>. In order for the
upgrade to work we rely on an activation script to move the state from the old
to the new directory. The older directory (prior <literal>19.09</literal>) was
<literal>/var/lib/private/systemd/timesync</literal>.
</para>
<para>
As long as the <literal>system.config.stateVersion</literal> is below
<literal>19.09</literal> the state folder will migrated to its proper location
(<literal>/var/lib/systemd/timesync</literal>), if required.
</para>
</listitem>
<listitem>
<para>
The package <literal>avahi</literal> is now built to look up service
definitions from <literal>/etc/avahi/services</literal> instead of its
output directory in the nix store. Accordingly the module
<option>avahi</option> now supports custom service definitions via
<option>services.avahi.extraServiceFiles</option>, which are then placed
in the aforementioned directory. See <citerefentry>
<refentrytitle>avahi.service</refentrytitle><manvolnum>5</manvolnum>
</citerefentry> for more information on custom service definitions.
</para>
</listitem>
<listitem>
<para>
Since version 0.1.19, <literal>cargo-vendor</literal> honors package
includes that are specified in the <filename>Cargo.toml</filename>
file of Rust crates. <literal>rustPlatform.buildRustPackage</literal> uses
<literal>cargo-vendor</literal> to collect and build dependent crates.
Since this change in <literal>cargo-vendor</literal> changes the set of
vendored files for most Rust packages, the hash that use used to verify
the dependencies, <literal>cargoSha256</literal>, also changes.
</para>
<para>
The <literal>cargoSha256</literal> hashes of all in-tree derivations that
use <literal>buildRustPackage</literal> have been updated to reflect this
change. However, third-party derivations that use
<literal>buildRustPackage</literal> may have to be updated as well.
</para>
</listitem>
<listitem>
<para>
The <literal>consul</literal> package was upgraded past version <literal>1.5</literal>,
so its deprecated legacy UI is no longer available.
</para>
</listitem>
<listitem>
<para>
The default resample-method for PulseAudio has been changed from the upstream default <literal>speex-float-1</literal>
to <literal>speex-float-5</literal>. Be aware that low-powered ARM-based and MIPS-based boards will struggle with this
so you'll need to set <option>hardware.pulseaudio.daemon.config.resample-method</option> back to <literal>speex-float-1</literal>.
</para>
</listitem>
<listitem>
<para>
The <literal>phabricator</literal> package and associated <literal>httpd.extraSubservice</literal>, as well as the
<literal>phd</literal> service have been removed from nixpkgs due to lack of maintainer.
</para>
</listitem>
<listitem>
<para>
The <literal>mercurial</literal> <literal>httpd.extraSubservice</literal> has been removed from nixpkgs due to lack of maintainer.
</para>
</listitem>
<listitem>
<para>
The <literal>trac</literal> <literal>httpd.extraSubservice</literal> has been removed from nixpkgs because it was unmaintained.
</para>
</listitem>
<listitem>
<para>
The <literal>foswiki</literal> package and associated <literal>httpd.extraSubservice</literal> have been removed
from nixpkgs due to lack of maintainer.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>
</section> </section>

View File

@ -32,14 +32,14 @@ rec {
import ./eval-config.nix { import ./eval-config.nix {
inherit system; inherit system;
modules = configurations ++ modules = configurations ++ extraConfigurations;
baseModules = (import ../modules/module-list.nix) ++
[ ../modules/virtualisation/qemu-vm.nix [ ../modules/virtualisation/qemu-vm.nix
../modules/testing/test-instrumentation.nix # !!! should only get added for automated test runs ../modules/testing/test-instrumentation.nix # !!! should only get added for automated test runs
{ key = "no-manual"; documentation.nixos.enable = false; } { key = "no-manual"; documentation.nixos.enable = false; }
{ key = "qemu"; system.build.qemu = qemu; } { key = "qemu"; system.build.qemu = qemu; }
] ++ optional minimal ../modules/testing/minimal-kernel.nix { key = "nodes"; _module.args.nodes = nodes; }
++ extraConfigurations; ] ++ optional minimal ../modules/testing/minimal-kernel.nix;
extraArgs = { inherit nodes; };
}; };

View File

@ -1,9 +1,14 @@
# Builds an ext4 image containing a populated /nix/store with the closure # Builds an ext4 image containing a populated /nix/store with the closure
# of store paths passed in the storePaths parameter. The generated image # of store paths passed in the storePaths parameter, in addition to the
# is sized to only fit its contents, with the expectation that a script # contents of a directory that can be populated with commands. The
# resizes the filesystem at boot time. # generated image is sized to only fit its contents, with the expectation
# that a script resizes the filesystem at boot time.
{ pkgs { pkgs
# List of derivations to be included
, storePaths , storePaths
# Shell commands to populate the ./files directory.
# All files in that directory are copied to the root of the FS.
, populateImageCommands ? ""
, volumeLabel , volumeLabel
, uuid ? "44444444-4444-4444-8888-888888888888" , uuid ? "44444444-4444-4444-8888-888888888888"
, e2fsprogs , e2fsprogs
@ -23,13 +28,17 @@ pkgs.stdenv.mkDerivation {
buildCommand = buildCommand =
'' ''
(
mkdir -p ./files
${populateImageCommands}
)
# Add the closures of the top-level store objects. # Add the closures of the top-level store objects.
storePaths=$(cat ${sdClosureInfo}/store-paths) storePaths=$(cat ${sdClosureInfo}/store-paths)
# Make a crude approximation of the size of the target image. # Make a crude approximation of the size of the target image.
# If the script starts failing, increase the fudge factors here. # If the script starts failing, increase the fudge factors here.
numInodes=$(find $storePaths | wc -l) numInodes=$(find $storePaths ./files | wc -l)
numDataBlocks=$(du -c -B 4096 --apparent-size $storePaths | awk '$2 == "total" { print int($1 * 1.03) }') numDataBlocks=$(du -s -c -B 4096 --apparent-size $storePaths ./files | tail -1 | awk '{ print int($1 * 1.03) }')
bytes=$((2 * 4096 * $numInodes + 4096 * $numDataBlocks)) bytes=$((2 * 4096 * $numInodes + 4096 * $numDataBlocks))
echo "Creating an EXT4 image of $bytes bytes (numInodes=$numInodes, numDataBlocks=$numDataBlocks)" echo "Creating an EXT4 image of $bytes bytes (numInodes=$numInodes, numDataBlocks=$numDataBlocks)"
@ -47,6 +56,12 @@ pkgs.stdenv.mkDerivation {
echo "copying store paths to image..." echo "copying store paths to image..."
cptofs -t ext4 -i $out $storePaths /nix/store/ cptofs -t ext4 -i $out $storePaths /nix/store/
(
echo "copying files to image..."
cd ./files
cptofs -t ext4 -i $out ./* /
)
# I have ended up with corrupted images sometimes, I suspect that happens when the build machine's disk gets full during the build. # I have ended up with corrupted images sometimes, I suspect that happens when the build machine's disk gets full during the build.
if ! fsck.ext4 -n -f $out; then if ! fsck.ext4 -n -f $out; then
echo "--- Fsck failed for EXT4 image of $bytes bytes (numInodes=$numInodes, numDataBlocks=$numDataBlocks) ---" echo "--- Fsck failed for EXT4 image of $bytes bytes (numInodes=$numInodes, numDataBlocks=$numDataBlocks) ---"

View File

@ -31,9 +31,12 @@ sub new {
if (!$startCommand) { if (!$startCommand) {
# !!! merge with qemu-vm.nix. # !!! merge with qemu-vm.nix.
my $netArgs = "";
$netArgs .= ",romfile=$args->{netRomFile}"
if defined $args->{netRomFile};
$startCommand = $startCommand =
"qemu-kvm -m 384 " . "qemu-kvm -m 384 " .
"-net nic,model=virtio \$QEMU_OPTS "; "-device virtio-net-pci,netdev=net0${netArgs} \$QEMU_OPTS ";
if (defined $args->{hda}) { if (defined $args->{hda}) {
if ($args->{hdaInterface} eq "scsi") { if ($args->{hdaInterface} eq "scsi") {

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