Merge branch 'master' into postgresql-plugins-bin
This commit is contained in:
commit
475f1ebd98
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
custom: https://nixos.org/nixos/foundation.html
|
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -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).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
53
doc/Makefile
53
doc/Makefile
@ -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 \
|
||||||
|
@ -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>
|
||||||
|
@ -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>.
|
||||||
|
@ -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 = ''
|
||||||
|
45
doc/doc-support/default.nix
Normal file
45
doc/doc-support/default.nix
Normal 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
|
||||||
|
''
|
@ -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 = ''
|
14
doc/doc-support/parameters.xml
Normal file
14
doc/doc-support/parameters.xml
Normal 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>
|
@ -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" />
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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 > ~/.config/nixpkgs/overlays/prefer-remote-fetch.nix <<EOF
|
<prompt>$ </prompt>cat > ~/.config/nixpkgs/overlays/prefer-remote-fetch.nix <<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>
|
||||||
|
28
doc/functions/snap/example-firefox.nix
Normal file
28
doc/functions/snap/example-firefox.nix
Normal 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";
|
||||||
|
};
|
||||||
|
}
|
12
doc/functions/snap/example-hello.nix
Normal file
12
doc/functions/snap/example-hello.nix
Normal 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";
|
||||||
|
};
|
||||||
|
}
|
74
doc/functions/snaptools.xml
Normal file
74
doc/functions/snaptools.xml
Normal 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>
|
@ -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 <nixpkgs> {}).runCommand "my-example" {} ''
|
(import <nixpkgs> {}).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>
|
||||||
|
@ -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 "<nixpkgs>" -qaP -A beamPackages
|
<prompt>$ </prompt>nix-env -f "<nixpkgs>" -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 "<nixpkgs>" -iA beamPackages.ibrowse
|
<prompt>$ </prompt>nix-env -f "<nixpkgs>" -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 "<nixpkgs>" -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 "<nixpkgs>" -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 "<nixpkgs>" -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 "<nixpkgs>" -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>.
|
||||||
|
@ -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>
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ fileSystem = buildLuaPackage {
|
|||||||
maintainers = with maintainers; [ flosse ];
|
maintainers = with maintainers; [ flosse ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -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>
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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>
|
||||||
|
@ -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" />
|
||||||
|
25
doc/meta.xml
25
doc/meta.xml
@ -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>
|
||||||
|
@ -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 (<>) { if (/(href|HREF)="([^"]*.bz2)"/) { print "$ENV{'i'}$2\n"; }; }' \
|
| perl -e 'while (<>) { 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 '<nixpkgs>' -qaP -A eclipses --description
|
<prompt>$ </prompt>nix-env -f '<nixpkgs>' -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 '<nixpkgs>' -qaP -A eclipses.plugins --description
|
<prompt>$ </prompt>nix-env -f '<nixpkgs>' -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 ("<C-tab>" . 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>
|
||||||
|
469
doc/package-specific-user-notes.xml
Normal file
469
doc/package-specific-user-notes.xml
Normal 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 ("<C-tab>" . 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
|
||||||
|
doesn’t 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>
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
109
doc/stdenv.xml
109
doc/stdenv.xml
@ -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. It’s 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. It’s 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 <= 0 then h else t - 1)
|
|||||||
let f(h, h + 1, i) = i + (if i <= 0 then h else (h + 1) - 1)
|
let f(h, h + 1, i) = i + (if i <= 0 then h else (h + 1) - 1)
|
||||||
let f(h, h + 1, i) = i + (if i <= 0 then h else h)
|
let f(h, h + 1, i) = i + (if i <= 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>
|
||||||
|
@ -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>
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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. */
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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"];
|
||||||
}
|
}
|
||||||
|
@ -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"; };
|
||||||
|
|
||||||
|
@ -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;
|
|
||||||
}
|
|
@ -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 ];
|
||||||
|
@ -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}";
|
||||||
|
@ -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
|
||||||
'';
|
''
|
||||||
}
|
|
||||||
|
@ -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" ];
|
||||||
|
@ -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)
|
||||||
|
@ -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";
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
|
@ -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 =
|
||||||
|
36
maintainers/scripts/update-discord
Executable file
36
maintainers/scripts/update-discord
Executable 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}"
|
@ -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:
|
||||||
|
9
maintainers/scripts/update-luarocks-shell.nix
Normal file
9
maintainers/scripts/update-luarocks-shell.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ nixpkgs ? import ../.. { }
|
||||||
|
}:
|
||||||
|
with nixpkgs;
|
||||||
|
mkShell {
|
||||||
|
buildInputs = [
|
||||||
|
bash luarocks-nix nix-prefetch-scripts parallel
|
||||||
|
];
|
||||||
|
LUAROCKS_NIXPKGS_PATH = toString nixpkgs.path;
|
||||||
|
}
|
@ -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}
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,12 @@
|
|||||||
Nix’s <emphasis>garbage collector</emphasis> to remove old, unreferenced
|
Nix’s <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 Nix’s store optimiser, which seeks out identical files
|
Nix store) is to run Nix’s 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.
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
<literal>10.233.0.0/16</literal>. You can get the container’s IPv4 address
|
<literal>10.233.0.0/16</literal>. You can get the container’s 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>
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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
|
||||||
|
@ -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 Nix’s database, the
|
cryptographic hash differs from the hash recorded in Nix’s 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 they’re available in a binary
|
Any corrupt paths will be redownloaded if they’re available in a binary
|
||||||
cache; otherwise, they cannot be repaired.
|
cache; otherwise, they cannot be repaired.
|
||||||
|
@ -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)
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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 <your-registration-shared-secret> http://localhost:8008
|
<prompt>$ </prompt>register_new_matrix_user -k <replaceable>your-registration-shared-secret</replaceable> http://localhost:8008
|
||||||
New user localpart: <your-username>
|
<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>
|
||||||
|
@ -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 '<nixpkgs/nixos>'
|
<prompt>$ </prompt>nix repl '<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>
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
imports = [
|
imports = [
|
||||||
<nixpkgs/nixos/modules/profiles/profile-name.nix>
|
<nixpkgs/nixos/modules/profiles/profile-name.nix>
|
||||||
];
|
];
|
||||||
</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.
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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
|
||||||
QEMU’s <option>-kernel</option> and <option>-initrd</option> options:
|
QEMU’s <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
|
||||||
|
@ -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
|
||||||
>
|
<prompt>></prompt>
|
||||||
</screen>
|
</screen>
|
||||||
You can then take any Perl statement, e.g.
|
You can then take any Perl statement, e.g.
|
||||||
<screen>
|
<screen>
|
||||||
> startAll
|
<prompt>></prompt> startAll
|
||||||
> testScript
|
<prompt>></prompt> testScript
|
||||||
> $machine->succeed("touch /tmp/foo")
|
<prompt>></prompt> $machine->succeed("touch /tmp/foo")
|
||||||
> print($machine->succeed("pwd")) # Show stdout of command
|
<prompt>></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.
|
||||||
|
@ -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 '<nixpkgs/nixos/tests/login.nix>'
|
<prompt>$ </prompt>nix-build '<nixpkgs/nixos/tests/login.nix>'
|
||||||
</screen>
|
</screen>
|
||||||
or, if you don’t want to rely on <envar>NIX_PATH</envar>:
|
or, if you don’t 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>
|
||||||
|
@ -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 you’ll have to rebuild everything from source.
|
not have caught up yet and you’ll 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 root’s NixOS
|
<filename>~/.nix-defexpr/channels_root</filename> to prevent root’s NixOS
|
||||||
|
@ -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 '<nixpkgs/nixos>' -A config.system.build.nixos-install
|
<prompt>$ </prompt>nix-build '<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 '<nixpkgs/nixos>' -A config.system.build.nixos-enter
|
<prompt>$ </prompt>nix-build '<nixpkgs/nixos>' -A config.system.build.nixos-enter
|
||||||
# ./result/bin/nixos-enter
|
<prompt># </prompt>./result/bin/nixos-enter
|
||||||
</screen>
|
</screen>
|
||||||
</para>
|
</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -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>.
|
||||||
|
@ -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>
|
||||||
|
@ -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 <nixpkgs/nixos> { configuration = {}; }; with config.system.build; [ nixos-generate-config nixos-install nixos-enter manual.manpages ]"</screen>
|
<screen><prompt>$ </prompt>nix-env -iE "_: with import <nixpkgs/nixos> { 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 '<nixpkgs/nixos>' -I nixos-config=/etc/nixos/configuration.nix -iA system</screen>
|
<screen><prompt>$ </prompt>nix-env -p /nix/var/nix/profiles/system -f '<nixpkgs/nixos>' -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 &&
|
<prompt>$ </prompt>sudo mv -v /boot /boot.bak &&
|
||||||
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>
|
||||||
|
@ -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
|
||||||
|
@ -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 @@
|
|||||||
it’s recommended to assign a label to the boot partition:
|
it’s 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 you’re using the graphical ISO image, other editors may be available
|
If you’re 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>
|
|||||||
You’ll probably want to create some user accounts as well, which can be
|
You’ll 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">
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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'”.
|
||||||
|
@ -627,7 +627,7 @@ nix-env -f "<nixpkgs>" -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
|
||||||
|
@ -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 <nixpkgs> {};
|
pkgs = import <nixpkgs> {};
|
||||||
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 <nixpkgs> {};
|
pkgs = import <nixpkgs> {};
|
||||||
in
|
in
|
||||||
import pkgs.path { overlays = [(self: super: ...)]; }
|
import pkgs.path { overlays = [(self: super: ...)]; }
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
@ -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
|
||||||
|
@ -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.<name>.routes.*.routeConfig.GatewayOnlink</option>
|
||||||
|
was renamed to <option>systemd.network.networks.<name>.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>
|
||||||
|
@ -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; };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -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) ---"
|
||||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user