Merge remote-tracking branch 'upstream/master' into gcc-8
This commit is contained in:
commit
616b8343c4
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
@ -107,8 +107,8 @@
|
|||||||
# Eclipse
|
# Eclipse
|
||||||
/pkgs/applications/editors/eclipse @rycee
|
/pkgs/applications/editors/eclipse @rycee
|
||||||
|
|
||||||
# https://github.com/NixOS/nixpkgs/issues/31401
|
# Licenses
|
||||||
/lib/licenses.nix @ghost
|
/lib/licenses.nix @alyssais
|
||||||
|
|
||||||
# Qt / KDE
|
# Qt / KDE
|
||||||
/pkgs/applications/kde @ttuegel
|
/pkgs/applications/kde @ttuegel
|
||||||
|
3
.github/ISSUE_TEMPLATE.md
vendored
3
.github/ISSUE_TEMPLATE.md
vendored
@ -8,5 +8,4 @@
|
|||||||
|
|
||||||
## Technical details
|
## Technical details
|
||||||
|
|
||||||
Please run `nix-shell -p nix-info --run "nix-info -m"` and paste the
|
Please run `nix run nixpkgs.nix-info -c nix-info -m` and paste the result.
|
||||||
results.
|
|
||||||
|
37
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
37
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: '0.kind: bug'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
1. ...
|
||||||
|
2. ...
|
||||||
|
3. ...
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context about the problem here.
|
||||||
|
|
||||||
|
**Metadata**
|
||||||
|
Please run `nix run nixpkgs.nix-info -c nix-info -m` and paste the result.
|
||||||
|
|
||||||
|
Maintainer information:
|
||||||
|
```yaml
|
||||||
|
# a list of nixpkgs attributes affected by the problem
|
||||||
|
attribute:
|
||||||
|
# a list of nixos modules affected by the problem
|
||||||
|
module:
|
||||||
|
```
|
18
.github/ISSUE_TEMPLATE/packaging_request.md
vendored
Normal file
18
.github/ISSUE_TEMPLATE/packaging_request.md
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
name: Packaging requests
|
||||||
|
about: For packages that are missing
|
||||||
|
title: ''
|
||||||
|
labels: '0.kind: packaging request'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Project description**
|
||||||
|
_describe the project a little_
|
||||||
|
|
||||||
|
**Metadata**
|
||||||
|
|
||||||
|
* homepage URL:
|
||||||
|
* source URL:
|
||||||
|
* license: mit, bsd, gpl2+ , ...
|
||||||
|
* platforms: unix, linux, darwin, ...
|
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -15,7 +15,9 @@
|
|||||||
- [ ] Tested compilation of all pkgs that depend on this change using `nix-shell -p nix-review --run "nix-review wip"`
|
- [ ] Tested compilation of all pkgs that depend on this change using `nix-shell -p nix-review --run "nix-review wip"`
|
||||||
- [ ] Tested execution of all binary files (usually in `./result/bin/`)
|
- [ ] Tested execution of all binary files (usually in `./result/bin/`)
|
||||||
- [ ] Determined the impact on package closure size (by running `nix path-info -S` before and after)
|
- [ ] Determined the impact on package closure size (by running `nix path-info -S` before and after)
|
||||||
- [ ] Assured whether relevant documentation is up to date
|
- [ ] Ensured that relevant documentation is up to date
|
||||||
- [ ] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md).
|
- [ ] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md).
|
||||||
|
|
||||||
---
|
###### Notify maintainers
|
||||||
|
|
||||||
|
cc @
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
[<img src="https://nixos.org/logo/nixos-hires.png" width="500px" alt="logo" />](https://nixos.org/nixos)
|
[<img src="https://nixos.org/logo/nixos-hires.png" width="500px" alt="logo" />](https://nixos.org/nixos)
|
||||||
|
|
||||||
[](https://www.codetriage.com/nixos/nixpkgs)
|
[](https://www.codetriage.com/nixos/nixpkgs)
|
||||||
|
[](https://opencollective.com/nixos)
|
||||||
|
|
||||||
Nixpkgs is a collection of packages for the [Nix](https://nixos.org/nix/) package
|
Nixpkgs is a collection of packages for the [Nix](https://nixos.org/nix/) package
|
||||||
manager. It is periodically built and tested by the [Hydra](https://hydra.nixos.org/)
|
manager. It is periodically built and tested by the [Hydra](https://hydra.nixos.org/)
|
||||||
|
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
|
||||||
|
@ -312,7 +312,23 @@ hello latest de2bf4786de6 About a minute ago 25.2MB
|
|||||||
Maximum number of layers to create.
|
Maximum number of layers to create.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
<emphasis>Default:</emphasis> <literal>24</literal>
|
<emphasis>Default:</emphasis> <literal>100</literal>
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
<emphasis>Maximum:</emphasis> <literal>125</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<varname>extraCommands</varname> <emphasis>optional</emphasis>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Shell commands to run while building the final layer, without access
|
||||||
|
to most of the layer contents. Changes to this layer are "on top"
|
||||||
|
of all the other layers, so can create additional directories
|
||||||
|
and files.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -480,9 +496,9 @@ pullImage {
|
|||||||
<literal>nix-prefetch-docker</literal> command can be used to get required
|
<literal>nix-prefetch-docker</literal> command can be used to get required
|
||||||
image parameters:
|
image parameters:
|
||||||
|
|
||||||
<programlisting>
|
<screen>
|
||||||
$ nix run nixpkgs.nix-prefetch-docker -c nix-prefetch-docker --image-name mysql --image-tag 5
|
<prompt>$ </prompt>nix run nixpkgs.nix-prefetch-docker -c nix-prefetch-docker --image-name mysql --image-tag 5
|
||||||
</programlisting>
|
</screen>
|
||||||
|
|
||||||
Since a given <varname>imageName</varname> may transparently refer to a
|
Since a given <varname>imageName</varname> may transparently refer to a
|
||||||
manifest list of images which support multiple architectures and/or
|
manifest list of images which support multiple architectures and/or
|
||||||
@ -491,17 +507,17 @@ $ nix run nixpkgs.nix-prefetch-docker -c nix-prefetch-docker --image-name mysql
|
|||||||
By default it will match the OS and architecture of the host the command is
|
By default it will match the OS and architecture of the host the command is
|
||||||
run on.
|
run on.
|
||||||
|
|
||||||
<programlisting>
|
<screen>
|
||||||
$ nix-prefetch-docker --image-name mysql --image-tag 5 --arch x86_64 --os linux
|
<prompt>$ </prompt>nix-prefetch-docker --image-name mysql --image-tag 5 --arch x86_64 --os linux
|
||||||
</programlisting>
|
</screen>
|
||||||
|
|
||||||
Desired image name and tag can be set using
|
Desired image name and tag can be set using
|
||||||
<option>--final-image-name</option> and <option>--final-image-tag</option>
|
<option>--final-image-name</option> and <option>--final-image-tag</option>
|
||||||
arguments:
|
arguments:
|
||||||
|
|
||||||
<programlisting>
|
<screen>
|
||||||
$ nix-prefetch-docker --image-name mysql --image-tag 5 --final-image-name eu.gcr.io/my-project/mysql --final-image-tag prod
|
<prompt>$ </prompt>nix-prefetch-docker --image-name mysql --image-tag 5 --final-image-name eu.gcr.io/my-project/mysql --final-image-tag prod
|
||||||
</programlisting>
|
</screen>
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@ -537,7 +553,7 @@ exportImage {
|
|||||||
|
|
||||||
name = someLayeredImage.name;
|
name = someLayeredImage.name;
|
||||||
}
|
}
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -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,7 +35,7 @@
|
|||||||
An example of using <literal>runCommand</literal> is provided below.
|
An example of using <literal>runCommand</literal> is provided below.
|
||||||
</para>
|
</para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
(import <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
|
||||||
@ -52,8 +52,8 @@
|
|||||||
|
|
||||||
echo date
|
echo date
|
||||||
date
|
date
|
||||||
''
|
''
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
|
@ -185,10 +185,9 @@ with import <nixpkgs> {};
|
|||||||
|
|
||||||
androidenv.emulateApp {
|
androidenv.emulateApp {
|
||||||
name = "emulate-MyAndroidApp";
|
name = "emulate-MyAndroidApp";
|
||||||
platformVersion = "24";
|
platformVersion = "28";
|
||||||
abiVersion = "armeabi-v7a"; # mips, x86 or x86_64
|
abiVersion = "x86_64"; # armeabi-v7a, mips, x86
|
||||||
systemImageType = "default";
|
systemImageType = "google_apis_playstore";
|
||||||
useGoogleAPIs = false;
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -201,7 +200,7 @@ with import <nixpkgs> {};
|
|||||||
androidenv.emulateApp {
|
androidenv.emulateApp {
|
||||||
name = "emulate-MyAndroidApp";
|
name = "emulate-MyAndroidApp";
|
||||||
platformVersion = "24";
|
platformVersion = "24";
|
||||||
abiVersion = "armeabi-v7a"; # mips, x86 or x86_64
|
abiVersion = "armeabi-v7a"; # mips, x86, x86_64
|
||||||
systemImageType = "default";
|
systemImageType = "default";
|
||||||
useGoogleAPIs = false;
|
useGoogleAPIs = false;
|
||||||
app = ./MyApp.apk;
|
app = ./MyApp.apk;
|
||||||
|
@ -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,9 +178,9 @@ $ 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";
|
||||||
|
|
||||||
@ -192,8 +192,8 @@ $ nix-env -f "<nixpkgs>" -iA beamPackages.ibrowse
|
|||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [ ibrowse jsx erlware_commons ];
|
beamDeps = [ ibrowse jsx erlware_commons ];
|
||||||
}
|
}
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Such derivations are callable with
|
Such derivations are callable with
|
||||||
@ -228,9 +228,9 @@ $ nix-env -f "<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";
|
||||||
|
|
||||||
@ -249,8 +249,8 @@ $ nix-env -f "<nixpkgs>" -iA beamPackages.ibrowse
|
|||||||
license = stdenv.lib.licenses.isc;
|
license = stdenv.lib.licenses.isc;
|
||||||
homepage = https://github.com/ninenines/cowboy;
|
homepage = https://github.com/ninenines/cowboy;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section xml:id="mix-packages">
|
<section xml:id="mix-packages">
|
||||||
@ -262,9 +262,9 @@ $ nix-env -f "<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";
|
||||||
|
|
||||||
@ -283,17 +283,17 @@ $ nix-env -f "<nixpkgs>" -iA beamPackages.ibrowse
|
|||||||
license = stdenv.lib.licenses.bsd3;
|
license = stdenv.lib.licenses.bsd3;
|
||||||
homepage = https://github.com/CargoSense/absinthe_plug;
|
homepage = https://github.com/CargoSense/absinthe_plug;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Alternatively, we can use <literal>buildHex</literal> as a shortcut:
|
Alternatively, we can use <literal>buildHex</literal> as a shortcut:
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
{ buildHex, buildMix, plug, absinthe }:
|
{ buildHex, buildMix, plug, absinthe }:
|
||||||
|
|
||||||
buildHex {
|
buildHex {
|
||||||
name = "absinthe_plug";
|
name = "absinthe_plug";
|
||||||
version = "1.0.0";
|
version = "1.0.0";
|
||||||
|
|
||||||
@ -310,8 +310,8 @@ $ nix-env -f "<nixpkgs>" -iA beamPackages.ibrowse
|
|||||||
license = stdenv.lib.licenses.bsd3;
|
license = stdenv.lib.licenses.bsd3;
|
||||||
homepage = https://github.com/CargoSense/absinthe_plug;
|
homepage = https://github.com/CargoSense/absinthe_plug;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
@ -330,47 +330,47 @@ $ nix-env -f "<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>
|
||||||
|
@ -11,10 +11,21 @@ $ # On non-NixOS
|
|||||||
$ nix-env -i nixpkgs.idris
|
$ nix-env -i nixpkgs.idris
|
||||||
```
|
```
|
||||||
|
|
||||||
This however only provides the `prelude` and `base` libraries. To install additional libraries:
|
This however only provides the `prelude` and `base` libraries. To install idris with additional libraries, you can use the `idrisPackages.with-packages` function, e.g. in an overlay in `~/.config/nixpkgs/overlays/my-idris.nix`:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
self: super: {
|
||||||
|
myIdris = with self.idrisPackages; with-packages [ contrib pruviloj ];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
And then:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ nix-env -iE 'pkgs: pkgs.idrisPackages.with-packages (with pkgs.idrisPackages; [ contrib pruviloj ])'
|
$ # On NixOS
|
||||||
|
$ nix-env -iA nixos.myIdris
|
||||||
|
$ # On non-NixOS
|
||||||
|
$ nix-env -iA nixpkgs.myIdris
|
||||||
```
|
```
|
||||||
|
|
||||||
To see all available Idris packages:
|
To see all available Idris packages:
|
||||||
@ -113,3 +124,21 @@ in another file (say `default.nix`) to be able to build it with
|
|||||||
```
|
```
|
||||||
$ nix-build -A yaml
|
$ nix-build -A yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Passing options to `idris` commands
|
||||||
|
|
||||||
|
The `build-idris-package` function provides also optional input values to set additional options for the used `idris` commands.
|
||||||
|
|
||||||
|
Specifically, you can set `idrisBuildOptions`, `idrisTestOptions`, `idrisInstallOptions` and `idrisDocOptions` to provide additional options to the `idris` command respectively when building, testing, installing and generating docs for your package.
|
||||||
|
|
||||||
|
For example you could set
|
||||||
|
|
||||||
|
```
|
||||||
|
build-idris-package {
|
||||||
|
idrisBuildOptions = [ "--log" "1" "--verbose" ]
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
to require verbose output during `idris` build phase.
|
||||||
|
@ -10,7 +10,7 @@ stdenv.mkDerivation {
|
|||||||
name = "...";
|
name = "...";
|
||||||
src = fetchurl { ... };
|
src = fetchurl { ... };
|
||||||
|
|
||||||
buildInputs = [ jdk ant ];
|
nativeBuildInputs = [ jdk ant ];
|
||||||
|
|
||||||
buildPhase = "ant";
|
buildPhase = "ant";
|
||||||
}
|
}
|
||||||
@ -30,7 +30,8 @@ stdenv.mkDerivation {
|
|||||||
<filename>foo.jar</filename> in its <filename>share/java</filename>
|
<filename>foo.jar</filename> in its <filename>share/java</filename>
|
||||||
directory, and another package declares the attribute
|
directory, and another package declares the attribute
|
||||||
<programlisting>
|
<programlisting>
|
||||||
buildInputs = [ jdk libfoo ];
|
buildInputs = [ libfoo ];
|
||||||
|
nativeBuildInputs = [ jdk ];
|
||||||
</programlisting>
|
</programlisting>
|
||||||
then <envar>CLASSPATH</envar> will be set to
|
then <envar>CLASSPATH</envar> will be set to
|
||||||
<filename>/nix/store/...-libfoo/share/java/foo.jar</filename>.
|
<filename>/nix/store/...-libfoo/share/java/foo.jar</filename>.
|
||||||
@ -46,7 +47,7 @@ buildInputs = [ jdk libfoo ];
|
|||||||
script to run it using the OpenJRE. You can use
|
script to run it using the OpenJRE. You can use
|
||||||
<literal>makeWrapper</literal> for this:
|
<literal>makeWrapper</literal> for this:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
buildInputs = [ makeWrapper ];
|
nativeBuildInputs = [ makeWrapper ];
|
||||||
|
|
||||||
installPhase =
|
installPhase =
|
||||||
''
|
''
|
||||||
@ -68,7 +69,7 @@ installPhase =
|
|||||||
can be done in a generic fashion with the <literal>--set</literal> argument
|
can be done in a generic fashion with the <literal>--set</literal> argument
|
||||||
of <literal>makeWrapper</literal>:
|
of <literal>makeWrapper</literal>:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
--set JAVA_HOME ${jdk.home}
|
--set JAVA_HOME ${jdk.home}
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ installPhase =
|
|||||||
It is possible to use a different Java compiler than <command>javac</command>
|
It is possible to use a different Java compiler than <command>javac</command>
|
||||||
from the OpenJDK. For instance, to use the GNU Java Compiler:
|
from the OpenJDK. For instance, to use the GNU Java Compiler:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
buildInputs = [ gcj ant ];
|
nativeBuildInputs = [ gcj ant ];
|
||||||
</programlisting>
|
</programlisting>
|
||||||
Here, Ant will automatically use <command>gij</command> (the GNU Java
|
Here, Ant will automatically use <command>gij</command> (the GNU Java
|
||||||
Runtime) instead of the OpenJRE.
|
Runtime) instead of the OpenJRE.
|
||||||
|
@ -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>.)
|
||||||
@ -75,7 +75,8 @@ $ nix-env -i perl-Class-C3
|
|||||||
It adds the contents of the <envar>PERL5LIB</envar> environment variable
|
It adds the contents of the <envar>PERL5LIB</envar> environment variable
|
||||||
to <literal>#! .../bin/perl</literal> line of Perl scripts as
|
to <literal>#! .../bin/perl</literal> line of Perl scripts as
|
||||||
<literal>-I<replaceable>dir</replaceable></literal> flags. This ensures
|
<literal>-I<replaceable>dir</replaceable></literal> flags. This ensures
|
||||||
that a script can find its dependencies.
|
that a script can find its dependencies. (This can cause this shebang line
|
||||||
|
to become too long for Darwin to handle; see the note below.)
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -137,6 +138,36 @@ ClassC3Componentised = buildPerlPackage rec {
|
|||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
On Darwin, if a script has too many
|
||||||
|
<literal>-I<replaceable>dir</replaceable></literal> flags in its first line
|
||||||
|
(its “shebang line”), it will not run. This can be worked around by calling
|
||||||
|
the <literal>shortenPerlShebang</literal> function from the
|
||||||
|
<literal>postInstall</literal> phase:
|
||||||
|
<programlisting>
|
||||||
|
{ stdenv, buildPerlPackage, fetchurl, shortenPerlShebang }:
|
||||||
|
|
||||||
|
ImageExifTool = buildPerlPackage {
|
||||||
|
pname = "Image-ExifTool";
|
||||||
|
version = "11.50";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://www.sno.phy.queensu.ca/~phil/exiftool/Image-ExifTool-11.50.tar.gz";
|
||||||
|
sha256 = "0d8v48y94z8maxkmw1rv7v9m0jg2dc8xbp581njb6yhr7abwqdv3";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = stdenv.lib.optional stdenv.isDarwin shortenPerlShebang;
|
||||||
|
postInstall = stdenv.lib.optional stdenv.isDarwin ''
|
||||||
|
shortenPerlShebang $out/bin/exiftool
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
This will remove the <literal>-I</literal> flags from the shebang line,
|
||||||
|
rewrite them in the <literal>use lib</literal> form, and put them on the next
|
||||||
|
line instead. This function can be given any number of Perl scripts as
|
||||||
|
arguments; it will modify them in-place.
|
||||||
|
</para>
|
||||||
|
|
||||||
<section xml:id="ssec-generation-from-CPAN">
|
<section xml:id="ssec-generation-from-CPAN">
|
||||||
<title>Generation from CPAN</title>
|
<title>Generation from CPAN</title>
|
||||||
|
|
||||||
@ -148,7 +179,7 @@ ClassC3Componentised = buildPerlPackage rec {
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<screen>
|
<screen>
|
||||||
$ nix-env -i nix-generate-from-cpan
|
<prompt>$ </prompt>nix-env -i nix-generate-from-cpan
|
||||||
</screen>
|
</screen>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -156,7 +187,7 @@ $ nix-env -i nix-generate-from-cpan
|
|||||||
unpacks the corresponding package, and prints a Nix expression on standard
|
unpacks the corresponding package, and prints a Nix expression on standard
|
||||||
output. For example:
|
output. For example:
|
||||||
<screen>
|
<screen>
|
||||||
$ nix-generate-from-cpan XML::Simple
|
<prompt>$ </prompt>nix-generate-from-cpan XML::Simple
|
||||||
XMLSimple = buildPerlPackage rec {
|
XMLSimple = buildPerlPackage rec {
|
||||||
name = "XML-Simple-2.22";
|
name = "XML-Simple-2.22";
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
|
@ -603,6 +603,7 @@ All parameters from `stdenv.mkDerivation` function are still supported. The foll
|
|||||||
* `preShellHook`: Hook to execute commands before `shellHook`.
|
* `preShellHook`: Hook to execute commands before `shellHook`.
|
||||||
* `postShellHook`: Hook to execute commands after `shellHook`.
|
* `postShellHook`: Hook to execute commands after `shellHook`.
|
||||||
* `removeBinByteCode ? true`: Remove bytecode from `/bin`. Bytecode is only created when the filenames end with `.py`.
|
* `removeBinByteCode ? true`: Remove bytecode from `/bin`. Bytecode is only created when the filenames end with `.py`.
|
||||||
|
* `setupPyGlobalFlags ? []`: List of flags passed to `setup.py` command.
|
||||||
* `setupPyBuildFlags ? []`: List of flags passed to `setup.py build_ext` command.
|
* `setupPyBuildFlags ? []`: List of flags passed to `setup.py build_ext` command.
|
||||||
|
|
||||||
The `stdenv.mkDerivation` function accepts various parameters for describing build inputs (see "Specifying dependencies"). The following are of special
|
The `stdenv.mkDerivation` function accepts various parameters for describing build inputs (see "Specifying dependencies"). The following are of special
|
||||||
@ -636,7 +637,7 @@ with import <nixpkgs> {};
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
in pkgs.python3.override {inherit packageOverrides;};
|
in pkgs.python3.override {inherit packageOverrides; self = python;};
|
||||||
|
|
||||||
in python.withPackages(ps: [ps.blaze])).env
|
in python.withPackages(ps: [ps.blaze])).env
|
||||||
```
|
```
|
||||||
|
@ -4,71 +4,182 @@
|
|||||||
<title>Qt</title>
|
<title>Qt</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Qt is a comprehensive desktop and mobile application development toolkit for
|
This section describes the differences between Nix expressions for Qt
|
||||||
C++. Legacy support is available for Qt 3 and Qt 4, but all current
|
libraries and applications and Nix expressions for other C++ software. Some
|
||||||
development uses Qt 5. The Qt 5 packages in Nixpkgs are updated frequently to
|
knowledge of the latter is assumed. There are primarily two problems which
|
||||||
take advantage of new features, but older versions are typically retained
|
the Qt infrastructure is designed to address: ensuring consistent versioning
|
||||||
until their support window ends. The most important consideration in
|
of all dependencies and finding dependencies at runtime.
|
||||||
packaging Qt-based software is ensuring that each package and all its
|
|
||||||
dependencies use the same version of Qt 5; this consideration motivates most
|
|
||||||
of the tools described below.
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<section xml:id="ssec-qt-libraries">
|
<example xml:id='qt-default-nix'>
|
||||||
<title>Packaging Libraries for Nixpkgs</title>
|
<title>Nix expression for a Qt package (<filename>default.nix</filename>)</title>
|
||||||
|
<programlisting>
|
||||||
|
{ mkDerivation, lib, qtbase }: <co xml:id='qt-default-nix-co-1' />
|
||||||
|
|
||||||
|
mkDerivation { <co xml:id='qt-default-nix-co-2' />
|
||||||
|
pname = "myapp";
|
||||||
|
version = "1.0";
|
||||||
|
|
||||||
|
buildInputs = [ qtbase ]; <co xml:id='qt-default-nix-co-3' />
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
|
|
||||||
|
<calloutlist>
|
||||||
|
<callout arearefs='qt-default-nix-co-1'>
|
||||||
|
<para>
|
||||||
|
Import <literal>mkDerivation</literal> and Qt (such as
|
||||||
|
<literal>qtbase</literal> modules directly. <emphasis>Do not</emphasis>
|
||||||
|
import Qt package sets; the Qt versions of dependencies may not be
|
||||||
|
coherent, causing build and runtime failures.
|
||||||
|
</para>
|
||||||
|
</callout>
|
||||||
|
<callout arearefs='qt-default-nix-co-2'>
|
||||||
|
<para>
|
||||||
|
Use <literal>mkDerivation</literal> instead of
|
||||||
|
<literal>stdenv.mkDerivation</literal>. <literal>mkDerivation</literal>
|
||||||
|
is a wrapper around <literal>stdenv.mkDerivation</literal> which
|
||||||
|
applies some Qt-specific settings.
|
||||||
|
This deriver accepts the same arguments as
|
||||||
|
<literal>stdenv.mkDerivation</literal>; refer to
|
||||||
|
<xref linkend='chap-stdenv' /> for details.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
To use another deriver instead of
|
||||||
|
<literal>stdenv.mkDerivation</literal>, use
|
||||||
|
<literal>mkDerivationWith</literal>:
|
||||||
|
<programlisting>
|
||||||
|
mkDerivationWith myDeriver {
|
||||||
|
# ...
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
If you cannot use <literal>mkDerivationWith</literal>, please refer to
|
||||||
|
<xref linkend='qt-runtime-dependencies' />.
|
||||||
|
</para>
|
||||||
|
</callout>
|
||||||
|
<callout arearefs='qt-default-nix-co-3'>
|
||||||
|
<para>
|
||||||
|
<literal>mkDerivation</literal> accepts the same arguments as
|
||||||
|
<literal>stdenv.mkDerivation</literal>, such as
|
||||||
|
<literal>buildInputs</literal>.
|
||||||
|
</para>
|
||||||
|
</callout>
|
||||||
|
</calloutlist>
|
||||||
|
|
||||||
|
<formalpara xml:id='qt-runtime-dependencies'>
|
||||||
|
<title>Locating runtime dependencies</title>
|
||||||
|
<para>
|
||||||
|
Qt applications need to be wrapped to find runtime dependencies. If you
|
||||||
|
cannot use <literal>mkDerivation</literal> or
|
||||||
|
<literal>mkDerivationWith</literal> above, include
|
||||||
|
<literal>wrapQtAppsHook</literal> in <literal>nativeBuildInputs</literal>:
|
||||||
|
<programlisting>
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
# ...
|
||||||
|
|
||||||
|
nativeBuildInputs = [ wrapQtAppsHook ];
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Whenever possible, libraries that use Qt 5 should be built with each
|
Entries added to <literal>qtWrapperArgs</literal> are used to modify the
|
||||||
available version. Packages providing libraries should be added to the
|
wrappers created by <literal>wrapQtAppsHook</literal>. The entries are
|
||||||
top-level function <varname>mkLibsForQt5</varname>, which is used to build a
|
passed as arguments to <xref linkend='fun-wrapProgram' />.
|
||||||
set of libraries for every Qt 5 version. A special
|
<programlisting>
|
||||||
<varname>callPackage</varname> function is used in this scope to ensure that
|
mkDerivation {
|
||||||
the entire dependency tree uses the same Qt 5 version. Import dependencies
|
# ...
|
||||||
unqualified, i.e., <literal>qtbase</literal> not
|
|
||||||
<literal>qt5.qtbase</literal>. <emphasis>Do not</emphasis> import a package
|
qtWrapperArgs = [ ''--prefix PATH : /path/to/bin'' ];
|
||||||
set such as <literal>qt5</literal> or <literal>libsForQt5</literal>.
|
}
|
||||||
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
If a library does not support a particular version of Qt 5, it is best to
|
Set <literal>dontWrapQtApps</literal> to stop applications from being
|
||||||
mark it as broken by setting its <literal>meta.broken</literal> attribute. A
|
wrapped automatically. It is required to wrap applications manually with
|
||||||
package may be marked broken for certain versions by testing the
|
<literal>wrapQtApp</literal>, using the syntax of
|
||||||
<literal>qtbase.version</literal> attribute, which will always give the
|
<xref linkend='fun-wrapProgram' />:
|
||||||
current Qt 5 version.
|
<programlisting>
|
||||||
</para>
|
mkDerivation {
|
||||||
</section>
|
# ...
|
||||||
|
|
||||||
<section xml:id="ssec-qt-applications">
|
dontWrapQtApps = true;
|
||||||
<title>Packaging Applications for Nixpkgs</title>
|
preFixup = ''
|
||||||
|
wrapQtApp "$out/bin/myapp" --prefix PATH : /path/to/bin
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
<literal>wrapQtAppsHook</literal> ignores files that are non-ELF executables.
|
||||||
|
This means that scripts won't be automatically wrapped so you'll need to manually
|
||||||
|
wrap them as previously mentioned. An example of when you'd always need to do this
|
||||||
|
is with Python applications that use PyQT.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Call your application expression using
|
Libraries are built with every available version of Qt. Use the <literal>meta.broken</literal>
|
||||||
<literal>libsForQt5.callPackage</literal> instead of
|
attribute to disable the package for unsupported Qt versions:
|
||||||
<literal>callPackage</literal>. Import dependencies unqualified, i.e.,
|
<programlisting>
|
||||||
<literal>qtbase</literal> not <literal>qt5.qtbase</literal>. <emphasis>Do
|
mkDerivation {
|
||||||
not</emphasis> import a package set such as <literal>qt5</literal> or
|
# ...
|
||||||
<literal>libsForQt5</literal>.
|
|
||||||
|
# Disable this library with Qt < 5.9.0
|
||||||
|
meta.broken = builtins.compareVersions qtbase.version "5.9.0" < 0;
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Adding a library to Nixpkgs</title>
|
||||||
<para>
|
<para>
|
||||||
Qt 5 maintains strict backward compatibility, so it is generally best to
|
Add a Qt library to <filename>all-packages.nix</filename> by adding it to the
|
||||||
build an application package against the latest version using the
|
collection inside <literal>mkLibsForQt5</literal>. This ensures that the
|
||||||
<varname>libsForQt5</varname> library set. In case a package does not build
|
library is built with every available version of Qt as needed.
|
||||||
with the latest Qt version, it is possible to pick a set pinned to a
|
<example xml:id='qt-library-all-packages-nix'>
|
||||||
particular version, e.g. <varname>libsForQt55</varname> for Qt 5.5, if that
|
<title>Adding a Qt library to <filename>all-packages.nix</filename></title>
|
||||||
is the latest version the package supports. If a package must be pinned to
|
<programlisting>
|
||||||
an older Qt version, be sure to file a bug upstream; because Qt is strictly
|
{
|
||||||
backwards-compatible, any incompatibility is by definition a bug in the
|
# ...
|
||||||
application.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
mkLibsForQt5 = self: with self; {
|
||||||
When testing applications in Nixpkgs, it is a common practice to build the
|
# ...
|
||||||
package with <literal>nix-build</literal> and run it using the created
|
|
||||||
symbolic link. This will not work with Qt applications, however, because
|
mylib = callPackage ../path/to/mylib {};
|
||||||
they have many hard runtime requirements that can only be guaranteed if the
|
};
|
||||||
package is actually installed. To test a Qt application, install it with
|
|
||||||
<literal>nix-env</literal> or run it inside <literal>nix-shell</literal>.
|
# ...
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</formalpara>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Adding an application to Nixpkgs</title>
|
||||||
|
<para>
|
||||||
|
Add a Qt application to <filename>all-packages.nix</filename> using
|
||||||
|
<literal>libsForQt5.callPackage</literal> instead of the usual
|
||||||
|
<literal>callPackage</literal>. The former ensures that all dependencies
|
||||||
|
are built with the same version of Qt.
|
||||||
|
<example xml:id='qt-application-all-packages-nix'>
|
||||||
|
<title>Adding a Qt application to <filename>all-packages.nix</filename></title>
|
||||||
|
<programlisting>
|
||||||
|
{
|
||||||
|
# ...
|
||||||
|
|
||||||
|
myapp = libsForQt5.callPackage ../path/to/myapp/ {};
|
||||||
|
|
||||||
|
# ...
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
@ -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>
|
||||||
|
@ -21,7 +21,7 @@ At the moment we support three different methods for managing plugins:
|
|||||||
|
|
||||||
Adding custom .vimrc lines can be done using the following code:
|
Adding custom .vimrc lines can be done using the following code:
|
||||||
|
|
||||||
```
|
```nix
|
||||||
vim_configurable.customize {
|
vim_configurable.customize {
|
||||||
# `name` specifies the name of the executable and package
|
# `name` specifies the name of the executable and package
|
||||||
name = "vim-with-plugins";
|
name = "vim-with-plugins";
|
||||||
@ -32,11 +32,11 @@ vim_configurable.customize {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
This configuration is used when vim is invoked with the command specified as name, in this case `vim-with-plugins`.
|
This configuration is used when Vim is invoked with the command specified as name, in this case `vim-with-plugins`.
|
||||||
|
|
||||||
For Neovim the `configure` argument can be overridden to achieve the same:
|
For Neovim the `configure` argument can be overridden to achieve the same:
|
||||||
|
|
||||||
```
|
```nix
|
||||||
neovim.override {
|
neovim.override {
|
||||||
configure = {
|
configure = {
|
||||||
customRC = ''
|
customRC = ''
|
||||||
@ -46,10 +46,10 @@ neovim.override {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want to use `neovim-qt` as a graphical editor, you can configure it by overriding neovim in an overlay
|
If you want to use `neovim-qt` as a graphical editor, you can configure it by overriding Neovim in an overlay
|
||||||
or passing it an overridden neovimn:
|
or passing it an overridden Neovimn:
|
||||||
|
|
||||||
```
|
```nix
|
||||||
neovim-qt.override {
|
neovim-qt.override {
|
||||||
neovim = neovim.override {
|
neovim = neovim.override {
|
||||||
configure = {
|
configure = {
|
||||||
@ -63,15 +63,15 @@ neovim-qt.override {
|
|||||||
|
|
||||||
## Managing plugins with Vim packages
|
## Managing plugins with Vim packages
|
||||||
|
|
||||||
To store you plugins in Vim packages (the native vim plugin manager, see `:help packages`) the following example can be used:
|
To store you plugins in Vim packages (the native Vim plugin manager, see `:help packages`) the following example can be used:
|
||||||
|
|
||||||
```
|
```nix
|
||||||
vim_configurable.customize {
|
vim_configurable.customize {
|
||||||
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
|
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
|
||||||
# loaded on launch
|
# loaded on launch
|
||||||
start = [ youcompleteme fugitive ];
|
start = [ youcompleteme fugitive ];
|
||||||
# manually loadable by calling `:packadd $plugin-name`
|
# manually loadable by calling `:packadd $plugin-name`
|
||||||
# however, if a vim plugin has a dependency that is not explicitly listed in
|
# however, if a Vim plugin has a dependency that is not explicitly listed in
|
||||||
# opt that dependency will always be added to start to avoid confusion.
|
# opt that dependency will always be added to start to avoid confusion.
|
||||||
opt = [ phpCompletion elm-vim ];
|
opt = [ phpCompletion elm-vim ];
|
||||||
# To automatically load a plugin when opening a filetype, add vimrc lines like:
|
# To automatically load a plugin when opening a filetype, add vimrc lines like:
|
||||||
@ -83,7 +83,7 @@ vim_configurable.customize {
|
|||||||
`myVimPackage` is an arbitrary name for the generated package. You can choose any name you like.
|
`myVimPackage` is an arbitrary name for the generated package. You can choose any name you like.
|
||||||
For Neovim the syntax is:
|
For Neovim the syntax is:
|
||||||
|
|
||||||
```
|
```nix
|
||||||
neovim.override {
|
neovim.override {
|
||||||
configure = {
|
configure = {
|
||||||
customRC = ''
|
customRC = ''
|
||||||
@ -92,7 +92,7 @@ neovim.override {
|
|||||||
packages.myVimPackage = with pkgs.vimPlugins; {
|
packages.myVimPackage = with pkgs.vimPlugins; {
|
||||||
# see examples below how to use custom packages
|
# see examples below how to use custom packages
|
||||||
start = [ ];
|
start = [ ];
|
||||||
# If a vim plugin has a dependency that is not explicitly listed in
|
# If a Vim plugin has a dependency that is not explicitly listed in
|
||||||
# opt that dependency will always be added to start to avoid confusion.
|
# opt that dependency will always be added to start to avoid confusion.
|
||||||
opt = [ ];
|
opt = [ ];
|
||||||
};
|
};
|
||||||
@ -102,7 +102,7 @@ neovim.override {
|
|||||||
|
|
||||||
The resulting package can be added to `packageOverrides` in `~/.nixpkgs/config.nix` to make it installable:
|
The resulting package can be added to `packageOverrides` in `~/.nixpkgs/config.nix` to make it installable:
|
||||||
|
|
||||||
```
|
```nix
|
||||||
{
|
{
|
||||||
packageOverrides = pkgs: with pkgs; {
|
packageOverrides = pkgs: with pkgs; {
|
||||||
myVim = vim_configurable.customize {
|
myVim = vim_configurable.customize {
|
||||||
@ -126,7 +126,7 @@ After that you can install your special grafted `myVim` or `myNeovim` packages.
|
|||||||
To use [vim-plug](https://github.com/junegunn/vim-plug) to manage your Vim
|
To use [vim-plug](https://github.com/junegunn/vim-plug) to manage your Vim
|
||||||
plugins the following example can be used:
|
plugins the following example can be used:
|
||||||
|
|
||||||
```
|
```nix
|
||||||
vim_configurable.customize {
|
vim_configurable.customize {
|
||||||
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
|
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
|
||||||
# loaded on launch
|
# loaded on launch
|
||||||
@ -137,7 +137,7 @@ vim_configurable.customize {
|
|||||||
|
|
||||||
For Neovim the syntax is:
|
For Neovim the syntax is:
|
||||||
|
|
||||||
```
|
```nix
|
||||||
neovim.override {
|
neovim.override {
|
||||||
configure = {
|
configure = {
|
||||||
customRC = ''
|
customRC = ''
|
||||||
@ -161,38 +161,49 @@ assuming that "using latest version" is ok most of the time.
|
|||||||
|
|
||||||
First create a vim-scripts file having one plugin name per line. Example:
|
First create a vim-scripts file having one plugin name per line. Example:
|
||||||
|
|
||||||
"tlib"
|
```
|
||||||
{'name': 'vim-addon-sql'}
|
"tlib"
|
||||||
{'filetype_regex': '\%(vim)$', 'names': ['reload', 'vim-dev-plugin']}
|
{'name': 'vim-addon-sql'}
|
||||||
|
{'filetype_regex': '\%(vim)$', 'names': ['reload', 'vim-dev-plugin']}
|
||||||
|
```
|
||||||
|
|
||||||
Such vim-scripts file can be read by VAM as well like this:
|
Such vim-scripts file can be read by VAM as well like this:
|
||||||
|
|
||||||
call vam#Scripts(expand('~/.vim-scripts'), {})
|
```vim
|
||||||
|
call vam#Scripts(expand('~/.vim-scripts'), {})
|
||||||
|
```
|
||||||
|
|
||||||
Create a default.nix file:
|
Create a default.nix file:
|
||||||
|
|
||||||
{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
|
```nix
|
||||||
nixpkgs.vim_configurable.customize { name = "vim"; vimrcConfig.vam.pluginDictionaries = [ "vim-addon-vim2nix" ]; }
|
{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
|
||||||
|
nixpkgs.vim_configurable.customize { name = "vim"; vimrcConfig.vam.pluginDictionaries = [ "vim-addon-vim2nix" ]; }
|
||||||
|
```
|
||||||
|
|
||||||
Create a generate.vim file:
|
Create a generate.vim file:
|
||||||
|
|
||||||
ActivateAddons vim-addon-vim2nix
|
```vim
|
||||||
let vim_scripts = "vim-scripts"
|
ActivateAddons vim-addon-vim2nix
|
||||||
call nix#ExportPluginsForNix({
|
let vim_scripts = "vim-scripts"
|
||||||
\ 'path_to_nixpkgs': eval('{"'.substitute(substitute(substitute($NIX_PATH, ':', ',', 'g'), '=',':', 'g'), '\([:,]\)', '"\1"',"g").'"}')["nixpkgs"],
|
call nix#ExportPluginsForNix({
|
||||||
\ 'cache_file': '/tmp/vim2nix-cache',
|
\ 'path_to_nixpkgs': eval('{"'.substitute(substitute(substitute($NIX_PATH, ':', ',', 'g'), '=',':', 'g'), '\([:,]\)', '"\1"',"g").'"}')["nixpkgs"],
|
||||||
\ 'try_catch': 0,
|
\ 'cache_file': '/tmp/vim2nix-cache',
|
||||||
\ 'plugin_dictionaries': ["vim-addon-manager"]+map(readfile(vim_scripts), 'eval(v:val)')
|
\ 'try_catch': 0,
|
||||||
\ })
|
\ 'plugin_dictionaries': ["vim-addon-manager"]+map(readfile(vim_scripts), 'eval(v:val)')
|
||||||
|
\ })
|
||||||
|
```
|
||||||
|
|
||||||
Then run
|
Then run
|
||||||
|
|
||||||
nix-shell -p vimUtils.vim_with_vim2nix --command "vim -c 'source generate.vim'"
|
```bash
|
||||||
|
nix-shell -p vimUtils.vim_with_vim2nix --command "vim -c 'source generate.vim'"
|
||||||
|
```
|
||||||
|
|
||||||
You should get a Vim buffer with the nix derivations (output1) and vam.pluginDictionaries (output2).
|
You should get a Vim buffer with the nix derivations (output1) and vam.pluginDictionaries (output2).
|
||||||
You can add your vim to your system's configuration file like this and start it by "vim-my":
|
You can add your Vim to your system's configuration file like this and start it by "vim-my":
|
||||||
|
|
||||||
my-vim =
|
```
|
||||||
|
my-vim =
|
||||||
let plugins = let inherit (vimUtils) buildVimPluginFrom2Nix; in {
|
let plugins = let inherit (vimUtils) buildVimPluginFrom2Nix; in {
|
||||||
copy paste output1 here
|
copy paste output1 here
|
||||||
}; in vim_configurable.customize {
|
}; in vim_configurable.customize {
|
||||||
@ -207,11 +218,12 @@ You can add your vim to your system's configuration file like this and start it
|
|||||||
# vimrcConfig.pathogen.knownPlugins = plugins; # plugins
|
# vimrcConfig.pathogen.knownPlugins = plugins; # plugins
|
||||||
# vimrcConfig.pathogen.pluginNames = ["tlib"];
|
# vimrcConfig.pathogen.pluginNames = ["tlib"];
|
||||||
};
|
};
|
||||||
|
```
|
||||||
|
|
||||||
Sample output1:
|
Sample output1:
|
||||||
|
|
||||||
"reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
|
```
|
||||||
|
"reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
|
||||||
name = "reload";
|
name = "reload";
|
||||||
src = fetchgit {
|
src = fetchgit {
|
||||||
url = "git://github.com/xolox/vim-reload";
|
url = "git://github.com/xolox/vim-reload";
|
||||||
@ -220,30 +232,41 @@ Sample output1:
|
|||||||
};
|
};
|
||||||
dependencies = ["nim-misc"];
|
dependencies = ["nim-misc"];
|
||||||
|
|
||||||
};
|
};
|
||||||
[...]
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
Sample output2:
|
Sample output2:
|
||||||
|
|
||||||
[
|
```nix
|
||||||
|
[
|
||||||
''vim-addon-manager''
|
''vim-addon-manager''
|
||||||
''tlib''
|
''tlib''
|
||||||
{ "name" = ''vim-addon-sql''; }
|
{ "name" = ''vim-addon-sql''; }
|
||||||
{ "filetype_regex" = ''\%(vim)$$''; "names" = [ ''reload'' ''vim-dev-plugin'' ]; }
|
{ "filetype_regex" = ''\%(vim)$$''; "names" = [ ''reload'' ''vim-dev-plugin'' ]; }
|
||||||
]
|
]
|
||||||
|
```
|
||||||
|
|
||||||
## Adding new plugins to nixpkgs
|
## Adding new plugins to nixpkgs
|
||||||
|
|
||||||
In `pkgs/misc/vim-plugins/vim-plugin-names` we store the plugin names
|
Nix expressions for Vim plugins are stored in [pkgs/misc/vim-plugins](/pkgs/misc/vim-plugins). For the vast majority of plugins, Nix expressions are automatically generated by running [`./update.py`](/pkgs/misc/vim-plugins/update.py). This creates a [generated.nix](/pkgs/misc/vim-plugins/generated.nix) file based on the plugins listed in [vim-plugin-names](/pkgs/misc/vim-plugins/vim-plugin-names). Plugins are listed in alphabetical order in `vim-plugin-names` using the format `[github username]/[repository]`. For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
|
||||||
for all vim plugins we automatically generate plugins for.
|
|
||||||
The format of this file `github username/github repository`:
|
Some plugins require overrides in order to function properly. Overrides are placed in [overrides.nix](/pkgs/misc/vim-plugins/overrides.nix). Overrides are most often required when a plugin requires some dependencies, or extra steps are required during the build process. For example `deoplete-fish` requires both `deoplete-nvim` and `vim-fish`, and so the following override was added:
|
||||||
For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
|
|
||||||
After adding your plugin to this file run the `./update.py` in the same folder.
|
```
|
||||||
This will updated a file called `generated.nix` and make your plugin accessible in the
|
deoplete-fish = super.deoplete-fish.overrideAttrs(old: {
|
||||||
`vimPlugins` attribute set (`vimPlugins.nerdtree` in our example).
|
dependencies = with super; [ deoplete-nvim vim-fish ];
|
||||||
If additional steps to the build process of the plugin are required, add an
|
});
|
||||||
override to the `pkgs/misc/vim-plugins/default.nix` in the same directory.
|
```
|
||||||
|
|
||||||
|
Sometimes plugins require an override that must be changed when the plugin is updated. This can cause issues when Vim plugins are auto-updated but the associated override isn't updated. For these plugins, the override should be written so that it specifies all information required to install the plugin, and running `./update.py` doesn't change the derivation for the plugin. Manually updating the override is required to update these types of plugins. An example of such a plugin is `LanguageClient-neovim`.
|
||||||
|
|
||||||
|
To add a new plugin:
|
||||||
|
|
||||||
|
1. run `./update.py` and create a commit named "vimPlugins: Update",
|
||||||
|
2. add the new plugin to [vim-plugin-names](/pkgs/misc/vim-plugins/vim-plugin-names) and add overrides if required to [overrides.nix](/pkgs/misc/vim-plugins/overrides.nix),
|
||||||
|
3. run `./update.py` again and create a commit named "vimPlugins.[name]: init at [version]" (where `name` and `version` can be found in [generated.nix](/pkgs/misc/vim-plugins/generated.nix)), and
|
||||||
|
4. create a pull request.
|
||||||
|
|
||||||
## Important repositories
|
## Important repositories
|
||||||
|
|
||||||
@ -252,4 +275,3 @@ override to the `pkgs/misc/vim-plugins/default.nix` in the same directory.
|
|||||||
|
|
||||||
- [vim2nix](https://github.com/MarcWeber/vim-addon-vim2nix) which generates the
|
- [vim2nix](https://github.com/MarcWeber/vim-addon-vim2nix) which generates the
|
||||||
.nix code
|
.nix code
|
||||||
|
|
||||||
|
12
doc/meta.xml
12
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>
|
||||||
@ -272,11 +272,9 @@ meta.platforms = stdenv.lib.platforms.linux;
|
|||||||
<para>
|
<para>
|
||||||
This attribute is special in that it is not actually under the
|
This attribute is special in that it is not actually under the
|
||||||
<literal>meta</literal> attribute set but rather under the
|
<literal>meta</literal> attribute set but rather under the
|
||||||
<literal>passthru</literal> attribute set. This is due to a current
|
<literal>passthru</literal> attribute set. This is due to how
|
||||||
limitation of Nix, and will change as soon as Nixpkgs will be able to
|
<literal>meta</literal> attributes work, and the fact that they
|
||||||
depend on a new enough version of Nix. See
|
are supposed to contain only metadata, not derivations.
|
||||||
<link xlink:href="https://github.com/NixOS/nix/issues/2532">the relevant
|
|
||||||
issue</link> for more details.
|
|
||||||
</para>
|
</para>
|
||||||
</warning>
|
</warning>
|
||||||
<para>
|
<para>
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -409,11 +409,19 @@ overrides = self: super: rec {
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section xml:id="sec-citrix">
|
<section xml:id="sec-citrix">
|
||||||
<title>Citrix Receiver</title>
|
<title>Citrix Receiver & Citrix Workspace App</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The <link xlink:href="https://www.citrix.com/products/receiver/">Citrix
|
<note>
|
||||||
Receiver</link> is a remote desktop viewer which provides access to
|
<para>
|
||||||
|
Please note that the <literal>citrix_receiver</literal> package has been deprecated since its
|
||||||
|
development was <link xlink:href="https://docs.citrix.com/en-us/citrix-workspace-app.html">discontinued by upstream</link>
|
||||||
|
and will be replaced by <link xlink:href="https://www.citrix.com/products/workspace-app/">the citrix workspace app</link>.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
<link xlink:href="https://www.citrix.com/products/receiver/">Citrix Receiver</link> and
|
||||||
|
<link xlink:href="https://www.citrix.com/products/workspace-app/">Citrix Workspace App</link>
|
||||||
|
are a remote desktop viewers which provide access to
|
||||||
<link xlink:href="https://www.citrix.com/products/xenapp-xendesktop/">XenDesktop</link>
|
<link xlink:href="https://www.citrix.com/products/xenapp-xendesktop/">XenDesktop</link>
|
||||||
installations.
|
installations.
|
||||||
</para>
|
</para>
|
||||||
@ -423,30 +431,35 @@ overrides = self: super: rec {
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
The tarball archive needs to be downloaded manually as the license
|
The tarball archive needs to be downloaded manually as the license
|
||||||
agreements of the vendor need to be accepted first. This is available at
|
agreements of the vendor for
|
||||||
the
|
<link xlink:href="https://www.citrix.com/downloads/citrix-receiver/">Citrix Receiver</link>
|
||||||
<link xlink:href="https://www.citrix.com/downloads/citrix-receiver/">download
|
or <link xlink:href="https://www.citrix.de/downloads/workspace-app/linux/workspace-app-for-linux-latest.html">Citrix Workspace</link>
|
||||||
page at citrix.com</link>. Then run <literal>nix-prefetch-url
|
need to be accepted first.
|
||||||
file://$PWD/linuxx64-$version.tar.gz</literal>. With the archive available
|
Then run <command>nix-prefetch-url file://$PWD/linuxx64-$version.tar.gz</command>.
|
||||||
|
With the archive available
|
||||||
in the store the package can be built and installed with Nix.
|
in the store the package can be built and installed with Nix.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<warning>
|
||||||
|
<title>Caution with <command>nix-shell</command> installs</title>
|
||||||
<para>
|
<para>
|
||||||
<emphasis>Note: it's recommended to install <literal>Citrix
|
It's recommended to install <literal>Citrix Receiver</literal>
|
||||||
Receiver</literal> using <literal>nix-env -i</literal> or globally to
|
and/or <literal>Citrix Workspace</literal> using
|
||||||
|
<literal>nix-env -i</literal> or globally to
|
||||||
ensure that the <literal>.desktop</literal> files are installed properly
|
ensure that the <literal>.desktop</literal> files are installed properly
|
||||||
into <literal>$XDG_CONFIG_DIRS</literal>. Otherwise it won't be possible to
|
into <literal>$XDG_CONFIG_DIRS</literal>. Otherwise it won't be possible to
|
||||||
open <literal>.ica</literal> files automatically from the browser to start
|
open <literal>.ica</literal> files automatically from the browser to start
|
||||||
a Citrix connection.</emphasis>
|
a Citrix connection.
|
||||||
</para>
|
</para>
|
||||||
|
</warning>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section xml:id="sec-citrix-custom-certs">
|
<section xml:id="sec-citrix-custom-certs">
|
||||||
<title>Custom certificates</title>
|
<title>Custom certificates</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The <literal>Citrix Receiver</literal> in <literal>nixpkgs</literal> trusts
|
The <literal>Citrix Receiver</literal> and <literal>Citrix Workspace App</literal>
|
||||||
several certificates
|
in <literal>nixpkgs</literal> trust several certificates
|
||||||
<link xlink:href="https://curl.haxx.se/docs/caextract.html">from the
|
<link xlink:href="https://curl.haxx.se/docs/caextract.html">from the
|
||||||
Mozilla database</link> by default. However several companies using Citrix
|
Mozilla database</link> by default. However several companies using Citrix
|
||||||
might require their own corporate certificate. On distros with imperative
|
might require their own corporate certificate. On distros with imperative
|
||||||
@ -459,7 +472,7 @@ overrides = self: super: rec {
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
<![CDATA[with import <nixpkgs> { config.allowUnfree = true; };
|
<![CDATA[with import <nixpkgs> { config.allowUnfree = true; };
|
||||||
let extraCerts = [ ./custom-cert-1.pem ./custom-cert-2.pem /* ... */ ]; in
|
let extraCerts = [ ./custom-cert-1.pem ./custom-cert-2.pem /* ... */ ]; in
|
||||||
citrix_receiver.override {
|
citrix_workspace.override { # the same applies for `citrix_receiver` if used.
|
||||||
inherit extraCerts;
|
inherit extraCerts;
|
||||||
}]]>
|
}]]>
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
@ -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,13 +205,17 @@ $ nix-build -A libfoo</screen>
|
|||||||
<para>
|
<para>
|
||||||
If you want to install the package into your profile (optional), do
|
If you want to install the package into your profile (optional), do
|
||||||
<screen>
|
<screen>
|
||||||
$ nix-env -f . -iA libfoo</screen>
|
<prompt>$ </prompt>nix-env -f . -iA libfoo</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Optionally commit the new package and open a pull request, or send a patch
|
Optionally commit the new package and open a pull request <link
|
||||||
to <literal>https://groups.google.com/forum/#!forum/nix-devel</literal>.
|
xlink:href="https://github.com/NixOS/nixpkgs/pulls">to nixpkgs</link>, or
|
||||||
|
use <link
|
||||||
|
xlink:href="https://discourse.nixos.org/t/about-the-patches-category/477">
|
||||||
|
the Patches category</link> on Discourse for sending a patch without a
|
||||||
|
GitHub account.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</orderedlist>
|
</orderedlist>
|
||||||
|
@ -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>
|
||||||
|
@ -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
|
||||||
@ -767,7 +786,7 @@ passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ]
|
|||||||
set, the default value is used, which is <literal>$prePhases
|
set, the default value is used, which is <literal>$prePhases
|
||||||
unpackPhase patchPhase $preConfigurePhases configurePhase
|
unpackPhase patchPhase $preConfigurePhases configurePhase
|
||||||
$preBuildPhases buildPhase checkPhase $preInstallPhases installPhase
|
$preBuildPhases buildPhase checkPhase $preInstallPhases installPhase
|
||||||
fixupPhase $preDistPhases distPhase $postPhases</literal>.
|
fixupPhase installCheckPhase $preDistPhases distPhase $postPhases</literal>.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Usually, if you just want to add a few phases, it’s more convenient
|
Usually, if you just want to add a few phases, it’s more convenient
|
||||||
@ -968,6 +987,16 @@ passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ]
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<varname>dontUnpack</varname>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Set to true to skip the unpack phase.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<varname>dontMakeSourcesWritable</varname>
|
<varname>dontMakeSourcesWritable</varname>
|
||||||
@ -1090,6 +1119,16 @@ passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ]
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<varname>dontConfigure</varname>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Set to true to skip the configure phase.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<varname>configureFlagsArray</varname>
|
<varname>configureFlagsArray</varname>
|
||||||
@ -1560,6 +1599,16 @@ installTargets = "install-bin install-doc";</programlisting>
|
|||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<title>Variables controlling the fixup phase</title>
|
<title>Variables controlling the fixup phase</title>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<varname>dontFixup</varname>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Set to true to skip the fixup phase.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<varname>dontStrip</varname>
|
<varname>dontStrip</varname>
|
||||||
@ -2210,7 +2259,7 @@ someVar=$(stripHash $name)
|
|||||||
array by doing something like
|
array by doing something like
|
||||||
<programlisting language="bash">
|
<programlisting language="bash">
|
||||||
addEnvHooks "$hostOffset" myBashFunction
|
addEnvHooks "$hostOffset" myBashFunction
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -2648,8 +2697,8 @@ addEnvHooks "$hostOffset" myBashFunction
|
|||||||
that is supposed to be inspected, add <literal>breakpointHook</literal>
|
that is supposed to be inspected, add <literal>breakpointHook</literal>
|
||||||
to <literal>nativeBuildInputs</literal>.
|
to <literal>nativeBuildInputs</literal>.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
nativeBuildInputs = [ breakpointHook ];
|
nativeBuildInputs = [ breakpointHook ];
|
||||||
</programlisting>
|
</programlisting>
|
||||||
When a build failure happens there will be an instruction printed that
|
When a build failure happens there will be an instruction printed that
|
||||||
shows how to attach with <literal>cntr</literal> to the build sandbox.
|
shows how to attach with <literal>cntr</literal> to the build sandbox.
|
||||||
</para>
|
</para>
|
||||||
@ -2844,7 +2893,7 @@ addEnvHooks "$hostOffset" myBashFunction
|
|||||||
printf(help_message);
|
printf(help_message);
|
||||||
^
|
^
|
||||||
cc1plus: some warnings being treated as errors
|
cc1plus: some warnings being treated as errors
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -2866,7 +2915,7 @@ cc1plus: some warnings being treated as errors
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
bin/blib.a(bios_console.o): In function `bios_handle_cup':
|
bin/blib.a(bios_console.o): In function `bios_handle_cup':
|
||||||
/tmp/nix-build-ipxe-20141124-5cbdc41.drv-0/ipxe-5cbdc41/src/arch/i386/firmware/pcbios/bios_console.c:86: undefined reference to `__stack_chk_fail'
|
/tmp/nix-build-ipxe-20141124-5cbdc41.drv-0/ipxe-5cbdc41/src/arch/i386/firmware/pcbios/bios_console.c:86: undefined reference to `__stack_chk_fail'
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -2895,19 +2944,19 @@ bin/blib.a(bios_console.o): In function `bios_handle_cup':
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
malloc.c:404:15: error: return type is an incomplete type
|
malloc.c:404:15: error: return type is an incomplete type
|
||||||
malloc.c:410:19: error: storage size of 'ms' isn't known
|
malloc.c:410:19: error: storage size of 'ms' isn't known
|
||||||
</programlisting>
|
</programlisting>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
strdup.h:22:1: error: expected identifier or '(' before '__extension__'
|
strdup.h:22:1: error: expected identifier or '(' before '__extension__'
|
||||||
</programlisting>
|
</programlisting>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
strsep.c:65:23: error: register name not specified for 'delim'
|
strsep.c:65:23: error: register name not specified for 'delim'
|
||||||
</programlisting>
|
</programlisting>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
installwatch.c:3751:5: error: conflicting types for '__open_2'
|
installwatch.c:3751:5: error: conflicting types for '__open_2'
|
||||||
</programlisting>
|
</programlisting>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
fcntl2.h:50:4: error: call to '__open_missing_mode' declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments
|
fcntl2.h:50:4: error: call to '__open_missing_mode' declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -2932,7 +2981,7 @@ fcntl2.h:50:4: error: call to '__open_missing_mode' declared with attribute erro
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
ccbLfRgg.s: Assembler messages:
|
ccbLfRgg.s: Assembler messages:
|
||||||
ccbLfRgg.s:33: Error: missing or invalid displacement expression `private_key_len@GOTOFF'
|
ccbLfRgg.s:33: Error: missing or invalid displacement expression `private_key_len@GOTOFF'
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -2996,7 +3045,7 @@ ccbLfRgg.s:33: Error: missing or invalid displacement expression `private_key_le
|
|||||||
</para>
|
</para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
intel_drv.so: undefined symbol: vgaHWFreeHWRec
|
intel_drv.so: undefined symbol: vgaHWFreeHWRec
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
@ -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>
|
||||||
|
@ -71,7 +71,7 @@ let
|
|||||||
zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
|
zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
|
||||||
recursiveUpdate matchAttrs overrideExisting getOutput getBin
|
recursiveUpdate matchAttrs overrideExisting getOutput getBin
|
||||||
getLib getDev chooseDevOutputs zipWithNames zip;
|
getLib getDev chooseDevOutputs zipWithNames zip;
|
||||||
inherit (lists) singleton foldr fold foldl foldl' imap0 imap1
|
inherit (lists) singleton forEach foldr fold foldl foldl' imap0 imap1
|
||||||
concatMap flatten remove findSingle findFirst any all count
|
concatMap flatten remove findSingle findFirst any all count
|
||||||
optional optionals toList range partition zipListsWith zipLists
|
optional optionals toList range partition zipListsWith zipLists
|
||||||
reverseList listDfs toposort sort naturalSort compareLists take
|
reverseList listDfs toposort sort naturalSort compareLists take
|
||||||
|
@ -21,6 +21,19 @@ rec {
|
|||||||
*/
|
*/
|
||||||
singleton = x: [x];
|
singleton = x: [x];
|
||||||
|
|
||||||
|
/* Apply the function to each element in the list. Same as `map`, but arguments
|
||||||
|
flipped.
|
||||||
|
|
||||||
|
Type: forEach :: [a] -> (a -> b) -> [b]
|
||||||
|
|
||||||
|
Example:
|
||||||
|
forEach [ 1 2 ] (x:
|
||||||
|
toString x
|
||||||
|
)
|
||||||
|
=> [ "1" "2" ]
|
||||||
|
*/
|
||||||
|
forEach = xs: f: map f xs;
|
||||||
|
|
||||||
/* “right fold” a binary function `op` between successive elements of
|
/* “right fold” a binary function `op` between successive elements of
|
||||||
`list` with `nul' as the starting value, i.e.,
|
`list` with `nul' as the starting value, i.e.,
|
||||||
`foldr op nul [x_1 x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))`.
|
`foldr op nul [x_1 x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))`.
|
||||||
|
@ -53,9 +53,13 @@ rec {
|
|||||||
# Filter sources by a list of regular expressions.
|
# Filter sources by a list of regular expressions.
|
||||||
#
|
#
|
||||||
# E.g. `src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]`
|
# E.g. `src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]`
|
||||||
sourceByRegex = src: regexes: cleanSourceWith {
|
sourceByRegex = src: regexes:
|
||||||
|
let
|
||||||
|
isFiltered = src ? _isLibCleanSourceWith;
|
||||||
|
origSrc = if isFiltered then src.origSrc else src;
|
||||||
|
in lib.cleanSourceWith {
|
||||||
filter = (path: type:
|
filter = (path: type:
|
||||||
let relPath = lib.removePrefix (toString src + "/") (toString path);
|
let relPath = lib.removePrefix (toString origSrc + "/") (toString path);
|
||||||
in lib.any (re: builtins.match re relPath != null) regexes);
|
in lib.any (re: builtins.match re relPath != null) regexes);
|
||||||
inherit src;
|
inherit src;
|
||||||
};
|
};
|
||||||
|
@ -13,9 +13,11 @@ let
|
|||||||
|
|
||||||
"i686-cygwin" "i686-freebsd" "i686-linux" "i686-netbsd" "i686-openbsd"
|
"i686-cygwin" "i686-freebsd" "i686-linux" "i686-netbsd" "i686-openbsd"
|
||||||
|
|
||||||
"x86_64-cygwin" "x86_64-darwin" "x86_64-freebsd" "x86_64-linux"
|
"x86_64-cygwin" "x86_64-freebsd" "x86_64-linux"
|
||||||
"x86_64-netbsd" "x86_64-openbsd" "x86_64-solaris"
|
"x86_64-netbsd" "x86_64-openbsd" "x86_64-solaris"
|
||||||
|
|
||||||
|
"x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin"
|
||||||
|
|
||||||
"x86_64-windows" "i686-windows"
|
"x86_64-windows" "i686-windows"
|
||||||
|
|
||||||
"wasm64-wasi" "wasm32-wasi"
|
"wasm64-wasi" "wasm32-wasi"
|
||||||
@ -24,7 +26,7 @@ let
|
|||||||
|
|
||||||
"riscv32-linux" "riscv64-linux"
|
"riscv32-linux" "riscv64-linux"
|
||||||
|
|
||||||
"aarch64-none" "avr-none" "arm-none" "i686-none" "x86_64-none" "powerpc-none" "msp430-none"
|
"aarch64-none" "avr-none" "arm-none" "i686-none" "x86_64-none" "powerpc-none" "msp430-none" "riscv64-none" "riscv32-none"
|
||||||
];
|
];
|
||||||
|
|
||||||
allParsed = map parse.mkSystemFromString all;
|
allParsed = map parse.mkSystemFromString all;
|
||||||
|
@ -97,6 +97,18 @@ rec {
|
|||||||
riscv64 = riscv "64";
|
riscv64 = riscv "64";
|
||||||
riscv32 = riscv "32";
|
riscv32 = riscv "32";
|
||||||
|
|
||||||
|
riscv64-embedded = {
|
||||||
|
config = "riscv64-none-elf";
|
||||||
|
libc = "newlib";
|
||||||
|
platform = platforms.riscv-multiplatform "64";
|
||||||
|
};
|
||||||
|
|
||||||
|
riscv32-embedded = {
|
||||||
|
config = "riscv32-none-elf";
|
||||||
|
libc = "newlib";
|
||||||
|
platform = platforms.riscv-multiplatform "32";
|
||||||
|
};
|
||||||
|
|
||||||
msp430 = {
|
msp430 = {
|
||||||
config = "msp430-elf";
|
config = "msp430-elf";
|
||||||
libc = "newlib";
|
libc = "newlib";
|
||||||
|
@ -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}";
|
||||||
|
@ -71,6 +71,15 @@ checkConfigError 'The option value .* in .* is not of type.*positive integer.*'
|
|||||||
checkConfigOutput "42" config.value ./declare-int-between-value.nix ./define-value-int-positive.nix
|
checkConfigOutput "42" config.value ./declare-int-between-value.nix ./define-value-int-positive.nix
|
||||||
checkConfigError 'The option value .* in .* is not of type.*between.*-21 and 43.*inclusive.*' config.value ./declare-int-between-value.nix ./define-value-int-negative.nix
|
checkConfigError 'The option value .* in .* is not of type.*between.*-21 and 43.*inclusive.*' config.value ./declare-int-between-value.nix ./define-value-int-negative.nix
|
||||||
|
|
||||||
|
# Check either types
|
||||||
|
# types.either
|
||||||
|
checkConfigOutput "42" config.value ./declare-either.nix ./define-value-int-positive.nix
|
||||||
|
checkConfigOutput "\"24\"" config.value ./declare-either.nix ./define-value-string.nix
|
||||||
|
# types.oneOf
|
||||||
|
checkConfigOutput "42" config.value ./declare-oneOf.nix ./define-value-int-positive.nix
|
||||||
|
checkConfigOutput "[ ]" config.value ./declare-oneOf.nix ./define-value-list.nix
|
||||||
|
checkConfigOutput "\"24\"" config.value ./declare-oneOf.nix ./define-value-string.nix
|
||||||
|
|
||||||
# Check mkForce without submodules.
|
# Check mkForce without submodules.
|
||||||
set -- config.enable ./declare-enable.nix ./define-enable.nix
|
set -- config.enable ./declare-enable.nix ./define-enable.nix
|
||||||
checkConfigOutput "true" "$@"
|
checkConfigOutput "true" "$@"
|
||||||
|
5
lib/tests/modules/declare-either.nix
Normal file
5
lib/tests/modules/declare-either.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ lib, ... }: {
|
||||||
|
options.value = lib.mkOption {
|
||||||
|
type = lib.types.either lib.types.int lib.types.str;
|
||||||
|
};
|
||||||
|
}
|
9
lib/tests/modules/declare-oneOf.nix
Normal file
9
lib/tests/modules/declare-oneOf.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ lib, ... }: {
|
||||||
|
options.value = lib.mkOption {
|
||||||
|
type = lib.types.oneOf [
|
||||||
|
lib.types.int
|
||||||
|
(lib.types.listOf lib.types.int)
|
||||||
|
lib.types.str
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
@ -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
|
||||||
'';
|
''
|
||||||
}
|
|
||||||
|
@ -14,13 +14,13 @@ let
|
|||||||
in with lib.systems.doubles; lib.runTests {
|
in with lib.systems.doubles; lib.runTests {
|
||||||
testall = mseteq all (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos ++ wasi ++ windows ++ embedded);
|
testall = mseteq all (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos ++ wasi ++ windows ++ embedded);
|
||||||
|
|
||||||
testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv7l-linux" "arm-none" ];
|
testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv7l-linux" "arm-none" "armv7a-darwin" ];
|
||||||
testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" ];
|
testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
|
||||||
testmips = mseteq mips [ "mipsel-linux" ];
|
testmips = mseteq mips [ "mipsel-linux" ];
|
||||||
testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
|
testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
|
||||||
|
|
||||||
testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ];
|
testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ];
|
||||||
testdarwin = mseteq darwin [ "x86_64-darwin" ];
|
testdarwin = mseteq darwin [ "x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin" ];
|
||||||
testfreebsd = mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ];
|
testfreebsd = mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ];
|
||||||
testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */);
|
testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */);
|
||||||
testillumos = mseteq illumos [ "x86_64-solaris" ];
|
testillumos = mseteq illumos [ "x86_64-solaris" ];
|
||||||
|
@ -111,7 +111,7 @@ rec {
|
|||||||
name = "int";
|
name = "int";
|
||||||
description = "signed integer";
|
description = "signed integer";
|
||||||
check = isInt;
|
check = isInt;
|
||||||
merge = mergeOneOption;
|
merge = mergeEqualOption;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Specialized subdomains of int
|
# Specialized subdomains of int
|
||||||
@ -176,14 +176,14 @@ rec {
|
|||||||
name = "float";
|
name = "float";
|
||||||
description = "floating point number";
|
description = "floating point number";
|
||||||
check = isFloat;
|
check = isFloat;
|
||||||
merge = mergeOneOption;
|
merge = mergeEqualOption;
|
||||||
};
|
};
|
||||||
|
|
||||||
str = mkOptionType {
|
str = mkOptionType {
|
||||||
name = "str";
|
name = "str";
|
||||||
description = "string";
|
description = "string";
|
||||||
check = isString;
|
check = isString;
|
||||||
merge = mergeOneOption;
|
merge = mergeEqualOption;
|
||||||
};
|
};
|
||||||
|
|
||||||
strMatching = pattern: mkOptionType {
|
strMatching = pattern: mkOptionType {
|
||||||
@ -243,7 +243,7 @@ rec {
|
|||||||
name = "path";
|
name = "path";
|
||||||
# Hacky: there is no ‘isPath’ primop.
|
# Hacky: there is no ‘isPath’ primop.
|
||||||
check = x: builtins.substring 0 1 (toString x) == "/";
|
check = x: builtins.substring 0 1 (toString x) == "/";
|
||||||
merge = mergeOneOption;
|
merge = mergeEqualOption;
|
||||||
};
|
};
|
||||||
|
|
||||||
# drop this in the future:
|
# drop this in the future:
|
||||||
@ -415,7 +415,7 @@ rec {
|
|||||||
name = "enum";
|
name = "enum";
|
||||||
description = "one of ${concatMapStringsSep ", " show values}";
|
description = "one of ${concatMapStringsSep ", " show values}";
|
||||||
check = flip elem values;
|
check = flip elem values;
|
||||||
merge = mergeOneOption;
|
merge = mergeEqualOption;
|
||||||
functor = (defaultFunctor name) // { payload = values; binOp = a: b: unique (a ++ b); };
|
functor = (defaultFunctor name) // { payload = values; binOp = a: b: unique (a ++ b); };
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -443,6 +443,13 @@ rec {
|
|||||||
functor = (defaultFunctor name) // { wrapped = [ t1 t2 ]; };
|
functor = (defaultFunctor name) // { wrapped = [ t1 t2 ]; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Any of the types in the given list
|
||||||
|
oneOf = ts:
|
||||||
|
let
|
||||||
|
head' = if ts == [] then throw "types.oneOf needs to get at least one type in its argument" else head ts;
|
||||||
|
tail' = tail ts;
|
||||||
|
in foldl' either head' tail';
|
||||||
|
|
||||||
# Either value of type `finalType` or `coercedType`, the latter is
|
# Either value of type `finalType` or `coercedType`, the latter is
|
||||||
# converted to `finalType` using `coerceFunc`.
|
# converted to `finalType` using `coerceFunc`.
|
||||||
coercedTo = coercedType: coerceFunc: finalType:
|
coercedTo = coercedType: coerceFunc: finalType:
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,20 @@
|
|||||||
# nix name, luarocks name, server, version,luaversion,maintainers
|
# nix name, luarocks name, server, version,luaversion,maintainers
|
||||||
|
alt-getopt,,,,,arobyn
|
||||||
ansicolors,,,,,
|
ansicolors,,,,,
|
||||||
argparse,,,,,
|
argparse,,,,,
|
||||||
basexx,,,,,
|
basexx,,,,,
|
||||||
binaryheap,,,,,vcunat
|
binaryheap,,,,,vcunat
|
||||||
|
bit32,,,,lua5_1,lblasc
|
||||||
|
busted,,,,,
|
||||||
|
cjson,lua-cjson,,,,
|
||||||
|
compat53,,,,,vcunat
|
||||||
|
coxpcall,,,1.17.0-1,,
|
||||||
|
cqueues,,,,,vcunat
|
||||||
|
cyrussasl,,,,,vcunat
|
||||||
digestif,,http://luarocks.org/dev,,lua5_3,
|
digestif,,http://luarocks.org/dev,,lua5_3,
|
||||||
dkjson,,,,,
|
dkjson,,,,,
|
||||||
fifo,,,,,
|
fifo,,,,,
|
||||||
http,,,,,
|
http,,,,,vcunat
|
||||||
inspect,,,,,
|
inspect,,,,,
|
||||||
ldoc,,,,,
|
ldoc,,,,,
|
||||||
lgi,,,,,
|
lgi,,,,,
|
||||||
@ -15,35 +23,45 @@ lpeg_patterns,,,,,
|
|||||||
lpeglabel,,,,,
|
lpeglabel,,,,,
|
||||||
lpty,,,,,
|
lpty,,,,,
|
||||||
lrexlib-gnu,,,,,
|
lrexlib-gnu,,,,,
|
||||||
|
lrexlib-pcre,,,,,vyp
|
||||||
lrexlib-posix,,,,,
|
lrexlib-posix,,,,,
|
||||||
ltermbox,,,,,
|
ltermbox,,,,,
|
||||||
cjson,lua-cjson,,,,
|
|
||||||
lua-cmsgpack,,,,,
|
lua-cmsgpack,,,,,
|
||||||
lua_cliargs,,,,,
|
|
||||||
lua-iconv,,,,,
|
lua-iconv,,,,,
|
||||||
lua-lsp,,http://luarocks.org/dev,,,
|
lua-lsp,,http://luarocks.org/dev,,,
|
||||||
lua-messagepack,,,,,
|
lua-messagepack,,,,,
|
||||||
lua-term,,,,,
|
lua-term,,,,,
|
||||||
lua-toml,,,,,
|
lua-toml,,,,,
|
||||||
lua-zlib,,,,,koral
|
lua-zlib,,,,,koral
|
||||||
|
lua_cliargs,,,,,
|
||||||
luabitop,,,,,
|
luabitop,,,,,
|
||||||
luaevent,,,,,
|
|
||||||
luacheck,,,,,
|
luacheck,,,,,
|
||||||
|
luadbi,,,,,
|
||||||
|
luadbi-mysql,,,,,
|
||||||
|
luadbi-postgresql,,,,,
|
||||||
|
luadbi-sqlite3,,,,,
|
||||||
|
luaevent,,,,,
|
||||||
|
luaexpat,,,1.3.0-1,,arobyn flosse
|
||||||
luaffi,,http://luarocks.org/dev,,,
|
luaffi,,http://luarocks.org/dev,,,
|
||||||
|
luafilesystem,,,1.7.0-2,,flosse vcunat
|
||||||
|
luaossl,,,,lua5_1,vcunat
|
||||||
luaposix,,,,,vyp lblasc
|
luaposix,,,,,vyp lblasc
|
||||||
|
luasec,,,,,flosse
|
||||||
|
luasocket,,,,,
|
||||||
|
luasql-sqlite3,,,,,vyp
|
||||||
|
luassert,,,,,
|
||||||
|
luasystem,,,,,
|
||||||
luazip,,,,,
|
luazip,,,,,
|
||||||
luuid,,,,,
|
luuid,,,,,
|
||||||
|
luv,,,,,
|
||||||
markdown,,,,,
|
markdown,,,,,
|
||||||
|
mediator_lua,,,,,
|
||||||
|
mpack,,,,,
|
||||||
|
moonscript,,,,,arobyn
|
||||||
|
nvim-client,,,,,
|
||||||
penlight,,,,,
|
penlight,,,,,
|
||||||
rapidjson,,,,,
|
rapidjson,,,,,
|
||||||
say,,,,,
|
say,,,,,
|
||||||
std__debug,std._debug,,,,
|
std__debug,std._debug,,,,
|
||||||
std_normalize,std.normalize,,,,
|
std_normalize,std.normalize,,,,
|
||||||
luv,,,,,
|
stdlib,,,,,vyp
|
||||||
luasystem,,,,,
|
|
||||||
mediator_lua,,http://luarocks.org/manifests/teto,,,
|
|
||||||
mpack,,,,,
|
|
||||||
nvim-client,,,,,
|
|
||||||
busted,,http://luarocks.org/manifests/teto,,,
|
|
||||||
luassert,,,,,
|
|
||||||
coxpcall,,https://luarocks.org/manifests/hisham,1.17.0-1,,
|
|
||||||
|
|
@ -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,15 +8,19 @@
|
|||||||
# to update all libraries in that folder.
|
# to update all libraries in that folder.
|
||||||
# to debug, redirect stderr to stdout with 2>&1
|
# to debug, redirect stderr to stdout with 2>&1
|
||||||
|
|
||||||
|
|
||||||
# stop the script upon C-C
|
# stop the script upon C-C
|
||||||
set -eu -o pipefail
|
set -eu -o pipefail
|
||||||
|
|
||||||
CSV_FILE="maintainers/scripts/luarocks-packages.csv"
|
CSV_FILE="maintainers/scripts/luarocks-packages.csv"
|
||||||
TMP_FILE="$(mktemp)"
|
TMP_FILE="$(mktemp)"
|
||||||
|
# Set in the update-luarocks-shell.nix
|
||||||
|
NIXPKGS_PATH="$LUAROCKS_NIXPKGS_PATH"
|
||||||
|
|
||||||
exit_trap()
|
# 10 is a pretty arbitrary number of simultaneous jobs, but it is generally
|
||||||
{
|
# impolite to hit a webserver with *too* many simultaneous connections :)
|
||||||
|
PARALLEL_JOBS=10
|
||||||
|
|
||||||
|
exit_trap() {
|
||||||
local lc="$BASH_COMMAND" rc=$?
|
local lc="$BASH_COMMAND" rc=$?
|
||||||
test $rc -eq 0 || echo -e "*** error $rc: $lc.\nGenerated temporary file in $TMP_FILE" >&2
|
test $rc -eq 0 || echo -e "*** error $rc: $lc.\nGenerated temporary file in $TMP_FILE" >&2
|
||||||
}
|
}
|
||||||
@ -49,7 +53,7 @@ while getopts ":hc:" opt; do
|
|||||||
echo "Invalid option: -$OPTARG" >&2
|
echo "Invalid option: -$OPTARG" >&2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
shift $((OPTIND-1))
|
shift $((OPTIND - 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
GENERATED_NIXFILE="$1"
|
GENERATED_NIXFILE="$1"
|
||||||
@ -72,43 +76,60 @@ FOOTER="
|
|||||||
/* GENERATED */
|
/* GENERATED */
|
||||||
"
|
"
|
||||||
|
|
||||||
|
function convert_pkg() {
|
||||||
function convert_pkg () {
|
|
||||||
nix_pkg_name="$1"
|
nix_pkg_name="$1"
|
||||||
lua_pkg_name="$2"
|
lua_pkg_name="$2"
|
||||||
server="${3:+--only-server=$3}"
|
server="$3"
|
||||||
pkg_version="${4:-}"
|
pkg_version="$4"
|
||||||
lua_version="${5:+--lua-dir=$(nix path-info nixpkgs.$5)/bin}"
|
lua_version="$5"
|
||||||
|
maintainers="$6"
|
||||||
|
|
||||||
echo "looking at $lua_pkg_name (version $pkg_version) from server [$server]" >&2
|
if [ "${nix_pkg_name:0:1}" == "#" ]; then
|
||||||
cmd="luarocks nix $server $lua_version $lua_pkg_name $pkg_version"
|
echo "Skipping comment ${*}" >&2
|
||||||
echo "Running $cmd" >&2
|
return
|
||||||
drv="$nix_pkg_name = $($cmd)"
|
fi
|
||||||
if [ $? -ne 0 ]; then
|
if [ -z "$lua_pkg_name" ]; then
|
||||||
echo "Failed to convert $pkg" >&2
|
echo "Using nix_name as lua_pkg_name for '$nix_pkg_name'" >&2
|
||||||
|
lua_pkg_name="$nix_pkg_name"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Building expression for $lua_pkg_name (version $pkg_version) from server [$server]" >&2
|
||||||
|
luarocks_args=(nix)
|
||||||
|
if [[ -n $server ]]; then
|
||||||
|
luarocks_args+=("--only-server=$server")
|
||||||
|
fi
|
||||||
|
if [[ -n $maintainers ]]; then
|
||||||
|
luarocks_args+=("--maintainers=$maintainers")
|
||||||
|
fi
|
||||||
|
if [[ -n $lua_version ]]; then
|
||||||
|
lua_drv_path=$(nix-build --no-out-link "$NIXPKGS_PATH" -A "$lua_version")
|
||||||
|
luarocks_args+=("--lua-dir=$lua_drv_path/bin")
|
||||||
|
fi
|
||||||
|
luarocks_args+=("$lua_pkg_name")
|
||||||
|
if [[ -n $pkg_version ]]; then
|
||||||
|
luarocks_args+=("$pkg_version")
|
||||||
|
fi
|
||||||
|
echo "Running 'luarocks ${luarocks_args[*]}'" >&2
|
||||||
|
if drv="$nix_pkg_name = $(luarocks "${luarocks_args[@]}")"; then
|
||||||
|
echo "$drv"
|
||||||
else
|
else
|
||||||
echo "$drv" | tee -a "$TMP_FILE"
|
echo "Failed to convert $nix_pkg_name" >&2
|
||||||
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# params needed when called via callPackage
|
# params needed when called via callPackage
|
||||||
echo "$HEADER" | tee "$TMP_FILE"
|
echo "$HEADER" | tee "$TMP_FILE"
|
||||||
|
|
||||||
# list of packages with format
|
# Ensure parallel can run our bash function
|
||||||
while IFS=, read -r nix_pkg_name lua_pkg_name server pkg_version luaversion
|
export -f convert_pkg
|
||||||
do
|
export SHELL=bash
|
||||||
if [ "${nix_pkg_name:0:1}" == "#" ]; then
|
# Read each line in the csv file and run convert_pkg for each, in parallel
|
||||||
echo "Skipping comment ${nix_pkg_name}" >&2
|
parallel --group --keep-order --halt now,fail=1 --jobs "$PARALLEL_JOBS" --colsep ',' convert_pkg {} <"$CSV_FILE" | tee -a "$TMP_FILE"
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ -z "$lua_pkg_name" ]; then
|
|
||||||
echo "Using nix_name as lua_pkg_name" >&2
|
|
||||||
lua_pkg_name="$nix_pkg_name"
|
|
||||||
fi
|
|
||||||
convert_pkg "$nix_pkg_name" "$lua_pkg_name" "$server" "$pkg_version" "$luaversion"
|
|
||||||
done < "$CSV_FILE"
|
|
||||||
|
|
||||||
# close the set
|
# close the set
|
||||||
echo "$FOOTER" | tee -a "$TMP_FILE"
|
echo "$FOOTER" | tee -a "$TMP_FILE"
|
||||||
|
|
||||||
cp "$TMP_FILE" "$GENERATED_NIXFILE"
|
cp "$TMP_FILE" "$GENERATED_NIXFILE"
|
||||||
|
|
||||||
|
# vim: set ts=4 sw=4 ft=sh:
|
||||||
|
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;
|
||||||
|
}
|
@ -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
|
||||||
|
@ -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,12 +33,12 @@
|
|||||||
<link xlink:href="https://github.com/matrix-org/synapse#synapse-installation">
|
<link xlink:href="https://github.com/matrix-org/synapse#synapse-installation">
|
||||||
installation instructions of Synapse </link>.
|
installation instructions of Synapse </link>.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
let
|
let
|
||||||
fqdn =
|
fqdn =
|
||||||
let
|
let
|
||||||
join = hostName: domain: hostName + optionalString (domain != null) ".${domain}";
|
join = hostName: domain: hostName + optionalString (domain != null) ".${domain}";
|
||||||
in join config.networking.hostName config.networking.domain;
|
in join config.networking.hostName config.networking.domain;
|
||||||
in {
|
in {
|
||||||
networking = {
|
networking = {
|
||||||
hostName = "myhostname";
|
hostName = "myhostname";
|
||||||
domain = "example.org";
|
domain = "example.org";
|
||||||
@ -95,7 +95,7 @@
|
|||||||
|
|
||||||
# forward all Matrix API calls to the synapse Matrix homeserver
|
# forward all Matrix API calls to the synapse Matrix homeserver
|
||||||
locations."/_matrix" = {
|
locations."/_matrix" = {
|
||||||
proxyPass = "http://[::1]:8008";
|
proxyPass = "http://[::1]:8008"; # without a trailing /
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -116,8 +116,8 @@
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -141,15 +141,15 @@
|
|||||||
<option>services.matrix-synapse.registration_shared_secret</option>. To
|
<option>services.matrix-synapse.registration_shared_secret</option>. To
|
||||||
create a new user or admin, run the following after you have set the secret
|
create a new user or admin, run the following after you have set the secret
|
||||||
and have rebuilt NixOS:
|
and have rebuilt NixOS:
|
||||||
<programlisting>
|
<screen>
|
||||||
$ nix run nixpkgs.matrix-synapse
|
<prompt>$ </prompt>nix run nixpkgs.matrix-synapse
|
||||||
$ register_new_matrix_user -k <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,7 +177,7 @@
|
|||||||
Matrix Now!</link> for a list of existing clients and their supported
|
Matrix Now!</link> for a list of existing clients and their supported
|
||||||
featureset.
|
featureset.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.nginx.virtualHosts."riot.${fqdn}" = {
|
services.nginx.virtualHosts."riot.${fqdn}" = {
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
serverAliases = [
|
serverAliases = [
|
||||||
@ -185,8 +185,8 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
root = pkgs.riot-web;
|
root = pkgs.riot-web;
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -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>
|
||||||
|
@ -125,10 +125,12 @@
|
|||||||
You will need to reboot after enabling this driver to prevent a clash with
|
You will need to reboot after enabling this driver to prevent a clash with
|
||||||
other kernel modules.
|
other kernel modules.
|
||||||
</para>
|
</para>
|
||||||
|
<note>
|
||||||
<para>
|
<para>
|
||||||
Note: for recent AMD GPUs you most likely want to keep either the defaults
|
For recent AMD GPUs you most likely want to keep either the defaults
|
||||||
or <literal>"amdgpu"</literal> (both free).
|
or <literal>"amdgpu"</literal> (both free).
|
||||||
</para>
|
</para>
|
||||||
|
</note>
|
||||||
</simplesect>
|
</simplesect>
|
||||||
<simplesect xml:id="sec-x11-touchpads">
|
<simplesect xml:id="sec-x11-touchpads">
|
||||||
<title>Touchpads</title>
|
<title>Touchpads</title>
|
||||||
@ -157,4 +159,134 @@
|
|||||||
versions.
|
versions.
|
||||||
</para>
|
</para>
|
||||||
</simplesect>
|
</simplesect>
|
||||||
|
<simplesect xml:id="custom-xkb-layouts">
|
||||||
|
<title>Custom XKB layouts</title>
|
||||||
|
<para>
|
||||||
|
It is possible to install custom
|
||||||
|
<link xlink:href="https://en.wikipedia.org/wiki/X_keyboard_extension">
|
||||||
|
XKB
|
||||||
|
</link>
|
||||||
|
keyboard layouts using the option
|
||||||
|
<option>
|
||||||
|
<link linkend="opt-services.xserver.extraLayouts">
|
||||||
|
services.xserver.extraLayouts
|
||||||
|
</link>
|
||||||
|
</option>.
|
||||||
|
As a first example, we are going to create a layout based on the basic US
|
||||||
|
layout, with an additional layer to type some greek symbols by pressing the
|
||||||
|
right-alt key.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
To do this we are going to create a <literal>us-greek</literal> file
|
||||||
|
with a <literal>xkb_symbols</literal> section.
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
xkb_symbols "us-greek"
|
||||||
|
{
|
||||||
|
include "us(basic)" // includes the base US keys
|
||||||
|
include "level3(ralt_switch)" // configures right alt as a third level switch
|
||||||
|
|
||||||
|
key <LatA> { [ a, A, Greek_alpha ] };
|
||||||
|
key <LatB> { [ b, B, Greek_beta ] };
|
||||||
|
key <LatG> { [ g, G, Greek_gamma ] };
|
||||||
|
key <LatD> { [ d, D, Greek_delta ] };
|
||||||
|
key <LatZ> { [ z, Z, Greek_zeta ] };
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
<para>
|
||||||
|
To install the layout, the filepath, a description and the list of
|
||||||
|
languages must be given:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
<xref linkend="opt-services.xserver.extraLayouts"/>.us-greek = {
|
||||||
|
description = "US layout with alt-gr greek";
|
||||||
|
languages = [ "eng" ];
|
||||||
|
symbolsFile = /path/to/us-greek;
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
The name should match the one given to the
|
||||||
|
<literal>xkb_symbols</literal> block.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
<para>
|
||||||
|
The layout should now be installed and ready to use: try it by
|
||||||
|
running <literal>setxkbmap us-greek</literal> and type
|
||||||
|
<literal><alt>+a</literal>. To change the default the usual
|
||||||
|
<option>
|
||||||
|
<link linkend="opt-services.xserver.layout">
|
||||||
|
services.xserver.layout
|
||||||
|
</link>
|
||||||
|
</option>
|
||||||
|
option can still be used.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
A layout can have several other components besides
|
||||||
|
<literal>xkb_symbols</literal>, for example we will define new
|
||||||
|
keycodes for some multimedia key and bind these to some symbol.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Use the <emphasis>xev</emphasis> utility from
|
||||||
|
<literal>pkgs.xorg.xev</literal> to find the codes of the keys of
|
||||||
|
interest, then create a <literal>media-key</literal> file to hold
|
||||||
|
the keycodes definitions
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
xkb_keycodes "media"
|
||||||
|
{
|
||||||
|
<volUp> = 123;
|
||||||
|
<volDown> = 456;
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
<para>
|
||||||
|
Now use the newly define keycodes in <literal>media-sym</literal>:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
xkb_symbols "media"
|
||||||
|
{
|
||||||
|
key.type = "ONE_LEVEL";
|
||||||
|
key <volUp> { [ XF86AudioLowerVolume ] };
|
||||||
|
key <volDown> { [ XF86AudioRaiseVolume ] };
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
<para>
|
||||||
|
As before, to install the layout do
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
<xref linkend="opt-services.xserver.extraLayouts"/>.media = {
|
||||||
|
description = "Multimedia keys remapping";
|
||||||
|
languages = [ "eng" ];
|
||||||
|
symbolsFile = /path/to/media-key;
|
||||||
|
keycodesFile = /path/to/media-sym;
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
The function <literal>pkgs.writeText <filename> <content>
|
||||||
|
</literal> can be useful if you prefer to keep the layout definitions
|
||||||
|
inside the NixOS configuration.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
<para>
|
||||||
|
Unfortunately, the Xorg server does not (currently) support setting a
|
||||||
|
keymap directly but relies instead on XKB rules to select the matching
|
||||||
|
components (keycodes, types, ...) of a layout. This means that components
|
||||||
|
other than symbols won't be loaded by default. As a workaround, you
|
||||||
|
can set the keymap using <literal>setxkbmap</literal> at the start of the
|
||||||
|
session with:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
<xref linkend="opt-services.xserver.displayManager.sessionCommands"/> = "setxkbmap -keycodes media";
|
||||||
|
</programlisting>
|
||||||
|
<para>
|
||||||
|
To learn how to write layouts take a look at the XKB
|
||||||
|
<link xlink:href="https://www.x.org/releases/current/doc/xorg-docs/input/XKB-Enhancing.html#Defining_New_Layouts">
|
||||||
|
documentation
|
||||||
|
</link>. More example layouts can also be found
|
||||||
|
<link xlink:href="https://wiki.archlinux.org/index.php/X_KeyBoard_extension#Basic_examples">
|
||||||
|
here
|
||||||
|
</link>.
|
||||||
|
</para>
|
||||||
|
</simplesect>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -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>
|
||||||
|
@ -5,55 +5,6 @@ with pkgs;
|
|||||||
let
|
let
|
||||||
lib = pkgs.lib;
|
lib = pkgs.lib;
|
||||||
|
|
||||||
# Remove invisible and internal options.
|
|
||||||
optionsListVisible = lib.filter (opt: opt.visible && !opt.internal) (lib.optionAttrSetToDocList options);
|
|
||||||
|
|
||||||
# Replace functions by the string <function>
|
|
||||||
substFunction = x:
|
|
||||||
if builtins.isAttrs x then lib.mapAttrs (name: substFunction) x
|
|
||||||
else if builtins.isList x then map substFunction x
|
|
||||||
else if lib.isFunction x then "<function>"
|
|
||||||
else x;
|
|
||||||
|
|
||||||
# Generate DocBook documentation for a list of packages. This is
|
|
||||||
# what `relatedPackages` option of `mkOption` from
|
|
||||||
# ../../../lib/options.nix influences.
|
|
||||||
#
|
|
||||||
# Each element of `relatedPackages` can be either
|
|
||||||
# - a string: that will be interpreted as an attribute name from `pkgs`,
|
|
||||||
# - a list: that will be interpreted as an attribute path from `pkgs`,
|
|
||||||
# - an attrset: that can specify `name`, `path`, `package`, `comment`
|
|
||||||
# (either of `name`, `path` is required, the rest are optional).
|
|
||||||
genRelatedPackages = packages:
|
|
||||||
let
|
|
||||||
unpack = p: if lib.isString p then { name = p; }
|
|
||||||
else if lib.isList p then { path = p; }
|
|
||||||
else p;
|
|
||||||
describe = args:
|
|
||||||
let
|
|
||||||
title = args.title or null;
|
|
||||||
name = args.name or (lib.concatStringsSep "." args.path);
|
|
||||||
path = args.path or [ args.name ];
|
|
||||||
package = args.package or (lib.attrByPath path (throw "Invalid package attribute path `${toString path}'") pkgs);
|
|
||||||
in "<listitem>"
|
|
||||||
+ "<para><literal>${lib.optionalString (title != null) "${title} aka "}pkgs.${name} (${package.meta.name})</literal>"
|
|
||||||
+ lib.optionalString (!package.meta.available) " <emphasis>[UNAVAILABLE]</emphasis>"
|
|
||||||
+ ": ${package.meta.description or "???"}.</para>"
|
|
||||||
+ lib.optionalString (args ? comment) "\n<para>${args.comment}</para>"
|
|
||||||
# Lots of `longDescription's break DocBook, so we just wrap them into <programlisting>
|
|
||||||
+ lib.optionalString (package.meta ? longDescription) "\n<programlisting>${package.meta.longDescription}</programlisting>"
|
|
||||||
+ "</listitem>";
|
|
||||||
in "<itemizedlist>${lib.concatStringsSep "\n" (map (p: describe (unpack p)) packages)}</itemizedlist>";
|
|
||||||
|
|
||||||
optionsListDesc = lib.flip map optionsListVisible (opt: opt // {
|
|
||||||
# Clean up declaration sites to not refer to the NixOS source tree.
|
|
||||||
declarations = map stripAnyPrefixes opt.declarations;
|
|
||||||
}
|
|
||||||
// lib.optionalAttrs (opt ? example) { example = substFunction opt.example; }
|
|
||||||
// lib.optionalAttrs (opt ? default) { default = substFunction opt.default; }
|
|
||||||
// lib.optionalAttrs (opt ? type) { type = substFunction opt.type; }
|
|
||||||
// lib.optionalAttrs (opt ? relatedPackages && opt.relatedPackages != []) { relatedPackages = genRelatedPackages opt.relatedPackages; });
|
|
||||||
|
|
||||||
# We need to strip references to /nix/store/* from options,
|
# We need to strip references to /nix/store/* from options,
|
||||||
# including any `extraSources` if some modules came from elsewhere,
|
# including any `extraSources` if some modules came from elsewhere,
|
||||||
# or else the build will fail.
|
# or else the build will fail.
|
||||||
@ -63,37 +14,13 @@ let
|
|||||||
prefixesToStrip = map (p: "${toString p}/") ([ ../../.. ] ++ extraSources);
|
prefixesToStrip = map (p: "${toString p}/") ([ ../../.. ] ++ extraSources);
|
||||||
stripAnyPrefixes = lib.flip (lib.fold lib.removePrefix) prefixesToStrip;
|
stripAnyPrefixes = lib.flip (lib.fold lib.removePrefix) prefixesToStrip;
|
||||||
|
|
||||||
# Custom "less" that pushes up all the things ending in ".enable*"
|
optionsDoc = buildPackages.nixosOptionsDoc {
|
||||||
# and ".package*"
|
inherit options revision;
|
||||||
optionLess = a: b:
|
transformOptions = opt: opt // {
|
||||||
let
|
# Clean up declaration sites to not refer to the NixOS source tree.
|
||||||
ise = lib.hasPrefix "enable";
|
declarations = map stripAnyPrefixes opt.declarations;
|
||||||
isp = lib.hasPrefix "package";
|
};
|
||||||
cmp = lib.splitByAndCompare ise lib.compare
|
};
|
||||||
(lib.splitByAndCompare isp lib.compare lib.compare);
|
|
||||||
in lib.compareLists cmp a.loc b.loc < 0;
|
|
||||||
|
|
||||||
# Customly sort option list for the man page.
|
|
||||||
optionsList = lib.sort optionLess optionsListDesc;
|
|
||||||
|
|
||||||
# Convert the list of options into an XML file.
|
|
||||||
optionsXML = builtins.toFile "options.xml" (builtins.toXML optionsList);
|
|
||||||
|
|
||||||
optionsDocBook = runCommand "options-db.xml" {} ''
|
|
||||||
optionsXML=${optionsXML}
|
|
||||||
if grep /nixpkgs/nixos/modules $optionsXML; then
|
|
||||||
echo "The manual appears to depend on the location of Nixpkgs, which is bad"
|
|
||||||
echo "since this prevents sharing via the NixOS channel. This is typically"
|
|
||||||
echo "caused by an option default that refers to a relative path (see above"
|
|
||||||
echo "for hints about the offending path)."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
${buildPackages.libxslt.bin}/bin/xsltproc \
|
|
||||||
--stringparam revision '${revision}' \
|
|
||||||
-o intermediate.xml ${./options-to-docbook.xsl} $optionsXML
|
|
||||||
${buildPackages.libxslt.bin}/bin/xsltproc \
|
|
||||||
-o "$out" ${./postprocess-option-descriptions.xsl} intermediate.xml
|
|
||||||
'';
|
|
||||||
|
|
||||||
sources = lib.sourceFilesBySuffices ./. [".xml"];
|
sources = lib.sourceFilesBySuffices ./. [".xml"];
|
||||||
|
|
||||||
@ -108,7 +35,7 @@ let
|
|||||||
generatedSources = runCommand "generated-docbook" {} ''
|
generatedSources = runCommand "generated-docbook" {} ''
|
||||||
mkdir $out
|
mkdir $out
|
||||||
ln -s ${modulesDoc} $out/modules.xml
|
ln -s ${modulesDoc} $out/modules.xml
|
||||||
ln -s ${optionsDocBook} $out/options-db.xml
|
ln -s ${optionsDoc.optionsDocBook} $out/options-db.xml
|
||||||
printf "%s" "${version}" > $out/version
|
printf "%s" "${version}" > $out/version
|
||||||
'';
|
'';
|
||||||
|
|
||||||
@ -234,22 +161,7 @@ let
|
|||||||
in rec {
|
in rec {
|
||||||
inherit generatedSources;
|
inherit generatedSources;
|
||||||
|
|
||||||
# The NixOS options in JSON format.
|
inherit (optionsDoc) optionsJSON optionsXML optionsDocBook;
|
||||||
optionsJSON = runCommand "options-json"
|
|
||||||
{ meta.description = "List of NixOS options in JSON format";
|
|
||||||
}
|
|
||||||
''
|
|
||||||
# Export list of options in different format.
|
|
||||||
dst=$out/share/doc/nixos
|
|
||||||
mkdir -p $dst
|
|
||||||
|
|
||||||
cp ${builtins.toFile "options.json" (builtins.unsafeDiscardStringContext (builtins.toJSON
|
|
||||||
(builtins.listToAttrs (map (o: { name = o.name; value = removeAttrs o ["name" "visible" "internal"]; }) optionsList))))
|
|
||||||
} $dst/options.json
|
|
||||||
|
|
||||||
mkdir -p $out/nix-support
|
|
||||||
echo "file json $dst/options.json" >> $out/nix-support/hydra-build-products
|
|
||||||
''; # */
|
|
||||||
|
|
||||||
# Generate the NixOS manual.
|
# Generate the NixOS manual.
|
||||||
manualHTML = runCommand "nixos-manual-html"
|
manualHTML = runCommand "nixos-manual-html"
|
||||||
|
@ -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
|
||||||
|
@ -346,6 +346,18 @@
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<varname>types.oneOf</varname> [ <replaceable>t1</replaceable> <replaceable>t2</replaceable> ... ]
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Type <replaceable>t1</replaceable> or type <replaceable>t2</replaceable> and so forth,
|
||||||
|
e.g. <literal>with types; oneOf [ int str bool ]</literal>. Multiple definitions
|
||||||
|
cannot be merged.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<varname>types.coercedTo</varname> <replaceable>from</replaceable> <replaceable>f</replaceable> <replaceable>to</replaceable>
|
<varname>types.coercedTo</varname> <replaceable>from</replaceable> <replaceable>f</replaceable> <replaceable>to</replaceable>
|
||||||
|
@ -98,6 +98,16 @@
|
|||||||
<literal>stableBranch</literal> set to false.
|
<literal>stableBranch</literal> set to false.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Remove attributes that we know we will not be able to support,
|
||||||
|
especially if there is a stable alternative. E.g. Check that our
|
||||||
|
Linux kernels'
|
||||||
|
<link xlink:href="https://www.kernel.org/category/releases.html">
|
||||||
|
projected end-of-life</link> are after our release projected
|
||||||
|
end-of-life
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Edit changelog at
|
Edit changelog at
|
||||||
@ -210,6 +220,30 @@
|
|||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
<section xml:id="release-managers">
|
||||||
|
<title>Release Management Team</title>
|
||||||
|
<para>
|
||||||
|
For each release there are two release managers. After each release the
|
||||||
|
release manager having managed two releases steps down and the release
|
||||||
|
management team of the last release appoints a new release manager.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This makes sure a release management team always consists of one release
|
||||||
|
manager who already has managed one release and one release manager being
|
||||||
|
introduced to their role, making it easier to pass on knowledge and
|
||||||
|
experience.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
A release manager's role and responsibilities are:
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem><para>manage the release process</para></listitem>
|
||||||
|
<listitem><para>start discussions about features and changes for a given release</para></listitem>
|
||||||
|
<listitem><para>create a roadmap</para></listitem>
|
||||||
|
<listitem><para>release in cooperation with Eelco Dolstra</para></listitem>
|
||||||
|
<listitem><para>decide which bug fixes, features, etc... get backported after a release</para></listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</section>
|
||||||
<section xml:id="release-schedule">
|
<section xml:id="release-schedule">
|
||||||
<title>Release schedule</title>
|
<title>Release schedule</title>
|
||||||
|
|
||||||
|
@ -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,10 +9,18 @@
|
|||||||
<link linkend="ch-configuration">changed something</link> in that file, you
|
<link linkend="ch-configuration">changed something</link> in that file, you
|
||||||
should do
|
should do
|
||||||
<screen>
|
<screen>
|
||||||
# nixos-rebuild switch</screen>
|
<prompt># </prompt>nixos-rebuild switch
|
||||||
|
</screen>
|
||||||
to build the new configuration, make it the default configuration for
|
to build the new configuration, make it the default configuration for
|
||||||
booting, and try to realise the configuration in the running system (e.g., by
|
booting, and try to realise the configuration in the running system (e.g., by
|
||||||
restarting system services).
|
restarting system services).
|
||||||
|
<warning>
|
||||||
|
<para>
|
||||||
|
This command doesn't start/stop <link linkend="opt-systemd.user.services">user
|
||||||
|
services</link> automatically. <command>nixos-rebuild</command> only runs a
|
||||||
|
<literal>daemon-reload</literal> for each user with running user services.
|
||||||
|
</para>
|
||||||
|
</warning>
|
||||||
</para>
|
</para>
|
||||||
<warning>
|
<warning>
|
||||||
<para>
|
<para>
|
||||||
@ -23,7 +31,8 @@
|
|||||||
<para>
|
<para>
|
||||||
You can also do
|
You can also do
|
||||||
<screen>
|
<screen>
|
||||||
# nixos-rebuild test</screen>
|
<prompt># </prompt>nixos-rebuild test
|
||||||
|
</screen>
|
||||||
to build the configuration and switch the running system to it, but without
|
to build the configuration and switch the running system to it, but without
|
||||||
making it the boot default. So if (say) the configuration locks up your
|
making it the boot default. So if (say) the configuration locks up your
|
||||||
machine, you can just reboot to get back to a working configuration.
|
machine, you can just reboot to get back to a working configuration.
|
||||||
@ -31,7 +40,8 @@
|
|||||||
<para>
|
<para>
|
||||||
There is also
|
There is also
|
||||||
<screen>
|
<screen>
|
||||||
# nixos-rebuild boot</screen>
|
<prompt># </prompt>nixos-rebuild boot
|
||||||
|
</screen>
|
||||||
to build the configuration and make it the boot default, but not switch to it
|
to build the configuration and make it the boot default, but not switch to it
|
||||||
now (so it will only take effect after the next reboot).
|
now (so it will only take effect after the next reboot).
|
||||||
</para>
|
</para>
|
||||||
@ -39,7 +49,8 @@
|
|||||||
You can make your configuration show up in a different submenu of the GRUB 2
|
You can make your configuration show up in a different submenu of the GRUB 2
|
||||||
boot screen by giving it a different <emphasis>profile name</emphasis>, e.g.
|
boot screen by giving it a different <emphasis>profile name</emphasis>, e.g.
|
||||||
<screen>
|
<screen>
|
||||||
# nixos-rebuild switch -p test </screen>
|
<prompt># </prompt>nixos-rebuild switch -p test
|
||||||
|
</screen>
|
||||||
which causes the new configuration (and previous ones created using
|
which causes the new configuration (and previous ones created using
|
||||||
<literal>-p test</literal>) to show up in the GRUB submenu “NixOS - Profile
|
<literal>-p test</literal>) to show up in the GRUB submenu “NixOS - Profile
|
||||||
'test'”. This can be useful to separate test configurations from
|
'test'”. This can be useful to separate test configurations from
|
||||||
@ -48,7 +59,8 @@
|
|||||||
<para>
|
<para>
|
||||||
Finally, you can do
|
Finally, you can do
|
||||||
<screen>
|
<screen>
|
||||||
$ nixos-rebuild build</screen>
|
<prompt>$ </prompt>nixos-rebuild build
|
||||||
|
</screen>
|
||||||
to build the configuration but nothing more. This is useful to see whether
|
to build the configuration but nothing more. This is useful to see whether
|
||||||
everything compiles cleanly.
|
everything compiles cleanly.
|
||||||
</para>
|
</para>
|
||||||
@ -58,8 +70,8 @@ $ nixos-rebuild build</screen>
|
|||||||
<emphasis>virtual machine</emphasis> that contains the desired configuration.
|
<emphasis>virtual machine</emphasis> that contains the desired configuration.
|
||||||
Just do
|
Just do
|
||||||
<screen>
|
<screen>
|
||||||
$ nixos-rebuild build-vm
|
<prompt>$ </prompt>nixos-rebuild build-vm
|
||||||
$ ./result/bin/run-*-vm
|
<prompt>$ </prompt>./result/bin/run-*-vm
|
||||||
</screen>
|
</screen>
|
||||||
The VM does not have any data from your host system, so your existing user
|
The VM does not have any data from your host system, so your existing user
|
||||||
accounts and home directories will not be available unless you have set
|
accounts and home directories will not be available unless you have set
|
||||||
@ -74,12 +86,12 @@ $ ./result/bin/run-*-vm
|
|||||||
guest. For instance, the following will forward host port 2222 to guest port
|
guest. For instance, the following will forward host port 2222 to guest port
|
||||||
22 (SSH):
|
22 (SSH):
|
||||||
<screen>
|
<screen>
|
||||||
$ QEMU_NET_OPTS="hostfwd=tcp::2222-:22" ./result/bin/run-*-vm
|
<prompt>$ </prompt>QEMU_NET_OPTS="hostfwd=tcp::2222-:22" ./result/bin/run-*-vm
|
||||||
</screen>
|
</screen>
|
||||||
allowing you to log in via SSH (assuming you have set the appropriate
|
allowing you to log in via SSH (assuming you have set the appropriate
|
||||||
passwords or SSH authorized keys):
|
passwords or SSH authorized keys):
|
||||||
<screen>
|
<screen>
|
||||||
$ ssh -p 2222 localhost
|
<prompt>$ </prompt>ssh -p 2222 localhost
|
||||||
</screen>
|
</screen>
|
||||||
</para>
|
</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -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
|
||||||
|
@ -29,13 +29,14 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
You are logged-in automatically as <literal>root</literal>. (The
|
You are logged-in automatically as <literal>nixos</literal>.
|
||||||
<literal>root</literal> user account has an empty password.)
|
The <literal>nixos</literal> user account has an empty password so you
|
||||||
|
can use <command>sudo</command> without a password.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
If you downloaded the graphical ISO image, you can run <command>systemctl
|
If you downloaded the graphical ISO image, you can run <command>systemctl
|
||||||
start display-manager</command> to start KDE. If you want to continue on the
|
start display-manager</command> to start the desktop environment. If you want to continue on the
|
||||||
terminal, you can use <command>loadkeys</command> to switch to your
|
terminal, you can use <command>loadkeys</command> to switch to your
|
||||||
preferred keyboard layout. (We even provide neo2 via <command>loadkeys de
|
preferred keyboard layout. (We even provide neo2 via <command>loadkeys de
|
||||||
neo</command>!)
|
neo</command>!)
|
||||||
@ -65,9 +66,9 @@
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
If you would like to continue the installation from a different machine you
|
If you would like to continue the installation from a different machine you
|
||||||
need to activate the SSH daemon via <literal>systemctl start
|
need to activate the SSH daemon via <command>systemctl start
|
||||||
sshd</literal>. In order to be able to login you also need to set a
|
sshd</command>. You then must set a password for either <literal>root</literal> or
|
||||||
password for <literal>root</literal> using <literal>passwd</literal>.
|
<literal>nixos</literal> with <command>passwd></command> to be able to login.
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
@ -110,7 +111,7 @@
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Create a <emphasis>GPT</emphasis> partition table.
|
Create a <emphasis>GPT</emphasis> partition table.
|
||||||
<screen language="commands"># parted /dev/sda -- mklabel gpt</screen>
|
<screen language="commands"><prompt># </prompt>parted /dev/sda -- mklabel gpt</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -118,14 +119,14 @@
|
|||||||
Add the <emphasis>root</emphasis> partition. This will fill the disk
|
Add the <emphasis>root</emphasis> partition. This will fill the disk
|
||||||
except for the end part, where the swap will live, and the space left in
|
except for the end part, where the swap will live, and the space left in
|
||||||
front (512MiB) which will be used by the boot partition.
|
front (512MiB) which will be used by the boot partition.
|
||||||
<screen language="commands"># parted /dev/sda -- mkpart primary 512MiB -8GiB</screen>
|
<screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart primary 512MiB -8GiB</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Next, add a <emphasis>swap</emphasis> partition. The size required will
|
Next, add a <emphasis>swap</emphasis> partition. The size required will
|
||||||
vary according to needs, here a 8GiB one is created.
|
vary according to needs, here a 8GiB one is created.
|
||||||
<screen language="commands"># parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
|
<screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
|
||||||
<note>
|
<note>
|
||||||
<para>
|
<para>
|
||||||
The swap partition size rules are no different than for other Linux
|
The swap partition size rules are no different than for other Linux
|
||||||
@ -140,8 +141,8 @@
|
|||||||
the ESP (EFI system partition) as its <emphasis>/boot</emphasis>
|
the ESP (EFI system partition) as its <emphasis>/boot</emphasis>
|
||||||
partition. It uses the initially reserved 512MiB at the start of the
|
partition. It uses the initially reserved 512MiB at the start of the
|
||||||
disk.
|
disk.
|
||||||
<screen language="commands"># parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB
|
<screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB
|
||||||
# parted /dev/sda -- set 3 boot on</screen>
|
<prompt># </prompt>parted /dev/sda -- set 3 boot on</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</orderedlist>
|
</orderedlist>
|
||||||
@ -172,21 +173,21 @@
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Create a <emphasis>MBR</emphasis> partition table.
|
Create a <emphasis>MBR</emphasis> partition table.
|
||||||
<screen language="commands"># parted /dev/sda -- mklabel msdos</screen>
|
<screen language="commands"><prompt># </prompt>parted /dev/sda -- mklabel msdos</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Add the <emphasis>root</emphasis> partition. This will fill the the disk
|
Add the <emphasis>root</emphasis> partition. This will fill the the disk
|
||||||
except for the end part, where the swap will live.
|
except for the end part, where the swap will live.
|
||||||
<screen language="commands"># parted /dev/sda -- mkpart primary 1MiB -8GiB</screen>
|
<screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart primary 1MiB -8GiB</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Finally, add a <emphasis>swap</emphasis> partition. The size required
|
Finally, add a <emphasis>swap</emphasis> partition. The size required
|
||||||
will vary according to needs, here a 8GiB one is created.
|
will vary according to needs, here a 8GiB one is created.
|
||||||
<screen language="commands"># parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
|
<screen language="commands"><prompt># </prompt>parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
|
||||||
<note>
|
<note>
|
||||||
<para>
|
<para>
|
||||||
The swap partition size rules are no different than for other Linux
|
The swap partition size rules are no different than for other Linux
|
||||||
@ -218,7 +219,7 @@
|
|||||||
since this makes the file system configuration independent from device
|
since this makes the file system configuration independent from device
|
||||||
changes. For example:
|
changes. For example:
|
||||||
<screen>
|
<screen>
|
||||||
# mkfs.ext4 -L nixos /dev/sda1</screen>
|
<prompt># </prompt>mkfs.ext4 -L nixos /dev/sda1</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -227,7 +228,7 @@
|
|||||||
recommended to assign a label to the swap partition: <option>-L
|
recommended to assign a label to the swap partition: <option>-L
|
||||||
<replaceable>label</replaceable></option>. For example:
|
<replaceable>label</replaceable></option>. For example:
|
||||||
<screen>
|
<screen>
|
||||||
# mkswap -L swap /dev/sda2</screen>
|
<prompt># </prompt>mkswap -L swap /dev/sda2</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -242,7 +243,7 @@
|
|||||||
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 +274,7 @@
|
|||||||
Mount the target file system on which NixOS should be installed on
|
Mount the target file system on which NixOS should be installed on
|
||||||
<filename>/mnt</filename>, e.g.
|
<filename>/mnt</filename>, e.g.
|
||||||
<screen>
|
<screen>
|
||||||
# mount /dev/disk/by-label/nixos /mnt
|
<prompt># </prompt>mount /dev/disk/by-label/nixos /mnt
|
||||||
</screen>
|
</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -287,8 +288,8 @@
|
|||||||
<para>
|
<para>
|
||||||
Mount the boot file system on <filename>/mnt/boot</filename>, e.g.
|
Mount the boot file system on <filename>/mnt/boot</filename>, e.g.
|
||||||
<screen>
|
<screen>
|
||||||
# mkdir -p /mnt/boot
|
<prompt># </prompt>mkdir -p /mnt/boot
|
||||||
# mount /dev/disk/by-label/boot /mnt/boot
|
<prompt># </prompt>mount /dev/disk/by-label/boot /mnt/boot
|
||||||
</screen>
|
</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -303,7 +304,7 @@
|
|||||||
the build actions that it may spawn) may need quite a bit of RAM,
|
the build actions that it may spawn) may need quite a bit of RAM,
|
||||||
depending on your configuration.
|
depending on your configuration.
|
||||||
<screen>
|
<screen>
|
||||||
# swapon /dev/sda2</screen>
|
<prompt># </prompt>swapon /dev/sda2</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -325,16 +326,16 @@
|
|||||||
The command <command>nixos-generate-config</command> can generate an
|
The command <command>nixos-generate-config</command> can generate an
|
||||||
initial configuration file for you:
|
initial configuration file for you:
|
||||||
<screen>
|
<screen>
|
||||||
# nixos-generate-config --root /mnt</screen>
|
<prompt># </prompt>nixos-generate-config --root /mnt</screen>
|
||||||
You should then edit <filename>/mnt/etc/nixos/configuration.nix</filename>
|
You should then edit <filename>/mnt/etc/nixos/configuration.nix</filename>
|
||||||
to suit your needs:
|
to suit your needs:
|
||||||
<screen>
|
<screen>
|
||||||
# nano /mnt/etc/nixos/configuration.nix
|
<prompt># </prompt>nano /mnt/etc/nixos/configuration.nix
|
||||||
</screen>
|
</screen>
|
||||||
If 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
|
||||||
install other editors — for instance, you can install Emacs by running
|
install other editors — for instance, you can install Emacs by running
|
||||||
<literal>nix-env -i emacs</literal>.
|
<literal>nix-env -f '<nixpkgs>' -iA emacs</literal>.
|
||||||
</para>
|
</para>
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -412,7 +413,7 @@
|
|||||||
<para>
|
<para>
|
||||||
Do the installation:
|
Do the installation:
|
||||||
<screen>
|
<screen>
|
||||||
# nixos-install</screen>
|
<prompt># </prompt>nixos-install</screen>
|
||||||
Cross fingers. If this fails due to a temporary problem (such as a network
|
Cross fingers. If this fails due to a temporary problem (such as a network
|
||||||
issue while downloading binaries from the NixOS binary cache), you can
|
issue while downloading binaries from the NixOS binary cache), you can
|
||||||
just re-run <command>nixos-install</command>. Otherwise, fix your
|
just re-run <command>nixos-install</command>. Otherwise, fix your
|
||||||
@ -439,7 +440,7 @@ Retype new UNIX password: ***</screen>
|
|||||||
<para>
|
<para>
|
||||||
If everything went well:
|
If everything went well:
|
||||||
<screen>
|
<screen>
|
||||||
# reboot</screen>
|
<prompt># </prompt>reboot</screen>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -460,16 +461,16 @@ Retype new UNIX password: ***</screen>
|
|||||||
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 -qaP \*</screen>
|
||||||
shows what packages are available, and
|
shows what packages are available, and
|
||||||
<screen>
|
<screen>
|
||||||
$ nix-env -i w3m</screen>
|
<prompt>$ </prompt>nix-env -f '<nixpkgs>' -iA w3m</screen>
|
||||||
install the <literal>w3m</literal> browser.
|
install the <literal>w3m</literal> browser.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -489,19 +490,19 @@ $ nix-env -i w3m</screen>
|
|||||||
<example xml:id="ex-partition-scheme-MBR">
|
<example xml:id="ex-partition-scheme-MBR">
|
||||||
<title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (MBR)</title>
|
<title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (MBR)</title>
|
||||||
<screen language="commands">
|
<screen language="commands">
|
||||||
# parted /dev/sda -- mklabel msdos
|
<prompt># </prompt>parted /dev/sda -- mklabel msdos
|
||||||
# parted /dev/sda -- mkpart primary 1MiB -8GiB
|
<prompt># </prompt>parted /dev/sda -- mkpart primary 1MiB -8GiB
|
||||||
# parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
|
<prompt># </prompt>parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
|
||||||
</example>
|
</example>
|
||||||
|
|
||||||
<example xml:id="ex-partition-scheme-UEFI">
|
<example xml:id="ex-partition-scheme-UEFI">
|
||||||
<title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (UEFI)</title>
|
<title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (UEFI)</title>
|
||||||
<screen language="commands">
|
<screen language="commands">
|
||||||
# parted /dev/sda -- mklabel gpt
|
<prompt># </prompt>parted /dev/sda -- mklabel gpt
|
||||||
# parted /dev/sda -- mkpart primary 512MiB -8GiB
|
<prompt># </prompt>parted /dev/sda -- mkpart primary 512MiB -8GiB
|
||||||
# parted /dev/sda -- mkpart primary linux-swap -8GiB 100%
|
<prompt># </prompt>parted /dev/sda -- mkpart primary linux-swap -8GiB 100%
|
||||||
# parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB
|
<prompt># </prompt>parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB
|
||||||
# parted /dev/sda -- set 3 boot on</screen>
|
<prompt># </prompt>parted /dev/sda -- set 3 boot on</screen>
|
||||||
</example>
|
</example>
|
||||||
|
|
||||||
<example xml:id="ex-install-sequence">
|
<example xml:id="ex-install-sequence">
|
||||||
@ -509,23 +510,23 @@ $ nix-env -i w3m</screen>
|
|||||||
<para>
|
<para>
|
||||||
With a partitioned disk.
|
With a partitioned disk.
|
||||||
<screen language="commands">
|
<screen language="commands">
|
||||||
# mkfs.ext4 -L nixos /dev/sda1
|
<prompt># </prompt>mkfs.ext4 -L nixos /dev/sda1
|
||||||
# mkswap -L swap /dev/sda2
|
<prompt># </prompt>mkswap -L swap /dev/sda2
|
||||||
# swapon /dev/sda2
|
<prompt># </prompt>swapon /dev/sda2
|
||||||
# mkfs.fat -F 32 -n boot /dev/sda3 # <lineannotation>(for UEFI systems only)</lineannotation>
|
<prompt># </prompt>mkfs.fat -F 32 -n boot /dev/sda3 # <lineannotation>(for UEFI systems only)</lineannotation>
|
||||||
# mount /dev/disk/by-label/nixos /mnt
|
<prompt># </prompt>mount /dev/disk/by-label/nixos /mnt
|
||||||
# mkdir -p /mnt/boot # <lineannotation>(for UEFI systems only)</lineannotation>
|
<prompt># </prompt>mkdir -p /mnt/boot # <lineannotation>(for UEFI systems only)</lineannotation>
|
||||||
# mount /dev/disk/by-label/boot /mnt/boot # <lineannotation>(for UEFI systems only)</lineannotation>
|
<prompt># </prompt>mount /dev/disk/by-label/boot /mnt/boot # <lineannotation>(for UEFI systems only)</lineannotation>
|
||||||
# nixos-generate-config --root /mnt
|
<prompt># </prompt>nixos-generate-config --root /mnt
|
||||||
# nano /mnt/etc/nixos/configuration.nix
|
<prompt># </prompt>nano /mnt/etc/nixos/configuration.nix
|
||||||
# nixos-install
|
<prompt># </prompt>nixos-install
|
||||||
# reboot</screen>
|
<prompt># </prompt>reboot</screen>
|
||||||
</para>
|
</para>
|
||||||
</example>
|
</example>
|
||||||
|
|
||||||
<example xml:id='ex-config'>
|
<example xml:id='ex-config'>
|
||||||
<title>NixOS Configuration</title>
|
<title>NixOS Configuration</title>
|
||||||
<screen>
|
<programlisting>
|
||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, ... }: {
|
||||||
imports = [
|
imports = [
|
||||||
# Include the results of the hardware scan.
|
# Include the results of the hardware scan.
|
||||||
@ -543,7 +544,7 @@ $ nix-env -i w3m</screen>
|
|||||||
# Enable the OpenSSH server.
|
# Enable the OpenSSH server.
|
||||||
services.sshd.enable = true;
|
services.sshd.enable = true;
|
||||||
}
|
}
|
||||||
</screen>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section xml:id="sec-installation-additional-notes">
|
<section xml:id="sec-installation-additional-notes">
|
||||||
|
@ -35,6 +35,12 @@
|
|||||||
<replaceable>shell-command</replaceable>
|
<replaceable>shell-command</replaceable>
|
||||||
</arg>
|
</arg>
|
||||||
|
|
||||||
|
<arg>
|
||||||
|
<arg choice='plain'>
|
||||||
|
<option>--silent</option>
|
||||||
|
</arg>
|
||||||
|
</arg>
|
||||||
|
|
||||||
<arg>
|
<arg>
|
||||||
<arg choice='plain'>
|
<arg choice='plain'>
|
||||||
<option>--help</option>
|
<option>--help</option>
|
||||||
@ -100,6 +106,16 @@
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<option>--silent</option>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Suppresses all output from the activation script of the target system.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<option>--</option>
|
<option>--</option>
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -90,6 +90,35 @@
|
|||||||
<arg>
|
<arg>
|
||||||
<option>--show-trace</option>
|
<option>--show-trace</option>
|
||||||
</arg>
|
</arg>
|
||||||
|
<arg>
|
||||||
|
<option>-I</option>
|
||||||
|
<replaceable>path</replaceable>
|
||||||
|
</arg>
|
||||||
|
<arg>
|
||||||
|
<group choice='req'>
|
||||||
|
<arg choice='plain'><option>--verbose</option></arg>
|
||||||
|
<arg choice='plain'><option>-v</option></arg>
|
||||||
|
</group>
|
||||||
|
</arg>
|
||||||
|
<arg>
|
||||||
|
<group choice='req'>
|
||||||
|
<arg choice='plain'><option>--max-jobs</option></arg>
|
||||||
|
<arg choice='plain'><option>-j</option></arg>
|
||||||
|
</group>
|
||||||
|
<replaceable>number</replaceable>
|
||||||
|
</arg>
|
||||||
|
<arg>
|
||||||
|
<group choice='req'>
|
||||||
|
<arg choice='plain'><option>--keep-failed</option></arg>
|
||||||
|
<arg choice='plain'><option>-K</option></arg>
|
||||||
|
</group>
|
||||||
|
</arg>
|
||||||
|
<arg>
|
||||||
|
<group choice='req'>
|
||||||
|
<arg choice='plain'><option>--keep-going</option></arg>
|
||||||
|
<arg choice='plain'><option>-k</option></arg>
|
||||||
|
</group>
|
||||||
|
</arg>
|
||||||
</cmdsynopsis>
|
</cmdsynopsis>
|
||||||
</refsynopsisdiv>
|
</refsynopsisdiv>
|
||||||
<refsection>
|
<refsection>
|
||||||
@ -101,7 +130,8 @@
|
|||||||
NixOS module, you must run <command>nixos-rebuild</command> to make the
|
NixOS module, you must run <command>nixos-rebuild</command> to make the
|
||||||
changes take effect. It builds the new system in
|
changes take effect. It builds the new system in
|
||||||
<filename>/nix/store</filename>, runs its activation script, and stop and
|
<filename>/nix/store</filename>, runs its activation script, and stop and
|
||||||
(re)starts any system services if needed.
|
(re)starts any system services if needed. Please note that user services need
|
||||||
|
to be started manually as they aren't detected by the activation script at the moment.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
This command has one required argument, which specifies the desired
|
This command has one required argument, which specifies the desired
|
||||||
@ -160,7 +190,7 @@
|
|||||||
the current directory, which points to the output of the top-level
|
the current directory, which points to the output of the top-level
|
||||||
“system” derivation. This is essentially the same as doing
|
“system” derivation. This is essentially the same as doing
|
||||||
<screen>
|
<screen>
|
||||||
$ nix-build /path/to/nixpkgs/nixos -A system
|
<prompt>$ </prompt>nix-build /path/to/nixpkgs/nixos -A system
|
||||||
</screen>
|
</screen>
|
||||||
Note that you do not need to be <literal>root</literal> to run
|
Note that you do not need to be <literal>root</literal> to run
|
||||||
<command>nixos-rebuild build</command>.
|
<command>nixos-rebuild build</command>.
|
||||||
@ -215,8 +245,8 @@ $ nix-build /path/to/nixpkgs/nixos -A system
|
|||||||
at the script that starts the VM. Thus, to test a NixOS configuration in
|
at the script that starts the VM. Thus, to test a NixOS configuration in
|
||||||
a virtual machine, you should do the following:
|
a virtual machine, you should do the following:
|
||||||
<screen>
|
<screen>
|
||||||
$ nixos-rebuild build-vm
|
<prompt>$ </prompt>nixos-rebuild build-vm
|
||||||
$ ./result/bin/run-*-vm
|
<prompt>$ </prompt>./result/bin/run-*-vm
|
||||||
</screen>
|
</screen>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@ -375,7 +405,7 @@ $ ./result/bin/run-*-vm
|
|||||||
<filename>test.nix</filename> without affecting the default system
|
<filename>test.nix</filename> without affecting the default system
|
||||||
profile, you would do:
|
profile, you would do:
|
||||||
<screen>
|
<screen>
|
||||||
$ nixos-rebuild switch -p test -I nixos-config=./test.nix
|
<prompt>$ </prompt>nixos-rebuild switch -p test -I nixos-config=./test.nix
|
||||||
</screen>
|
</screen>
|
||||||
The new configuration will appear in the GRUB 2 submenu “NixOS -
|
The new configuration will appear in the GRUB 2 submenu “NixOS -
|
||||||
Profile 'test'”.
|
Profile 'test'”.
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<author><personname><firstname>Eelco</firstname><surname>Dolstra</surname></personname>
|
<author><personname><firstname>Eelco</firstname><surname>Dolstra</surname></personname>
|
||||||
<contrib>Author</contrib>
|
<contrib>Author</contrib>
|
||||||
</author>
|
</author>
|
||||||
<copyright><year>2007-2018</year><holder>Eelco Dolstra</holder>
|
<copyright><year>2007-2019</year><holder>Eelco Dolstra</holder>
|
||||||
</copyright>
|
</copyright>
|
||||||
</info>
|
</info>
|
||||||
<xi:include href="man-configuration.xml" />
|
<xi:include href="man-configuration.xml" />
|
||||||
|
@ -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
|
||||||
|
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