Compare commits

..

1430 Commits

Author SHA1 Message Date
Robin Gloster
39cd40f7be NixOS 17.09 "Hummingbird" is released on 2017-09-29 2017-09-29 06:06:15 +02:00
Robin Gloster
e73c24084a manual/releasing: update 2017-09-29 06:05:46 +02:00
Robin Gloster
3663760225 tests.hibernate: disable on 32 bit
very flaky due to not having 9pfs mounted after hibernation and
therefore needs nc in memory, which often fails on 32bit
2017-09-29 03:36:18 +02:00
Robin Gloster
309f965c91 tests.cjdns: only on 64-bit + python pkg fixup 2017-09-29 03:33:07 +02:00
WilliButz
4dbde1f10e spotify: 1.0.49.125.g72ee7853-111 -> 1.0.64.401.g9d720389-21
(cherry picked from commit ee6b48cc1f)
2017-09-29 03:24:40 +02:00
Franz Pletz
72550585cd pythonPackages.pyalgotrade: fix typo
(cherry picked from commit e68e149447)
2017-09-29 03:24:34 +02:00
Franz Pletz
b772ca9d21 pythonPackages.pyalgotrade: incompatible with python3
(cherry picked from commit 538b016ae0)
2017-09-29 03:24:26 +02:00
Franz Pletz
4beb7d1196 djbdns: don't try to build on hydra 2017-09-29 02:14:42 +02:00
Franz Pletz
5b09ca07b8 gplates: mark as broken 2017-09-29 02:13:55 +02:00
Franz Pletz
90c8b6eb51 pythonPackages.pyalgotrade: incompatible with python3
(cherry picked from commit 538b016ae0)
2017-09-29 02:11:31 +02:00
Franz Pletz
d9298e3a00 openmodelica: mark as broken, unmaintained 2017-09-29 02:00:12 +02:00
Franz Pletz
1a5acb9883 17.09 release notes: mention KDE upgrades
(cherry picked from commit 5b8a798137)
2017-09-29 01:55:11 +02:00
Franz Pletz
1e2711efd8 17.09 release notes: fix typos & ordering
(cherry picked from commit c22d717c75)
2017-09-29 01:55:11 +02:00
Franz Pletz
dcf1273fe1 firefox-bin: 55.0.3 -> 56.0
(cherry picked from commit 5b71411413)
2017-09-29 01:55:10 +02:00
Franz Pletz
c5c082a111 kicad: don't try to build on hydra
(cherry picked from commit 0dc882e3d4)
2017-09-29 01:55:10 +02:00
Robin Gloster
4b5cc4e808 python packages: mark as broken/disabled 2017-09-29 00:38:34 +02:00
Robin Gloster
ecd2a1a398 python.pkgs.futurist: dontCheck
(cherry picked from commit 169a344ab8)
2017-09-29 00:38:34 +02:00
Franz Pletz
49d34a4965 17.09 release notes: add network interface rename note
Fixes #29197.

(cherry picked from commit 49f175cd0c)
2017-09-29 00:08:21 +02:00
Franz Pletz
273e4afda5 virt-what: init at 1.18
(cherry picked from commit df86f19968)
2017-09-29 00:08:21 +02:00
Robin Gloster
23fdbaa375 treewide: mark a bunch of failing builds as broken 2017-09-28 23:16:18 +02:00
Robin Gloster
be9cd9aef7 qpid-cpp: fix build
(cherry picked from commit f0fa565dfb)
2017-09-28 23:16:14 +02:00
Robin Gloster
f349c2338c 17.09 release notes: update information on gitlab
(cherry picked from commit 83405798e6)
2017-09-28 23:15:58 +02:00
Joerg Thalheim
c12a3e2d47 nullmailer: simplify config generation
(cherry picked from commit 91eb6cf82c)
2017-09-28 22:43:50 +02:00
Marius Bergmann
4a8c74019e nullmailer: add remotesFile option
The current `remotes` option is a string option containing nullmailer remote
definitions. However, those definitions may contain secret credentials and
should therefore not be put world-readable in the nix store.

I added a `remotesFile` option, which allows to specify a path to the remotes
definition file instead. This way, the definitions can be kept outside of the
nix store with more secure file permissions.

(cherry picked from commit e741cc4881)
2017-09-28 22:43:50 +02:00
Marius Bergmann
e9356fd0df nullmailer: use proper description for remotes option
(cherry picked from commit 02e89de71c)
2017-09-28 22:43:50 +02:00
Marius Bergmann
89b75ba92f nullmailer: fix relative -> absolute path in preStart script
(cherry picked from commit f9d64a068b)
2017-09-28 22:43:49 +02:00
Cray Elliott
5b6ec42ca3 nvidia-x11: fix eval error from 4ef82339c9
(cherry picked from commit d4bdf302a3)
2017-09-28 22:43:49 +02:00
volth
75fe95076e collectd: fix darwin build (#29841)
- liboping supported on darwin since #29849
- libmicrohttpd supported on darwin since #29848

(cherry picked from commit e713349922)
2017-09-28 22:06:17 +02:00
Valérian Galliat
e9e037f871 perl-Mail-SPF: fix lib path
(cherry picked from commit f68b1c1a1c)
2017-09-28 21:56:20 +02:00
volth
bd0b1fedc5 mosquitto: fix darwin build (#29851)
(cherry picked from commit 144914121c)
2017-09-28 21:19:13 +02:00
volth
8133dbf9b2 libmicrohttpd: fix darwin build
(cherry picked from commit 547dba10c0)
2017-09-28 21:16:23 +02:00
Robin Gloster
3011e93486 mesos: fix for different protobuf outputs vs master 2017-09-28 21:05:01 +02:00
berdario
1f3087b069 rhino: enable on darwin
(cherry picked from commit d84d8af862)
2017-09-28 20:51:52 +02:00
Robin Gloster
3c31adf461 gitlab: 9.5.5 -> 10.0.2
(cherry picked from commit 19681fbffb8ba92284eada496ce68e500434c0ef)
2017-09-28 20:33:49 +02:00
Herwig Hochleitner
1c914df4c1 chromium: 61.0.3163.79 -> 61.0.3163.100
(cherry picked from commit e78bf2d1e9)
2017-09-28 20:33:49 +02:00
Orivej Desh
ad9c16bad1 gcsfuse: 0.19.0 -> 0.23.0
(cherry picked from commit ad3efa3b54)
2017-09-28 20:33:48 +02:00
Franz Pletz
3ac8986fb6 flightgear: 2016.4.4 -> 2017.3.1 for CVE-2017-13709
(cherry picked from commit dffd77b037)
2017-09-28 19:13:29 +02:00
Robin Gloster
53749d8eb2 openrw: 2016-06-29 -> 2017-09-17
fixes build

(cherry picked from commit 595c8fad83)
2017-09-28 19:00:14 +02:00
Robin Gloster
93a80a4a29 firebirdSuper: pin to gcc5
(cherry picked from commit 8e38de4e0c)
2017-09-28 19:00:14 +02:00
Eelco Dolstra
7d52f83676 Don't generate instance-store AMIs
These are obsolete, use EBS AMIs instead.

(cherry picked from commit 6c72efe0ba)
2017-09-28 19:00:06 +02:00
Mathias Schreck
794aaaa71b nodejs: 8.5.0 -> 8.6.0
(cherry picked from commit f8ffbcb520)
2017-09-28 19:00:06 +02:00
Robin Gloster
7bc3afdf5b amtterm: fix build
(cherry picked from commit 8fb9d37f27)
2017-09-28 18:59:48 +02:00
Yegor Timoshenko
6a0d99f840 fakenes: mark as broken
(cherry picked from commit 9aae605fe7)
2017-09-28 18:59:47 +02:00
Jan Tojnar
373dc7a130 nixos/tests/gnome3-gdm: Increase memory limit
The test was failing on x86_64 prematurely due to memory being exhausted.

See also 3b9f0c6a46

(cherry picked from commit dfdfb97f0f)
2017-09-28 18:59:47 +02:00
Robin Gloster
5faf5c25b6 treewide: mark batch of packages broken for 17.09 2017-09-28 18:59:17 +02:00
Franz Pletz
f8eac437a5 qemu: 2.9.0 -> 2.9.1
Security and bugfix release.

(cherry picked from commit 536ab403d4)
2017-09-28 17:09:04 +02:00
Franz Pletz
16dacbaad0 ettercap: fix CVE-2017-8366 & CVE-2017-6430
(cherry picked from commit b29051b2f5)
2017-09-28 17:09:04 +02:00
Franz Pletz
45a92ea43c fossil: 2.2 -> 2.3
Fixes XSS vulnerability on the /help webpage. No CVE known.

(cherry picked from commit faed026cd4)
2017-09-28 17:09:03 +02:00
Franz Pletz
1c82f5f98e augeas: 1.8.0 -> 1.8.1 for CVE-2017-7555
(cherry picked from commit d2b6e9cdb0)
2017-09-28 17:09:03 +02:00
Franz Pletz
9c5ce7642e postfix: 3.1.3 -> 3.2.3
Possibly fixes security issues. No CVE yet.

(cherry picked from commit 14e53aa0b1)
2017-09-28 17:09:03 +02:00
Franz Pletz
3411c42fca mpg123: 1.25.4 -> 1.25.7 for multiple CVEs
Fixes at least CVE-2017-10683, CVE-2017-11126, CVE-2017-9545,
CVE-2017-12797.

(cherry picked from commit 6c283ae8f3)
2017-09-28 17:09:02 +02:00
Robin Gloster
2231930b7d 17.09 release notes: reformat and generate added services
(cherry picked from commit a19c52a101)
2017-09-28 16:42:32 +02:00
Alastair Pharo
2d521bfb4f purePackages.gen: Don't build on Hydra (#29763)
Until https://github.com/agraef/pure-lang/issues/8 is resolved, this
package can't be compiled.  This patch turns off Hydra builds of this
package as part of #28643 (zero Hydra failures)

(cherry picked from commit 8ac4682e85)
2017-09-28 15:59:50 +02:00
Robin Gloster
06cf955c7a Revert "hsevm: project was renamed to hevm"
This reverts commit 743a1d5609.

needs haskell dependency only on master
2017-09-28 15:31:45 +02:00
Tom Hunger
ec24d2b24b flake8-future-import: Add patch to fix tests.
(cherry picked from commit 09fa385995)
2017-09-28 15:13:14 +02:00
Franz Pletz
9418365655 mongoc: don't use bundled zlib & snappy
(cherry picked from commit bc5ec7b1d4)
2017-09-28 15:12:46 +02:00
Robin Gloster
481fe76e63 guile-gnome: nitpicks fixed
(cherry picked from commit b3dab5b088)
2017-09-28 14:56:28 +02:00
xd1le
3d45679923 gwrap: set version in mkDerivation
(cherry picked from commit d063880986)
2017-09-28 14:56:28 +02:00
xd1le
3d9e5a1bc0 gwrap: switch maintainer from taktoa to vyp
(cherry picked from commit de9c86f81a)
2017-09-28 14:56:28 +02:00
xd1le
37f1f9b40a gwrap: code style nits
(cherry picked from commit 468626ce86)
2017-09-28 14:56:28 +02:00
xd1le
1daada3988 guile-gnome: fix build by building gwrap with guile-2.0
Apparently gwrap will not compile with guile-2.2 [1], even though the
news for version 1.9.15 says it "allows" Guile 2.2 [2]:

> it will _not_ compile using 2.2

Furthermore, it seems like it isn't being developed anymore either [1]:

> Also note that g-wrap itself is not being further developed anymore,
> it is recommended for new projects to use Guile's dynamic FFI.

Also, guile-gnome-2.16.5 is apparently compatible with guile-2.2 [3],
but I'm not sure how they built it with guile-2.2 because gwrap 1.9.15
(latest release) apparently doesn't build with guile-2.2. (And certainly
when I try to build gwrap 1.9.15 with guile-2.2 it doesn't work. Maybe
it can be made to work with certain compile flags, but I haven't pursued
that further due to [1] anyway.) This is why guile-gnome is still on
2.16.4 here. Because, although 2.16.5 can still (apparently) build with
guile-2.0.14, guile_2_0 is only at guile-2.0.13.

So to update guile-gnome to 2.16.5, guile_2_0 would first have to be
updated to 2.0.14.

[1]: http://lists.nongnu.org/archive/html/g-wrap-dev/2016-08/msg00001.html
[2]: http://www.nongnu.org/g-wrap/news.html
[3]: https://www.gnu.org/software/guile-gnome/news.html

(cherry picked from commit f1b7d0a54f)
2017-09-28 14:56:28 +02:00
xd1le
3062d28673 guile-gnome: code style formatting nitpicks
(cherry picked from commit 88ef99e2c3)
2017-09-28 14:56:27 +02:00
xd1le
3deecec6d1 guile-gnome: remove taktoa and amiloradovsky from maintainers and add
vyp

See discussion in [1].

[1]: https://github.com/NixOS/nixpkgs/pull/29732

(cherry picked from commit 16012ff98a)
2017-09-28 14:56:27 +02:00
xd1le
0aa13f1f3c guile-modules: stylistic nix expression changes to modules with sole
maintainer vyp

(cherry picked from commit 3579d7e2b2)
2017-09-28 14:56:27 +02:00
xd1le
8530b3ab73 guile-modules: add vyp as maintainer to unmaintained guile modules
(cherry picked from commit 796b69318f)
2017-09-28 14:56:27 +02:00
xd1le
debc5a9514 guile-modules: rename top level attributes to be consistent
(cherry picked from commit d7d33bd17c)
2017-09-28 14:56:27 +02:00
Franz Pletz
65e93e3f5c pyjwt: 1.4.2 -> 1.5.3 for CVE-2017-11424
(cherry picked from commit 232340f35b)
2017-09-28 14:54:14 +02:00
Franz Pletz
ddcdfea18c kerberos: 1.15 -> 1.15.2 for CVE-2017-11462
(cherry picked from commit 8678f14ac9)
2017-09-28 14:54:14 +02:00
Franz Pletz
d043bbb05e php71: 7.1.8 -> 7.1.9
(cherry picked from commit 09b6f1e605)
2017-09-28 14:54:13 +02:00
Franz Pletz
77d6cd7ec9 php70: 7.0.22 -> 7.0.24
(cherry picked from commit d27ebcbae3)
2017-09-28 14:54:13 +02:00
Franz Pletz
73454e4be2 unrar: 5.5.5 -> 5.5.7 for multiple CVEs
Fixes CVE-2012-6706, CVE-2017-12940, CVE-2017-12941, CVE-2017-12942.

(cherry picked from commit 58f15c1f95)
2017-09-28 14:54:13 +02:00
Franz Pletz
adaceb1331 libraw: 0.18.2 -> 0.18.5 for multiple CVEs
Fixes at least CVE-2017-13735, CVE-2017-14265, CVE-2017-14348.

(cherry picked from commit c7e16f5ce5)
2017-09-28 14:54:12 +02:00
Franz Pletz
e678842b76 oniguruma: 5.9.5 -> 6.6.1 for multiple CVEs
Fixes CVE-2017-9224, CVE-2017-9225, CVE-2017-9226, CVE-2017-9227,
 CVE-2017-9228, CVE-2017-9229.

(cherry picked from commit 41b43b201e)
2017-09-28 14:54:12 +02:00
Franz Pletz
a71be13260 samba3: mark as vulnerable
(cherry picked from commit c02c47d1eb)
2017-09-28 14:53:39 +02:00
Franz Pletz
dc9fe44312 samba: 4.6.7 -> 4.6.8 for multiple CVEs
Fixes CVE-2017-12150, CVE-2017-12151, CVE-2017-12163.

(cherry picked from commit 15a6c2c4fc)
2017-09-28 14:53:39 +02:00
Franz Pletz
c680d7fce3 libtiff: use patches from newer debian revision
(cherry picked from commit 8a5b8aeaf5)
2017-09-28 14:53:39 +02:00
Franz Pletz
d9b4e70c5f mongoc: 1.7.0 -> 1.8.0
(cherry picked from commit cc258a671a)
2017-09-28 14:53:38 +02:00
Franz Pletz
9e2e252e57 libbson: 1.6.1 -> 1.8.0 for CVE-2017-14227
(cherry picked from commit 6dd6f10615)
2017-09-28 14:53:38 +02:00
Robin Gloster
9766dde7b1 Revert "kubernetes: fix hashes after dockerTools change"
This reverts commit 9ba024f6d8.

(cherry picked from commit 4aeb38e5b9)
2017-09-28 14:12:11 +02:00
Robin Gloster
00dc83bfa0 dockerTools: fix hash to accomodate the pullImage revert
(cherry picked from commit 20677fca59)
2017-09-28 14:12:10 +02:00
Robin Gloster
289358e277 Revert "dockerTools.pullImage: use skopeo to pull the image"
This reverts commit 01174c5f4d.

See https://github.com/NixOS/nixpkgs/pull/29302#issuecomment-332809092
for more information. This broke image format compatibility and
therefore amongst others mesos.

(cherry picked from commit 5c6dc717a6)
2017-09-28 14:12:10 +02:00
Robin Gloster
8f923bfa48 mesos: use static protobuf libraries
(cherry picked from commit c2ce38473b)
2017-09-28 13:21:28 +02:00
Robin Gloster
5d7edb8e81 protobuf: build static libraries
mesos needs them

(cherry picked from commit 49e9a26e77)
2017-09-28 13:21:28 +02:00
Robin Gloster
38fd0a2f23 Revert "dockerTools.buildImage: Switch to the format image generated by Skopeo"
This reverts commit 35f205a4b6.

This does not use a standard format and by that breaks mesos

(cherry picked from commit dabb296c76)
2017-09-28 13:21:28 +02:00
lassulus
604aed80a4 electron-cash: init at 2.9.3
(cherry picked from commit 64d63907d8)
2017-09-28 13:20:58 +02:00
Yann Hodique
e3b405b521 hugo: 0.27.1 -> 0.29
(cherry picked from commit b3433aba3a)
2017-09-28 13:20:43 +02:00
Mikael Brockman
743a1d5609 hsevm: project was renamed to hevm
This also upgrades the hsevm package from v0.6.4 to v0.8.5.

The project `dapp` which depends on hsevm was also updated to use the
new name, so I have also upgraded that package from version v0.5.3 to
v0.5.7.

I also added a `dontCheck` to a Hackage dependency because its test
suite depends on Git and runs a bunch of Git repository manipulations.

(cherry picked from commit 74edd2c5db)
2017-09-28 13:20:23 +02:00
amorsillo
c92059e422 mongodb-tools: 3.0.12 -> 3.5.13 (#29884)
* Upgrade mongodb-tools to 3.5.13 with ssl

* mongodb-tools: fix go references

(cherry picked from commit b46b0468ca)
2017-09-28 13:19:10 +02:00
Orivej Desh
55b305a94d go: fix tests and impurity
(cherry picked from commit 589574e5c9)
2017-09-28 13:18:29 +02:00
Daiderd Jordan
f1955bf826 go: fix darwin build
(cherry picked from commit 57ef1a3564)
2017-09-28 13:18:25 +02:00
Charles Strahan
bf5c474db9 go: init 1.9 (and set as default)
(cherry picked from commit 3189b01647)
2017-09-28 13:18:15 +02:00
Orivej Desh
a2cf76a122 envoy: mark as broken
building
Extracting Bazel installation...
Loading:
Analyzing: target //source/exe:envoy-static
ERROR: java.io.IOException: Could not read the crosstool configuration file 'CROSSTOOL file /tmp/nix-build-envoy-1.3.0.drv-0/envoy-v1.3.0-src/.home/.cache/bazel/_bazel_nixbld1/cbe181aaebf3d7253cbcf6057028e514/external/local_config_cc/CROSSTOOL', because of a parser error (945:1: Expected identifier. Found '%')
INFO: Elapsed time: 3.065s
FAILED: Build did NOT complete successfully
builder for ‘/nix/store/09wh9hd81529pgr3ddwfw68higfzkfgr-envoy-1.3.0.drv’ failed with exit code 2
error: build of ‘/nix/store/09wh9hd81529pgr3ddwfw68higfzkfgr-envoy-1.3.0.drv’ failed

(cherry picked from commit 49a060ea1f)
2017-09-28 13:17:44 +02:00
Orivej Desh
2f2d1af65b docker: fix docker_17_06 build
Broken by #29843

(cherry picked from commit f1ffca9ac6)
2017-09-28 13:15:38 +02:00
Cray Elliott
01a800595b nvidia-x11: 384.69 -> 384.90
(cherry picked from commit 56d1a14419)
2017-09-28 13:13:59 +02:00
Joachim Fasting
0aa0af6d8b tinycc: 0.9.27pre-20170911 -> 0.9.27pre-20170924
Improves `long` handling

(cherry picked from commit 35c15d4a61)
2017-09-28 13:13:27 +02:00
Nikolay Amiantov
5fc4188780 octoprint-plugins.m33-fio: 1.20 -> 1.21
(cherry picked from commit c766092193)
2017-09-28 13:13:21 +02:00
Franz Pletz
9a10cd16dc network-interfaces: device routes for default gateway
Iff interface is set, it makes sense to add device route by default.

(cherry picked from commit d0435ba032)
2017-09-28 13:13:04 +02:00
Joerg Thalheim
a1f349b401 bitcoin-abc: build against qt5
(cherry picked from commit 589cff44bc)
2017-09-28 13:12:38 +02:00
lassulus
2d4e9aca23 bitcoin-abc: init at 0.15.0
(cherry picked from commit d82578addb)
2017-09-28 13:12:33 +02:00
Ryan Mulligan
0554733f57 nixos/monit: install monit as system package, use default config file path
(cherry picked from commit c6f513b56a)
2017-09-28 13:12:21 +02:00
Silvan Mosberger
890ab83a8b xwinwrap: init at 4
(cherry picked from commit 5a9e28190c)
2017-09-28 13:12:03 +02:00
Robin Gloster
938fcba622 mesos test: fix python handling
Still does not succeed but advances further

(cherry picked from commit 30d09f717a)
(cherry picked from commit d05b0b6b70)
2017-09-28 13:11:51 +02:00
Samuel Leathers
3544c4f6da mesos: 1.1.1 -> 1.4.0
(cherry picked from commit 80021094b7)
2017-09-28 13:11:35 +02:00
Pascal Bach
1e137755f4 ipxe: 20160831 -> 20170922
(cherry picked from commit ece9245a4d)
2017-09-28 13:11:04 +02:00
Yegor Timoshenko
faf6166b4f snes9x-gtk: 1.53 -> 1.54.1
(cherry picked from commit 22b0c966aa)
2017-09-28 13:10:57 +02:00
Robin Gloster
179b357a66 freebayes: clean up build
(cherry picked from commit 7cbf3a27de)
2017-09-28 13:10:37 +02:00
Samuel Leathers
9bed9124e3 freebayes: 1.1.0 -> 2017-08-23
(cherry picked from commit a3e2ecd7f7)
2017-09-28 13:10:30 +02:00
José Romildo Malaquias
a7ca4e2909 lxqt.screengrab: 2017-02-18 -> 1.97 (#29835)
(cherry picked from commit 7d883056a0)
2017-09-28 13:10:23 +02:00
Tim Steinbach
34af32d860 i3-gaps: 4.14 -> 4.14.1
(cherry picked from commit bee055fa96)
2017-09-28 13:10:10 +02:00
Tim Steinbach
e0ee3d01e6 i3: 4.14 -> 4.14.1
(cherry picked from commit fc7f4f6fc3)
2017-09-28 13:10:05 +02:00
volth
8473519bf3 liboping: 1.9.0 -> 1.10.0
(cherry picked from commit ad38b7c9ae)
2017-09-28 13:10:00 +02:00
PanAeon
fd1b89a142 buildGo19Package: init (#29470)
(cherry picked from commit b39c42d5d0)
2017-09-28 13:06:56 +02:00
Samuel Leathers
f2d5a450d7 opencascade: remove 6.5.5 and 6.6.0
(cherry picked from commit 672a402122)
2017-09-28 13:06:01 +02:00
Nikolay Amiantov
7ae513564a mupdf: cleanup dependencies
This slims down build inputs (notably not requiring mesa anymore).

(cherry picked from commit 47f099777c)
2017-09-28 13:05:24 +02:00
Nikolay Amiantov
29810aea4d glfw3: cleanup dependencies, propagate mesa_noglu
(cherry picked from commit 98ef62e51a)
2017-09-28 13:05:09 +02:00
Nikolay Amiantov
d6a9d78d53 glfw2: don't use mesa
(cherry picked from commit d68e9b4938)
2017-09-28 13:05:04 +02:00
Franz Pletz
dc4750b3c3 weechat: 1.9 -> 1.9.1 for CVE-2017-14727
https://lists.nongnu.org/archive/html/weechat-security/2017-09/msg00000.html
(cherry picked from commit 15189140dd)
2017-09-28 13:02:33 +02:00
Franz Pletz
94fd15e1dc openvpn: 2.4.3 -> 2.4.4 for CVE-2017-12166
https://community.openvpn.net/openvpn/wiki/CVE-2017-12166
(cherry picked from commit 8e4586d077)
2017-09-28 12:28:02 +02:00
Sukant Hajra
3b83be98be hdf5: remove references to stdenv.cc
The build provides as text a summary of the build, including the
absolute path of the compiler used for compilation.  Unfortunately, this
pulls in stdenv.cc as a transitive closure.

So this change just calls remove-references-to as a postInstall step for
the one stdenv.cc dependency.

See #29889 for details.

(cherry picked from commit 405c7f9e437a89bbebc3e2663e8fcc74e69783d6)
2017-09-28 10:42:19 +02:00
Bjørn Forsman
772d5c03c0 nixos/iso-image.nix: add top-level /version.txt file
This makes it easy to identify which NixOS version is written to an USB
stick without actually booting it.

(cherry picked from commit 3c6eb3a247)
2017-09-28 08:11:30 +02:00
Robin Gloster
64a73dfc08 elasticsearch: use jre_headless
(cherry picked from commit c57e5d1aa9)
2017-09-28 04:17:20 +02:00
volth
c868d427cb nixos/tinc: add "restartTriggers" back
Add "restartTriggers" back to restart the Tinc daemon when its peer is removed.
Reverted #27660
2017-09-28 00:58:15 +01:00
Niklas Hambüchen
e9bbe85605 consul service: Restart on failure.
Consul is a service you typically want to have running all the time;
it's not supposed to quit by itself.

(cherry picked from commit f4c53f1940)

Closes #29861.
2017-09-28 00:44:55 +02:00
makefu
e1bcebfd2a udpt: 2016-02-20 -> 2017-09-27
(cherry picked from commit 9636e75464)
2017-09-28 00:44:55 +02:00
Nick Novitski
e5ebf5cdc9 youtube-dl: 2017.09.15 -> 2017.09.24 (#29866)
(cherry picked from commit ff15b852c1)
2017-09-28 00:44:55 +02:00
Yann Hodique
31bc7c0075 dgraph: 0.8.1 -> 0.8.2
(cherry picked from commit d02fac35a5)
2017-09-28 00:44:54 +02:00
Yann Hodique
bf87b8091d lftp: 4.8.0 -> 4.8.2
(cherry picked from commit ae259ff83b)
2017-09-28 00:44:54 +02:00
Rostislav Beneš
33494a75d7 nixos/xserver,gdm: let GDM handle X server verbosity.
(cherry picked from commit 0cad98dde1)
2017-09-28 00:44:54 +02:00
Rostislav Beneš
4500e11fda nixos/gdm,nvidia: new options to enable GDM on Wayland and disabling it for nvidia drivers.
(cherry picked from commit 4ef82339c9)
2017-09-28 00:44:53 +02:00
Rostislav Beneš
9e280b0c16 nixos/nvidia: populating /dev with nvidia devices at boot
(cherry picked from commit 4f91397c98)
2017-09-28 00:44:53 +02:00
Joachim Fasting
46c4c62373 nixos/release-notes: notable changes to the dnscrypt-proxy service
(cherry picked from commit a06f839439)
2017-09-28 00:44:53 +02:00
Franz Pletz
f76d2aa6e3 kbd service: systemd-vconsole-setup is triggered by udev
cc #22470

(cherry picked from commit 0ee866ed72)
2017-09-28 00:44:53 +02:00
Franz Pletz
2ae16ef5d7 wpa_supplicant service: restart instead of stop & start
We now wait for dhcpcd to acquire a lease but dhcpcd is restarted on
system activation. As wpa_supplicant is stopped while dhcpcd is
restarting a significant delay is introduced on systems with wireless
network connections only. This changes the wpa_supplicant service to
also be restarted together with dhcpcd in case both services were
changed.

(cherry picked from commit 725dee203a)
2017-09-28 00:44:52 +02:00
Alexander Ried
48465ae259 Revert "kbd service: use /dev/tty1 for systemd-vconsole-setup"
This reverts commit 0c81594a29.

It's no longer needed since systemd-vconsole-setup enumerates all ttys
until it finds a suitable one since systemd v234.

(cherry picked from commit 4a2442032e)
2017-09-28 00:44:52 +02:00
Marius Bergmann
b9935c7c5d znc: fix openFirewall option
The current version is broken:
- there's no `openFirewall` attribute directly in the `cfg` set
- the `port` option is an attribute of the `confOptions` set

I used the proper attribute for the firewall port and moved the `openFirewall`
option directly up to the `services.znc` set, as it's rather a general option
for the whole service than a znc-specific option (which are located inside the
`confOptions` set).
2017-09-27 23:09:56 +01:00
Joerg Thalheim
24f0aecab7 nixos: skip restarting systemd-logind to not break x11
(cherry picked from commit 23f398012b)

fixes #29579
2017-09-27 22:29:04 +01:00
Robin Gloster
455ed26f20 17.09 release notes: redis cluster mass-restart needed
see #29516

(cherry picked from commit 34750bb51c)
2017-09-27 22:15:28 +02:00
Franz Pletz
6f938a1115 postgresql: default to 9.6 like in the nixos module
(cherry picked from commit 259df64ef5)
2017-09-27 22:06:41 +02:00
Robin Gloster
81a229e0f9 Revert "postgresql: Add dev output"
Firstly this creates a cycle in 9.6 .out <-> .dev after fixing the PGXS
path.

Secondly this breaks extension handling and the pg_config as it
resolves a lot of paths relatively resulting in the following bogus
output:

BINDIR = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/bin
DOCDIR = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/share/doc
HTMLDIR = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/share/doc
INCLUDEDIR = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/include
PKGINCLUDEDIR = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/include
INCLUDEDIR-SERVER = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/include/server
LIBDIR = /nix/store/85s9m7hpfzsl93wcb5gr6ii2km9mpx3z-postgresql-9.5.9-lib/lib
PKGLIBDIR = /nix/store/85s9m7hpfzsl93wcb5gr6ii2km9mpx3z-postgresql-9.5.9-lib/lib
LOCALEDIR = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/share/locale
MANDIR = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/share/man
SHAREDIR = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/share
SYSCONFDIR = /etc/postgresql
PGXS = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/nix/store/irqqq4g173g9xrk1mh12kxv0s1d8dbyh-postgresql-9.5.9' '--with-openssl' '--with-libxml' '--sysconfdir=/etc' '--libdir=/nix/store/85s9m7hpfzsl93wcb5gr6ii2km9mpx3z-postgresql-9.5.9-lib/lib' '--with-ossp-uuid' 'CC=gcc'
CC = gcc
CPPFLAGS = -D_GNU_SOURCE -I/nix/store/z6r0j2b4bcdfw3pck2x6ay0vvx0qzb92-libxml2-2.9.5-dev/include/libxml2
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2
CFLAGS_SL = -fPIC
LDFLAGS = -L../../../src/common -L/nix/store/ighspl5sa3qi1zy7nkih0c9p73xjfqa6-libxml2-2.9.5/lib -Wl,--as-needed -Wl,-rpath,'/nix/store/85s9m7hpfzsl93wcb5gr6ii2km9mpx3z-postgresql-9.5.9-lib/lib',--enable-new-dtags
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgcommon -lpgport -lxml2 -lssl -lcrypto -lz -lreadline -lrt -lcrypt -ldl -lm
VERSION = PostgreSQL 9.5.9

This can probably only be properly fixed by rewriting pg_config in large
parts as it does not in any way respect splitting the postgres tree and
assumes it can simply resolve paths relative to its location. This does
not even handle symlinks:

$ result-dev/bin/pg_config
BINDIR = /home/robin/dev/nixpkgs-upstream/result-dev/bin
DOCDIR = /home/robin/dev/nixpkgs-upstream/result-dev/share/doc
HTMLDIR = /home/robin/dev/nixpkgs-upstream/result-dev/share/doc
INCLUDEDIR = /home/robin/dev/nixpkgs-upstream/result-dev/include
PKGINCLUDEDIR = /home/robin/dev/nixpkgs-upstream/result-dev/include
INCLUDEDIR-SERVER = /home/robin/dev/nixpkgs-upstream/result-dev/include/server
LIBDIR = /nix/store/85s9m7hpfzsl93wcb5gr6ii2km9mpx3z-postgresql-9.5.9-lib/lib
PKGLIBDIR = /nix/store/85s9m7hpfzsl93wcb5gr6ii2km9mpx3z-postgresql-9.5.9-lib/lib
LOCALEDIR = /home/robin/dev/nixpkgs-upstream/result-dev/share/locale
MANDIR = /home/robin/dev/nixpkgs-upstream/result-dev/share/man
SHAREDIR = /home/robin/dev/nixpkgs-upstream/result-dev/share
SYSCONFDIR = /etc/postgresql
PGXS = /nix/store/csiq6zkn2c994kkdjln461jvgbka4yb1-postgresql-9.5.9-dev/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/nix/store/irqqq4g173g9xrk1mh12kxv0s1d8dbyh-postgresql-9.5.9' '--with-openssl' '--with-libxml' '--sysconfdir=/etc' '--libdir=/nix/store/85s9m7hpfzsl93wcb5gr6ii2km9mpx3z-postgresql-9.5.9-lib/lib' '--with-ossp-uuid' 'CC=gcc'
CC = gcc
CPPFLAGS = -D_GNU_SOURCE -I/nix/store/z6r0j2b4bcdfw3pck2x6ay0vvx0qzb92-libxml2-2.9.5-dev/include/libxml2
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2
CFLAGS_SL = -fPIC
LDFLAGS = -L../../../src/common -L/nix/store/ighspl5sa3qi1zy7nkih0c9p73xjfqa6-libxml2-2.9.5/lib -Wl,--as-needed -Wl,-rpath,'/nix/store/85s9m7hpfzsl93wcb5gr6ii2km9mpx3z-postgresql-9.5.9-lib/lib',--enable-new-dtags
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgcommon -lpgport -lxml2 -lssl -lcrypto -lz -lreadline -lrt -lcrypt -ldl -lm
VERSION = PostgreSQL 9.5.9

cc @edolstra

Revert "bacula: fix after postgresql output splitting"

This reverts commit 13c9cbacdd.

Revert "postgresql: fix pgxs dir in pg_config"

This reverts commit 21998d597b.

Revert "rubyGems.pg: fix postgresql path"

This reverts commit e253ae7d3a.

Revert "kea: fix path to pg_config"

This reverts commit 086c636eb7.

Revert "php: fix build wrt. new postgres.dev build output"

This reverts commit 2f23a83920.

Revert "gdal: fix path to pg_config"

This reverts commit 032c50d45b.

Revert "postgresql: Add dev output"

This reverts commit b0280f598e.

(cherry picked from commit 6b05651c20)
2017-09-27 21:59:45 +02:00
Robin Gloster
ef52776f70 bluez: remove unneeded dependencies and fix test bins
(cherry picked from commit 50fb62994b)
2017-09-27 21:27:00 +02:00
Lancelot SIX
394aa5af2b ibus-engines.hangul: add python dependency
(cherry picked from commit f39ead7c74)
2017-09-27 20:48:54 +02:00
Vladimír Čunát
9fbad9bf16 manuals: document removal of newStdcpp from steam
/cc #29180.
(cherry-picked from 4013b381b3 and f2955e4fde)
2017-09-27 20:35:16 +02:00
Lancelot SIX
86e35b7b9b ibus-anthy: fix pygobject3 dependency
(cherry picked from commit be697dca4c)
2017-09-27 20:31:56 +02:00
Michael Weiss
c35be631b4 wlc: Downgrade back to 0.0.9
Unfortunately wlc 0.0.10 seems to be the cause for segfaults on sway,
way-cooler and orbment.

This will also build wlc with all optional packages (i.e. zlib,
valgrind and doxygen).

(cherry picked from commit 2d640b9d6e)
2017-09-27 20:25:27 +02:00
Stefan Siegl
53068f41ad kea: fix path to pg_config
refs commit b0280f598e

(cherry picked from commit 086c636eb7)
2017-09-27 20:20:31 +02:00
Robin Gloster
cdf4d69b1c bacula: fix after postgresql output splitting
(cherry picked from commit 13c9cbacdd)
2017-09-27 20:10:06 +02:00
Robin Gloster
ba86884c61 Revert "ibus: Move ibus-setup to .dev"
This reverts commit af44f99dca.

ibus-with-plugins was broken by this.

cc @edolstra

(cherry picked from commit e0771a2410)
2017-09-27 19:42:53 +02:00
Robin Gloster
645c591949 postgresql: fix pgxs dir in pg_config
(cherry picked from commit 21998d597b)
2017-09-27 19:20:44 +02:00
Tim Steinbach
165bc51f41 linux: 4.13.3 -> 4.13.4
(cherry picked from commit ab3ff4af9f)
2017-09-27 13:08:51 -04:00
Tim Steinbach
67402a34d3 linux: 4.9.51 -> 4.9.52
(cherry picked from commit 2ca84cfa29)
2017-09-27 13:08:50 -04:00
Tim Steinbach
65a718c4d4 linux: Remove 4.12 (EOL)
(cherry picked from commit 964672dde5)
2017-09-27 13:08:50 -04:00
Rodney Lorrimar
86528f928a mysqlBackup service: let it work with default settings
* Grants enough privileges to the configured user so that it can run
  mysqldump.

* Adds a nixos test.

* Use systemd timers instead of a cronjob (by @fadenb).

* Creates a new user for backups by default, instead of using mysql
  user.

* Ensures that backup user has write permissions on backup location.

* Write backup to a temporary file before renaming so that a failed
  backup won't overwrite the previous backup, and so that the backup
  location will never contain a partial backup.

Breaking changes:

 * Renamed period to calendar to reflect the change in how to
   configure the backup time.

 * A failed backup will no longer result in cron sending an e-mail --
   users' monitoring systems must be updated.

Resolves #24728

(cherry picked from commit 56eba66f77)
2017-09-27 18:46:21 +02:00
Rodney Lorrimar
d2cb5cd0cd nixos/release-notes: MySQL backup service breaking changes
(cherry picked from commit 34eefdfb9d)
2017-09-27 18:46:02 +02:00
Joerg Thalheim
e8278f584f nixos/tinc: remove useless script argument
ExecStart is sufficient and more transparent to the user.

(cherry picked from commit 75ba415fbc)
2017-09-27 18:21:27 +02:00
Joerg Thalheim
3615636fa0 nixos/tinc: do not add Device= by default
tinc can figure this out based on DeviceType.
I also got `/dev/net/tun FD in bad state` after a particular upgrade.

(cherry picked from commit ad8cb0917f)
2017-09-27 18:21:22 +02:00
Joerg Thalheim
b7ebe55ea2 metasploit: use makeWrapper instead
(cherry picked from commit b775b2cd4f)
2017-09-27 18:21:14 +02:00
Eelco Dolstra
861987c70e nix-daemon: Bump the default number of build users
While it's annoying to pollute the user database with a lot of nixbld*
users, 10 users is really too low for many modern systems.

(cherry picked from commit 79d547b4bb)
2017-09-27 18:20:55 +02:00
Tristan Helmich
dc4c56ab7f emby: 3.2.30.0 -> 3.2.32.0
(cherry picked from commit 71cc54300e)
2017-09-27 18:20:38 +02:00
Robin Gloster
e6e7c0fe5a libnfs: fix eval
(cherry picked from commit c0235ef611)
2017-09-27 18:20:27 +02:00
Peter Simons
930759d024 libnfs: fix broken meta.license attribute
A license called "bsd" does not exist. Ping @peterhoeg.

(cherry picked from commit 4398872523)
2017-09-27 18:20:19 +02:00
makefu
9fc37e24dd gdal: fix path to pg_config
(cherry picked from commit 032c50d45b)
2017-09-27 17:41:51 +02:00
Tim Steinbach
57e1610901 docker: add 17.09.0-ce
(cherry picked from commit 825e417457)
2017-09-27 11:36:00 -04:00
Tim Steinbach
8f09851a98 openjdk: Fix build
(cherry picked from commit 24bed29809)
2017-09-27 11:33:50 -04:00
Matt McHenry
20aa2dc228 openjdk9: init at 9.0.0+180
* openjdk 8: code cleanup

as recommended by 0xABAB in #27194

* openjdk 9: init at ea build 176

this starts with copy of 8.nix and just updates hashes and replaces 8
with 9.  it also tweaks the version handling because we aren't dealing
with an update version yet.

* openjdk 9: adapt patches from openjdk 8

fix-java-home: surrounding code changed slightly

swing-use-gtk-jdk9: location of the file being patched changed due to
modularization

read-truststore-from-env: the code that handles the trustStore was
refactored out into a helper class in upstream commit
http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/904861872c0e

adlc_updater: this isn't present anymore

* openjdk 9: make two more warnings-as-errors non-fatal

this requires that we switch to configureFlagsArray to deal with
whitespace

the errors being suppressed are show below:

* For target support_native_java.desktop_libawt_xawt_awt_Robot.o:
/tmp/nix-build-openjdk-9ea-b176.drv-0/jdk9-jdk-9+176/jdk/src/java.desktop/unix/native/libawt_xawt/awt/awt_Robot.c: In function 'isXCompositeDisplay':
/tmp/nix-build-openjdk-9ea-b176.drv-0/jdk9-jdk-9+176/jdk/src/java.desktop/unix/native/libawt_xawt/awt/awt_Robot.c:152:50: error: embedded '\0' in format
[-Werror=format-contains-nul]
     snprintf(NET_WM_CM_Sn, sizeof(NET_WM_CM_Sn), "_NET_WM_CM_S%d\0", screenNumber);
                                                  ^
/tmp/nix-build-openjdk-9ea-b176.drv-0/jdk9-jdk-9+176/jdk/src/java.desktop/unix/native/libawt_xawt/awt/awt_Robot.c:152:50: error: embedded '\0' in format
[-Werror=format-contains-nul]
cc1: all warnings being treated as errors
* For target support_native_jdk.hotspot.agent_libsa_ps_core.o:
/tmp/nix-build-openjdk-9ea-b176.drv-0/jdk9-jdk-9+176/hotspot/src/jdk.hotspot.agent/linux/native/libsaproc/ps_core.c: In function 'read_exec_segments':
/tmp/nix-build-openjdk-9ea-b176.drv-0/jdk9-jdk-9+176/hotspot/src/jdk.hotspot.agent/linux/native/libsaproc/ps_core.c:834:7: error: ignoring return value of 'pread', declared
with attribute warn_unused_result [-Werror=unused-result]
       pread(ph->core->exec_fd, interp_name, exec_php->p_filesz, exec_php->p_offset);
       ^
cc1: all warnings being treated as errors

* openjdk 9: ea+176 -> ea+180

* openjdk 9: TODO disable infinality patches, at least to start

the code being patched here seems to have changed substantially or
perhaps even disappeared altogether.  need to investigate whether
these patches are still relevant.

* openjdk 9: update installPhase for modularization

* separate jdk and jre images are now present under build/*/images

* samples have been removed (JEP 298)
  -- TODO that JEP says demos will be gone too, but it seems some are still present?

* bina directory is no longer present

* openjdk 9: TODO handle *.pf files or purge this code completely

* openjdk 9: update minimal jre components

in particular, the name of the config option for headless has changed,
per https://bugs.openjdk.java.net/browse/JDK-8163102

* TODO about echo -n vs printWords, #27427

(cherry picked from commit 02fe1207ab)
2017-09-27 11:33:49 -04:00
Robin Gloster
4d59b04bd9 rubyGems.pg: fix postgresql path
(cherry picked from commit e253ae7d3a)
2017-09-27 17:26:10 +02:00
Robin Gloster
794a22bfed urllib3: revert multiple outputs
only moved propagated build inputs to dev which broke packages depending
on it e.g. glusterfs

cc @edolstra

(cherry picked from commit d0d992a9a0)
2017-09-27 17:11:21 +02:00
WilliButz
9da34752a7 splUnstable: fix hash
(cherry picked from commit 43b7e69d13)
2017-09-27 15:35:17 +02:00
makefu
cbe02b52ba pyramid: fix propagated builds
hupper and plaster need to be propagated to dependent packages

(cherry picked from commit 3abee357e6)
2017-09-27 15:35:16 +02:00
Tristan Helmich
15c5cfd600 pythonPackages.phonenumbers: 8.8.1 -> 8.8.2
(cherry picked from commit b015f62965)
2017-09-27 15:35:16 +02:00
Rodney Lorrimar
9dd4263464 bower2nix: 3.1.1 -> 3.2.0
(cherry picked from commit 3d4ed0181e)
2017-09-27 15:35:16 +02:00
Peter Hoeg
f79ef8d63d cwiid: boy scout cleanups
(cherry picked from commit eba5dd84ef)
2017-09-27 15:35:16 +02:00
Peter Hoeg
c6ca4c3ce9 libnfs: init at 2.0.0
(cherry picked from commit 97e586b812)
2017-09-27 15:35:16 +02:00
Peter Simons
11d0942d66 nixos(spamassassin): fix trailing whitespace
(cherry picked from commit 99e24590cb)
2017-09-27 14:51:42 +02:00
Peter Simons
a30571c1cf nixos(spamassassin): provide /etc/spamassassin to fix sa-learn et al
Spamassassin expects its system-wide configuration at /etc/spamassassin, and
some user tools (like sa-learn) need to read those configuration files.
Therefore, we provide a symlink from /etc/spamassassin to the appropriate Nix
store path to make sure those tools work without the user having to pass an
elaborate --siteconfig path that, potentially, changes every time the system
updates.

Fixes https://github.com/NixOS/nixpkgs/issues/29414.

(cherry picked from commit bfab392e6e)
2017-09-27 14:51:42 +02:00
Florian Jacob
d30e143c05 mariadb: 10.1.25 -> 10.1.26
(cherry picked from commit e911e39c26)
2017-09-27 07:30:34 -04:00
Stefan Siegl
9b4b940fb6 php: fix build wrt. new postgres.dev build output
Refs commit b0280f598e

(cherry picked from commit 2f23a83920)
2017-09-27 12:33:27 +02:00
Eelco Dolstra
ea6947d6d2 Add even more dev outputs
(cherry picked from commit 28299f669a)
2017-09-27 12:33:12 +02:00
Eelco Dolstra
a97a8771bb network-manager-applet: Don't depend on webkitgtk by default
This added significant bloat to non-Gnome systems.

(cherry picked from commit 65b04b8bef)
2017-09-27 12:33:07 +02:00
Eelco Dolstra
25b76f8c4f ibus: Move ibus-setup to .dev
This removes python3.buildEnv from the runtime closure.

(cherry picked from commit af44f99dca)
2017-09-27 12:33:02 +02:00
Eelco Dolstra
5d348cf891 firefox: Remove about:buildconfig
Storing the build configuration caused Firefox to retain a dependency
on gcc, glibc.dev and icu4c.dev.

This reduces the size of the firefox closure from 587 to 415 MiB.

(cherry picked from commit c03326445b)
2017-09-27 12:32:58 +02:00
Eelco Dolstra
0208f54229 Add more dev outputs
(cherry picked from commit 8ccce8de89)
2017-09-27 12:32:51 +02:00
Eelco Dolstra
71e6e0c1d1 emacs: Clear the environment while dumping
This reduces the closure size of Emacs from 575 to 279 MiB. Dumping
Emacs had a chance of leaking parts of the environment (such as $PATH)
into the dumped executable. This hopefully fixes it. (It's a bit hard
to tell since the effect is not deterministic.)

(cherry picked from commit cf599d3f99)
2017-09-27 12:32:33 +02:00
Joerg Thalheim
cba8066e9f libproxy: 0.4.13 -> 0.4.15
reduces closure size from ~200mb to ~100mb

fixes #29775

(cherry picked from commit 30c380556c)
2017-09-27 12:32:28 +02:00
Eelco Dolstra
bf92abb6ab Add some dev outputs
(cherry picked from commit 60aaced9a0)
2017-09-27 12:32:23 +02:00
Eelco Dolstra
d2bfefe9bf postgresql: Add dev output
This reduces the closure size of postgresql.out by 72 MiB.

(cherry picked from commit b0280f598e)
2017-09-27 12:32:18 +02:00
Eelco Dolstra
f50da7bbca kdoctools: Move bin stuff to the "out" output
In particular, this moves share/kf5 to the "out" output. This prevents
kdelibs4support from pulling kdoctools.dev into its closure (via
share/kf5/kdoctools/customization/dtd/kdex.dtd, which references
${kdoctools}/share/kf5).

This reduces the closure size of kdelibs4support by 156 MiB.

(cherry picked from commit b790a31204)
2017-09-27 12:32:13 +02:00
Robin Gloster
b06336377b gdal: fix backport 2017-09-27 00:59:35 +02:00
Dario Bertini
f9db9c8ff1 sshuttle: fix tests for darwin
(cherry picked from commit 7055b4aa45)
2017-09-26 23:47:36 +02:00
Tuomas Tynkkynen
3dcd59f164 caffe: Make 'bin' the first output
So ${caffe}/bin/foo always works in scripts.

(cherry picked from commit 9824ca6975)
2017-09-27 00:41:13 +03:00
Tuomas Tynkkynen
9a3658d6f2 imlib2: Make 'bin' the first output
(cherry picked from commit 3ee733aafb)
2017-09-27 00:20:03 +03:00
John Ericson
21d9031802 ghc prebuilt: Fix indentation
Doing this separately so the other commits are more readable

(cherry picked from commit 2d52156793)
2017-09-26 17:16:07 -04:00
John Ericson
ab9218d01c ghc prebuilt: Clean up syntax, without changes hashes
If I'm going to make a bunch more of these, I think it's a good idea to
make them more uniform first.

(cherry picked from commit a8ef3f6742)
2017-09-26 17:16:07 -04:00
John Ericson
d626fc602d ghc prebuilt: Don't hardcode the version in a few more places
This removes noise in the diff, making creating new versions easier. No
hashes should be changed.

(cherry picked from commit 17de435533)
2017-09-26 17:16:07 -04:00
John Ericson
95f22fbfc1 ghc-6.10.2-binary: Remove dead Darwin code
This looks like a WIP attempt from 2008

(cherry picked from commit d72647bc05)
2017-09-26 17:16:07 -04:00
Vaibhav Sagar
189ec715ac vim: 8.0.0442 -> 8.0.1150
(cherry picked from commit 6498ac609a)
2017-09-26 23:13:35 +02:00
Robin Gloster
0405eaf127 17.09 release notes: fix typo
(cherry picked from commit 6ab200b066)
2017-09-26 23:12:53 +02:00
Yegor Timoshenko
fdf61a4269 epsxe: fix install, 32-bit executable uses mixed case
(cherry picked from commit c3e6e9b765)
2017-09-26 23:12:45 +02:00
Yegor Timoshenko
2de0784f22 epsxe: init at 2.0.5 (#29810)
* epsxe: init at 2.0.5

* epsxe: nitpicks

(cherry picked from commit 0ddca0715a)
2017-09-26 23:10:38 +02:00
Yegor Timoshenko
b2fd3ebb2f mba6x_bl: update to 2016-12-08
(cherry picked from commit fbc8fa8b42)
2017-09-26 23:10:15 +02:00
Frederik Rietdijk
8e3dc8999d wlc: fix homepage / eval
(cherry picked from commit a33402b890)
2017-09-26 23:08:46 +02:00
Yegor Timoshenko
145eeb6809 sct: fix segfault when DISPLAY is empty, clean up derivation
(cherry picked from commit 44beb56540)
2017-09-26 23:08:28 +02:00
Michael Weiss
87557cbab6 sway: Fix the build
While the last wlc upgrade (05d79c03ec)
makes it possible to build sway 0.14.0 it also breaks the current build
of sway 0.13.0.

Unfortunately sway 0.14.0 segfaults on launch and I couldn't fix it yet
(there are multiple upstream issues as well). I'll overwrite the wlc
version for sway in order to have a usable version in nixpkgs for the
meantime.

(cherry picked from commit 676f5cb02c)
2017-09-26 23:08:13 +02:00
Michael Weiss
6b6989e552 wlc: 0.0.9 -> 0.0.10
Initially the build was failing but it seems like
4b85b23534 already fixed it.

(cherry picked from commit 05d79c03ec)
2017-09-26 23:07:20 +02:00
Michael Weiss
1ee3559c4c wlc: Refactor the code
The code was a bit messy (unused parameters, etc.) and caused some
warnings/errors which could potentially cause some problems.

(cherry picked from commit 4b85b23534)
2017-09-26 23:07:12 +02:00
taku0
d2f824f5b9 oraclejdk: add version 9
Oracle JDK 9 does not seems to contain jre directory, so oraclejre9
package now uses a dedicated archive file.

There is no 32-bit version nor arm version (yet). If Oracle releases
them, I will update the package.

(cherry picked from commit 692fcd9f53)
2017-09-26 23:06:53 +02:00
Tim Steinbach
276cddd260 skopeo: 0.1.22 -> 0.1.23
(cherry picked from commit 4ec02cc332)
2017-09-26 23:06:01 +02:00
Yegor Timoshenko
e96e0a21c6 libmirage: add to top level
(cherry picked from commit 8815b81926)
2017-09-26 23:05:15 +02:00
Tristan Helmich
aaed97d6c5 oath-toolkit: 2.6.1 -> 2.6.2
(cherry picked from commit 62597385c3)
2017-09-26 23:05:02 +02:00
Yegor Timoshenko
a9f7a2e44b clojure: correct license (three-clause BSD -> EPLv1.0)
This is retroactive. See: https://clojure.org/community/license

(cherry picked from commit 2f3af251be)
2017-09-26 23:04:43 +02:00
Tim Steinbach
03ff20e53b kotlin: 1.1.4-2 -> 1.1.50
(cherry picked from commit bec98b765d)
2017-09-26 23:03:50 +02:00
berdario
17c4f379df rhino: remove dependency on GCJ (#29759)
(cherry picked from commit 472bb9681d)
2017-09-26 23:02:30 +02:00
Peter Hoeg
df997bd717 uchiwa: 0.25.3 -> 0.26.0
(cherry picked from commit dd6591c506)
2017-09-26 23:02:16 +02:00
makefu
9e8f046940 gdal: fix path to pg_config
(cherry picked from commit 032c50d45b)
2017-09-26 23:01:54 +02:00
Joerg Thalheim
d1b41428a8 celery: fix eventlet tests
(cherry picked from commit 1b628fb023)
2017-09-26 23:01:46 +02:00
makefu
27c46a7cd9 pyramid: 1.7 -> 1.9.1
(cherry picked from commit dcc36a4a04)
2017-09-26 23:01:39 +02:00
makefu
7f532c37e4 celery: disable eventlet tests
eventlet cannot be imported in any tests because it fails to be imported
inside the sandboxed environment

(cherry picked from commit d00ba8091f)
2017-09-26 23:01:32 +02:00
makefu
a3969e2f0d oslo-config,sqlalchemy: add makefu to list of maintainers
(cherry picked from commit d7c26f24b9)
2017-09-26 23:01:26 +02:00
makefu
743e2cc3b4 oslo-service: 0.10.0 -> 1.26.0, with dependencies
oslo-service:
  needs to disable tests due to network errors when importing eventlet
  for tests ( socket.getprotobyname('tcp') -> no such protocol )
eventlet: 0.17.4 -> 0.20.0
  cannot update to 0.21.0 due to version pinning ( < 0.21.0 ) of oslo-service
monotonic: 0.4 -> 1.3
oslo-serialization: 1.10.0 -> 2.20.0
oslo-utils: 2.6.0 -> 3.29.0
oslo-concurrency: 2.7.0 -> 3.22.0
oslo-log: 1.12.1 -> 3.31.0
oslo-context: 0.7.0 -> 2.18.1
routes: 1.12.3 -> 2.4.1
webob: 1.4.1 -> 1.7.3

when updating i rewrote the package to use fetchPypi for making future
updating easier

(cherry picked from commit 78621e384c)
2017-09-26 23:01:20 +02:00
makefu
4b26ccd475 sqlalchemy-migrate: re-enable tests
(cherry picked from commit 42edc6f35e)
2017-09-26 22:54:29 +02:00
makefu
7af7e873b3 keystoneauth1: enable tests
requires a later version of betamax, bumped to 0.8.0

(cherry picked from commit 97644a9f4f)
2017-09-26 22:53:13 +02:00
makefu
e6fff35eb7 oslo-config: 4.11.0 -> 4.12.0, fix build
also updated the following dependencies:
keystoneauth1: 3.1.0 -> 3.2.0
  disabled tests which require oslo-config, oslo-test or requests-kerberos
oslo-i18n: 2.7.0 -> 3.18.0
oslotest: 1.12.0 -> 2.18.0
os-client-config: 1.8.1 -> 1.28.0
  needed to disable testing due to circular dependency with oslotest
mox3: 0.11.0 -> 0.23.0
  disable tests for py36 due to upstream bug
debtcollector: 0.9.0 -> 1.17.0
  tests enabled

extra packages:
requestsexceptions: init at 1.3.0

(cherry picked from commit 7251699081)
2017-09-26 22:52:57 +02:00
Joerg Thalheim
16ad9ed52f {zfsUnstable,splUnstable}: 2017-09-12 -> 2017-09-26
(cherry picked from commit 8fcf95f102)
2017-09-26 22:52:48 +02:00
Jörg Thalheim
b97384ac14 nixos/zfs: import encrypted datasets by default for zfsUnstable
(cherry picked from commit 9164517c18)
2017-09-26 22:52:27 +02:00
Samuel Dionne-Riel
b968e8af94 mediawiki: 1.27.3 -> 1.29.1
(cherry picked from commit 0b1c73f4da)
2017-09-26 22:49:33 +02:00
Lancelot SIX
877c957ebc pythonPackages.channels: 1.1.6 -> 1.1.8 (#29772)
(cherry picked from commit f1a2b8627e)
2017-09-26 22:49:24 +02:00
Dan Peebles
a9d62189e7 nixos-install: re-enable --chroot option
I forgot to implement it the first time around. Whoops!

(cherry picked from commit 186c120bed)
2017-09-26 21:57:01 +02:00
Jan Solanti
c7842d024d nvidia-x11: generate nvidia_icd.json from template
(cherry picked from commit 4ec3d311cb)
2017-09-26 21:54:41 +02:00
Jörg Thalheim
9726f8edf8 dino: 2017-06-21 -> 2017-09-20
(cherry picked from commit f27feb5481)
2017-09-26 19:48:58 +01:00
Franz Pletz
abaa8ce24c libressl_2_6: 2.6.0 -> 2.6.2
(cherry picked from commit 4d7d5c8c34)
2017-09-26 17:29:46 +02:00
Franz Pletz
defa5d664a imagemagick7: 7.0.6-4 -> 7.0.7-4 for multiple CVEs
Too many CVEs to list because they are not tracked upstream by release
versions.

(cherry picked from commit de4abf7054)
2017-09-26 17:29:46 +02:00
Franz Pletz
614c302796 imagemagick: 6.9.9-7 -> 6.9.9-15 for multiple CVEs
Too many CVEs to list because they are not tracked upstream by release
versions.

(cherry picked from commit 2d854c4c92)
2017-09-26 17:29:46 +02:00
Tim Steinbach
a193400216 oh-my-zsh: 2017-06-22 -> 2017-09-24
(cherry picked from commit 1c3ba450acf6739429ea24af742b5ad55479a38e)
2017-09-26 08:59:24 -04:00
Tim Steinbach
735329ab9e git: 2.14.1 -> 2.14.2
(cherry picked from commit 5a2a35aef3)
2017-09-26 08:50:22 -04:00
Rodney Lorrimar
10bb7fddb9 gnuradio: fix build for gcc6 and newer boost (#29740)
(cherry picked from commit 3766637bdd)
2017-09-26 03:31:14 +02:00
Joerg Thalheim
461fab1376 sysdig: 0.17.0 -> 0.18.0
(cherry picked from commit b064137b7b)
2017-09-26 03:30:53 +02:00
Robin Gloster
0c9f99e01b 17.09 release notes: add module changes
(cherry picked from commit 3414265efa)
2017-09-26 03:29:03 +02:00
Robin Gloster
e6f075b07e termite: fix eval 2017-09-26 02:20:58 +02:00
Jan Tojnar
edf780b54f gnome3.at-spi2-core: fix service not found error
The service was not registered as a systemd service resulting in errors
in the system journal every time a GNOME application was launched.

See: #16327
2017-09-26 00:40:57 +01:00
Daiderd Jordan
e19b5ef047 reattach-to-user-namespace: 2.5 -> 2.6
(cherry picked from commit b196241f42)
2017-09-26 01:03:07 +02:00
Thomas Tuegel
e5a864fa6d hplip: remove 3.15.9
hplip-3.15.9 has not been buildable in some time due to changes in CUPS.

(cherry picked from commit 4c09acad5c)
2017-09-26 00:34:06 +02:00
Tim Steinbach
a6e79559fa linux: 4.14-rc1 -> 4.14-rc2
(cherry picked from commit b13a6d5720)
2017-09-26 00:32:15 +02:00
Tim Steinbach
65494c8b28 linux: 4.13-rc7 -> 4.14-rc1
(cherry picked from commit c8f43edaf5)
2017-09-26 00:32:07 +02:00
Jörg Thalheim
c6f102bbce docs/python: more infos regarding failing tests
(cherry picked from commit 9d9a28f014)
2017-09-26 00:31:00 +02:00
Elis Hirwing
8b7634aa43 testssl.sh: init at 2.9.5-1
Add testssl.sh which is a nice utility for testing TLS/SSL
capabilities of servers without having to use any kind of
web-service. It's very useful for testing setups of services before
deployment and such.

(cherry picked from commit 02d9d40d99)
2017-09-26 00:27:13 +02:00
Joachim Fasting
629b3f3835 mg: 20161005 -> 20170828
(cherry picked from commit 4429559aa1)
2017-09-26 00:26:11 +02:00
Kamil Chmielewski
4b9aae63fb ponyc: 0.19.1 -> 0.19.2
https://github.com/ponylang/ponyc/issues/2248
(cherry picked from commit 5835b1a156)
2017-09-26 00:25:48 +02:00
Antoine Eiche
572a0e1b12 dockerTools.examples.nix: set NIX_PAGER=cat environment variable
(cherry picked from commit ff4d7f0fd2)
2017-09-26 00:25:24 +02:00
Antoine Eiche
1231f40731 dockerTools.buildImageWithNixDb: populate the Nix Db of the image Nix store
Currently, the contents closure is copied to the layer but there is no
nix database initialization. If pkgs.nix is added in the contents,
nix-store doesn't work because there is no nix database.

From the contents of the layer, this commit generates and loads the
database in the nix store of the container. This only works if there
is no parent layer that already have a nix store (to support several
nix layers, we would have to merge nix databases of parent layers).

We also add an example to play with the nix store inside the
container. Note it seems `more` is a missing dependency of the nix
package!

(cherry picked from commit df589a438e)
2017-09-26 00:25:24 +02:00
Peter Hoeg
83dcd01968 open-vm-tools: 10.1.0 -> 10.1.10
(cherry picked from commit 4f25b7b6b3)
2017-09-26 00:19:38 +02:00
ibor
fcfd281892 js_of_ocaml: fix jbuild (explicitly call bash) (#29749)
* js_of_ocaml: fix jbuild (explicitly call bash)

* js_of_ocaml: Use patchShebangs instead of manual patch

(cherry picked from commit 00422b2279)
2017-09-26 00:19:24 +02:00
Aneesh Agrawal
fbe380a5d2 audit: Remove openldap dependency
The openldap dependency is only used for the audisp z/OS plugin.
This is not useful on Linux, so always disable this.

(cherry picked from commit 49fc06ed0a)
2017-09-26 00:16:48 +02:00
Vladimír Čunát
b5ec075d9e perl-XML-LibXML: update and avoid failing tests
The test failures were caused by #29431: libxml-2.9.4 -> 2.9.5

(cherry picked from commit c88fa59559)
2017-09-26 00:16:27 +02:00
Orivej Desh
e9c0481881 libxml2: 2.9.4 -> 2.9.5
(cherry picked from commit 604ca93182)
2017-09-26 00:14:24 +02:00
Richard Ipsum
434a0e7e7a luxio: Add maintainer
(cherry picked from commit 3d278be9ae)
2017-09-26 00:11:15 +02:00
Joerg Thalheim
3f1ef725c3 luxio: fix package build
(cherry picked from commit dd6691aa05)
2017-09-26 00:11:03 +02:00
Richard Ipsum
88683846c6 luxio: init at 13
(cherry picked from commit d42c062821)
2017-09-26 00:10:54 +02:00
David Izquierdo
2310682c56 latte dock: 0.6.0 -> 0.7.1
(cherry picked from commit 4105d02f70)
2017-09-26 00:10:34 +02:00
David Izquierdo
ce56b5a1db tdesktop: 1.1.22 -> 1.1.23
(cherry picked from commit f79c0b8627)
2017-09-26 00:10:25 +02:00
Joerg Thalheim
3e1940744a python.pkgs.simanneal: enable tests
(cherry picked from commit dd99592952)
2017-09-26 00:10:17 +02:00
Dmitry Kalinkin
1a747a017c pythonPackages.simanneal: init at 0.4.1
(cherry picked from commit de1480e079)
2017-09-26 00:10:12 +02:00
Joerg Thalheim
cd54c92211 nixos/tinydns: default data to empty string
(not strictly required to start the service)

(cherry picked from commit 735b41c34f)
2017-09-26 00:09:24 +02:00
Matt McHenry
80e8a10c47 nixos/dnscache: add module
with improvements suggested by Jörg Thalheim <joerg@thalheim.io>

(cherry picked from commit 1b7e5eaa79)
2017-09-26 00:09:08 +02:00
Matt McHenry
e92e498ad5 nixos/tinydns: add module
with improvements suggested by Jörg Thalheim <joerg@thalheim.io>

(cherry picked from commit ab851b63da)
2017-09-26 00:08:51 +02:00
Matt McHenry
7eeda5754e djbdns: init at 1.05
(cherry picked from commit a80ef5b88a)
2017-09-26 00:08:23 +02:00
Francois-Rene Rideau
bc149176ac nfsd: add extraNfsdConfig
(cherry picked from commit 62983f5cae)
2017-09-26 00:03:09 +02:00
gnidorah
5d00e52de8 termite: fix fonts in wayland
(cherry picked from commit 42dcf914d1)
2017-09-26 00:01:22 +02:00
Kranium Gikos Mendoza
2bbc6958da gpxsee: 4.9 -> 4.14
(cherry picked from commit 12b1852301)
2017-09-26 00:00:56 +02:00
Maximilian Bosch
42349942f6 vimPlugins.xptemplate: init at 2017-04-18
(cherry picked from commit 0a5d4ca5a8)
2017-09-26 00:00:32 +02:00
Matthias Beyer
9c7c88d044 mutt: 1.9.0 -> 1.9.1
(cherry picked from commit 3491f6a873)
2017-09-26 00:00:17 +02:00
Kranium Gikos Mendoza
8a3d960bd6 pick: 1.7.0 -> 1.9.0
(cherry picked from commit f43baf94a3)
2017-09-25 23:59:34 +02:00
Itai Zukerman
9c6cabe758 plex: 1.8.4 -> 1.9.1
(cherry picked from commit e24dc4d7ba)
2017-09-25 23:59:19 +02:00
Francois-Rene Rideau
1ff620567b gerbil: 0.12-DEV -> 0.12-DEV-777-gd855915
(cherry picked from commit fc82bad4a9)
2017-09-25 23:59:02 +02:00
Francois-Rene Rideau
53779dd249 gambit: 4.8.8-f3ffeb6 -> 4.8.8-300db59
(cherry picked from commit 34739b3cc6)
2017-09-25 23:57:59 +02:00
Neil Mayhew
21934a1a9b spideroak: 6.0.1 -> 6.1.9
(cherry picked from commit 9d01b511b5)
2017-09-25 23:57:31 +02:00
Bjørn Forsman
9da04799cc vimPlugins.robotframework-vim: init at 2017-04-14
(cherry picked from commit d757d8142e)
2017-09-25 22:41:13 +02:00
Pavel Goran
a35620e5f2 nixos/gitolite: add enableGitAnnex option
(cherry picked from commit cee657f9a3)
2017-09-25 22:12:59 +02:00
Peter Hoeg
f5af8a757a pywbem: hash keeps changing - why? Embed the patch
(cherry picked from commit 23ef826139)
2017-09-25 21:32:59 +08:00
Silvan Mosberger
6a1978f7b4 nixos/radicale: fix default version (#29743)
(cherry picked from commit a8c97ad23e)
2017-09-25 14:12:43 +02:00
Joachim Fasting
66384f9e52 tor-browser-bundle-bin: optionally disable multiprocess support
Multiprocess tabs always crash, as first reported by the issue mentioned
below.  It is now consistently reproducible both on NixOS and non-NixOS
for me, so I've decided to add a toggle to conveniently disable
multiprocess support as a work-around.

Closes https://github.com/NixOS/nixpkgs/issues/27759 but does
not really fix the underlying problem ...

(cherry picked from commit 69e3817eb6)
2017-09-25 14:12:41 +02:00
Jan Malakhovski
7c80f69bb6 linuxPackages: properly propagate features and extraConfig
`kernel.override { features = ... }` didn't work before, now it works as
expected.

(cherry picked from commit 8525b78d05)
2017-09-25 14:12:40 +02:00
Franz Pletz
cc7ed96716 nixos/network-interfaces: ensure slave interfaces are up
Fixes #28620.

(cherry picked from commit 263185aa68)
2017-09-25 14:07:25 +02:00
Franz Pletz
35cbbeb146 nixos/network-interfaces: cannot delay device units
Systemd is complaining that it can't delay the startup of device units.
We have a before dependency on the respective device unit for every
netdev service, which doesn't make any sense because we create the
actual interface in this service.

(cherry picked from commit 13a110e696)
2017-09-25 14:07:24 +02:00
Franz Pletz
2d178d8793 nixos/network-interfaces: IPs must always be set
Previously, depending on the environment and the type of interface that
was created, the configured IPs of an interface wouldn't be applied on a
nixos-rebuild switch. It works after a reboot.

This patch ensures that the network-addresses service is started
either via the network-link service or if the networking target is
activated (i.e. on system activation).

Fixes #28474 #16230.

(cherry picked from commit 3a670daa98)
2017-09-25 14:07:24 +02:00
Kai Harries
d9dabb0e66 libvirt: Add qemu to runtime closure
The program `qemu-img` is needed during creation of virtual machines
with qcow2 images. Otherwise creation of such VMs (e.g. with
virt-manager) are failing.

(cherry picked from commit 32e4e2c47b)
2017-09-25 07:52:45 +02:00
Peter Hoeg
e075c65956 pywbem: changed hash
(cherry picked from commit 0353ddc5c5)
2017-09-25 09:51:50 +08:00
Peter Hoeg
6540bc5b02 pywbem: make the tests pass again with patch from upstream
(cherry picked from commit 4c496c0232)
2017-09-25 09:44:20 +08:00
Jean-François Roche
773e5ddef1 Update kbfs: 20170429.44efa06 -> 20170922.f76290 (#29716)
kbfs was not working with the lastest keybase update
(ef3cb5cc47).

We should enforce update of keybase/keybase-ui and kbfs (like done here:
f74a1e6bcb)
all together to avoid API problems.

(cherry picked from commit b50ae94ed3)
2017-09-24 18:09:10 +01:00
zimbatm
58b7abc2fc keybase: add darwin support
Fixes the cyclic dependency issue as described in #18131.

(cherry picked from commit eaa0e19a34)
2017-09-24 17:53:54 +01:00
Kranium Gikos
ad0f639d43 influxdb sevice: make postStart test work with non-localhost configurations (#29734)
make postStart test work with non-localhost configurations

(cherry picked from commit 412fa16bff)
2017-09-24 15:38:16 +01:00
Robert Scott
40b0653486 python.pkgs.pyscss: 1.3.4 -> 1.3.5
this also:
 - enables tests (properly)
 - fixes build on python 3.6

(cherry picked from commit a358c43975)
2017-09-24 15:11:09 +01:00
Joerg Thalheim
550a7c9fbb termite: use wrapGAppsHook
(cherry picked from commit 4d4c32504a)
2017-09-24 14:50:02 +01:00
Robin Gloster
49be64017f kupfer: fixup merge
This had not been backported and does not exist in 17.09 (cc @zimbatm)
2017-09-24 13:57:09 +02:00
Robin Gloster
34cc80018d kube-dns: fixup merge
Should've been removed here, is built with kubernetes.
2017-09-24 13:54:06 +02:00
Jan Tojnar
bc28875f8c gnome3: only maintain single GNOME 3 package set (#29397)
* gnome3: only maintain single GNOME 3 package set

GNOME 3 was split into 3.10 and 3.12 in #2694. Unfortunately, we barely have the resources
to update a single version of GNOME. Maintaining multiple versions just does not make sense.
Additionally, it makes viewing history using most Git tools bothersome.

This commit renames `pkgs/desktops/gnome-3/3.24` to `pkgs/desktops/gnome-3`, removes
the config variable for choosing packageset (`environment.gnome3.packageSet`), updates
the hint in maintainer script, and removes the `gnome3_24` derivation from `all-packages.nix`.

Closes: #29329

* maintainers/scripts/gnome: Use fixed GNOME 3 directory

Since we now allow only a single GNOME 3 package set, specifying
the working directory is not necessary.

This commit sets the directory to `pkgs/desktops/gnome-3`.

(cherry picked from commit 69698ec11c)
2017-09-24 12:45:23 +01:00
zimbatm
0e60332559 kubernetes-helm: 2.5.1 -> 2.6.1
(cherry picked from commit f069ee7af6)

Conflicts:
	pkgs/top-level/all-packages.nix
2017-09-24 12:40:07 +01:00
Stefan Siegl
c05c38296c owncloud-client: 2.3.2 -> 2.3.3
(cherry picked from commit 9fc87cc376)
2017-09-24 13:24:51 +02:00
Robin Gloster
1c641c46d6 systemd-tmpfiles: fix docs
We have been doing this since 4e4161c212

(cherry picked from commit 43404d9acf)
2017-09-24 13:22:15 +02:00
Peter Jones
f4653e55b2 playbar2: init at 2.5
(cherry picked from commit f1355079b9)
2017-09-24 13:06:21 +02:00
Michal Rus
7efb9fa5f9 xpad: init at 5.0.0 (#29720)
* xpad: init at 5.0.0

* xpad: wrapGAppsHook is required

(cherry picked from commit 0e71e03583)
2017-09-24 13:05:47 +02:00
Robin Gloster
24a8c6d5a4 kubernetes: fix bad merge 2017-09-24 13:05:04 +02:00
Robin Gloster
cc668d5dea kubernetes: fix hashes after dockerTools change
(cherry picked from commit 9ba024f6d8)
2017-09-24 13:05:04 +02:00
Matej Cotman
0a029ead07 kubernetes: fix tests
(cherry picked from commit 6ef8cad2a7)
2017-09-24 13:05:04 +02:00
Matej Cotman
65120b99e2 kubernetes: build e2e.test
(cherry picked from commit 1febe07de7)
2017-09-24 13:05:03 +02:00
Matej Cotman
0c7ff1e626 kubernetes: fix dns addon hashes, fix clusterDns, enable proxy on master
(cherry picked from commit 6ea272ced4)
2017-09-24 13:05:03 +02:00
Jaka Hudoklin
d4c9d7ed0e kubernetes module: refactor module system, kube-dns as module
(cherry picked from commit ddf5de5de0)
2017-09-24 13:05:03 +02:00
Jaka Hudoklin
30b99fed97 kubernetes module: seedDockerImages option for seeding docker images built with nix
(cherry picked from commit 2beadcf181)
2017-09-24 13:05:03 +02:00
Jaka Hudoklin
bbefc9eb13 kubernetes module: webhook authorization for kubelet
(cherry picked from commit 9d97c92d68)
2017-09-24 13:05:03 +02:00
Jaka Hudoklin
b913ef9358 kubernetes module: fix documentation links
(cherry picked from commit 7c893623d4)
2017-09-24 13:05:03 +02:00
Jaka Hudoklin
e901b8c15e kubernetes module: add featureGates option
(cherry picked from commit 74f99525e0)
2017-09-24 13:05:03 +02:00
Jaka Hudoklin
bffd00bb38 kuberentes: expose kube-addons script
(cherry picked from commit f10138bd32)
2017-09-24 13:05:03 +02:00
Jaka Hudoklin
db96b84055 kubernetes: 1.6.4 -> 1.7.1
(cherry picked from commit bff428616a)
2017-09-24 13:05:02 +02:00
Jaka Hudoklin
0c543a52ff cni: 0.3.0 -> 0.5.2
(cherry picked from commit ff6413850b)
2017-09-24 13:05:02 +02:00
Jaka Hudoklin
f8971667d1 kubernetes module: kubelet, add socat to path for kubectl portforward
(cherry picked from commit 55dbbfd899)
2017-09-24 13:05:02 +02:00
Jaka Hudoklin
613cc03b62 kubernetes module: enable leader elect by default
(cherry picked from commit 8e48fff268)
2017-09-24 13:05:02 +02:00
Jaka Hudoklin
0603b6c6f1 kubernetes module: add storage and tolerations addmission controllers
(cherry picked from commit 856ca7347f)
2017-09-24 13:05:02 +02:00
Jaka Hudoklin
77f08ce157 kubernetes module: fix cidr ranges
(cherry picked from commit d842d539d9)
2017-09-24 13:05:02 +02:00
Jaka Hudoklin
cec76e3b8a kubernetes module: default auth mode to only RBAC
(cherry picked from commit b25d155976)
2017-09-24 13:05:02 +02:00
Jaka Hudoklin
c75998c202 kubernetes module: add support for common CA file
(cherry picked from commit c2622910ab)
2017-09-24 13:05:01 +02:00
Jaka Hudoklin
99af0a66e5 kubernetes module: per service kubeconfig support
(cherry picked from commit c96ca5f3bd)
2017-09-24 13:05:01 +02:00
Jaka Hudoklin
11bbff3883 kubernetes module: flannel support, minor fixes
- add flannel support
- remove deprecated authorizationRBACSuperAdmin option
- rename from deprecated poratalNet to serviceClusterIpRange
- add nodeIp option for kubelet
- kubelet, add br_netfilter to kernelModules
- enable firewall by default
- enable dns by default on node and on master
- disable iptables for docker by default on nodes
- dns, restart on failure
- update tests

and other minor changes

(cherry picked from commit 7dfeac88ac)
2017-09-24 13:05:01 +02:00
Matej Cotman
29617dfc97 kubernetes: fix minor issues
(cherry picked from commit 8e14e978c8)
2017-09-24 13:05:01 +02:00
Matej Cotman
4b93a73f32 kubernetes: add tests
(cherry picked from commit 7f9d1a7aaf)
2017-09-24 13:05:01 +02:00
Matej Cotman
05dc4e6bf6 kubernetes: update service
(cherry picked from commit ed322f4235)
2017-09-24 13:05:01 +02:00
Matej Cotman
dc596ef734 kube-dns: 1.14.1
(cherry picked from commit 7332179285)
2017-09-24 13:05:01 +02:00
Jaka Hudoklin
51f0056f85 kubernetes module: authorization improvements
(cherry picked from commit 90d5468ad6)
2017-09-24 13:05:01 +02:00
Florian Jacob
4fad98082e tinc: 1.0.31 -> 1.0.32
(cherry picked from commit 8704e82eba)
2017-09-24 13:05:00 +02:00
Robin Gloster
5f41bf128c maintainers/hydra-eval-failures: fix with new lib
lib/maintainers.nix now is a function

(cherry picked from commit 1554282290)
2017-09-24 13:05:00 +02:00
Matt McHenry
3b03b528ec minecraft-server: 1.12 -> 1.12.2
(cherry picked from commit aedfc0d8d3)
2017-09-24 13:05:00 +02:00
Pascal Bach
b662fcd5f4 riot-web: 0.12.5 -> 0.12.6
(cherry picked from commit 8a249c51b6)
2017-09-24 13:05:00 +02:00
danbst
a164105477 salt: 2016.11.5 -> 2017.7.1, patch fix
The libcrypto patch didn't work well with `salt-ssh` (that code failed on
remote machines), so let's make Nix-based library lookup as fallback.

https://github.com/saltstack/salt/issues/43350
(cherry picked from commit a5b8c0c2de)
2017-09-24 13:05:00 +02:00
Joachim Fasting
a769d908fc encfs: 1.9.1 -> 1.9.2
See https://github.com/vgough/encfs/releases/tag/v1.9.2

(cherry picked from commit c951a0ad07)
2017-09-24 13:05:00 +02:00
Joachim Fasting
f439ce677e openafs-client: 1.6.21 -> 1.6.21.1
Per https://www.openafs.org/dl/openafs/1.6.21.1/RELNOTES-1.6.21.1
this release adds support for linux 4.13

Related to https://github.com/NixOS/nixpkgs/issues/28643

(cherry picked from commit cb94feb2d1)
2017-09-24 13:05:00 +02:00
Michael Weiss
af367259ab sshfs: 3.2.0 -> 3.3.0
(cherry picked from commit 699231ed78)
2017-09-24 13:05:00 +02:00
Joachim Fasting
be26a1c06f apulse: 0.1.6 -> 0.1.10
(cherry picked from commit c97e5f2670)
2017-09-24 13:04:59 +02:00
Michael Weiss
d020624a16 fuse3: 3.1.1 -> 3.2.0
(cherry picked from commit 1a9467edd5)
2017-09-24 13:04:59 +02:00
mimadrid
f09a976729 axel: 2.13.1 -> 2.14.1
(cherry picked from commit 9c46ef3d9a)
2017-09-24 13:04:59 +02:00
mimadrid
b971730f58 entr: 3.7 -> 3.8
(cherry picked from commit 47974b2670)
2017-09-24 13:04:59 +02:00
mimadrid
2da5e958dd filezilla: 3.27.0.1 -> 3.27.1
(cherry picked from commit ece5c1482b)
2017-09-24 13:04:59 +02:00
mimadrid
47edac9039 libfilezilla: 0.10.0 -> 0.10.1
(cherry picked from commit 00bdbcd99e)
2017-09-24 13:04:59 +02:00
mimadrid
5a9ac44972 gsource: 0.44 -> 0.47
(cherry picked from commit 80a14bf5fb)
2017-09-24 13:04:59 +02:00
Robert Scott
93441f1a69 python.pkgs.python-gnupg: disable failing test test_search_keys
reading the code, it's hard to see how this test was *ever* supposed to
pass. interestingly, peeking across the fence, guix have disabled this test
too for the same reason.

note that tests don't actually run *at all* on py27 but that's a problem
for another day

(cherry picked from commit 9ca4f39b97)
2017-09-24 13:04:58 +02:00
Rodney Lorrimar
240f529269 guile-lib: Disable a test which doesn't work with Guile 2.2
Error is:

    ERROR: In procedure %resolve-variable:
    ERROR: Unbound variable: use-syntax
    FAIL: sxml.ssax.scm

Also add pkg-config so that configure script can find libguile.

Relevant to #28643

(cherry picked from commit 913e770fa8)
2017-09-24 11:35:33 +01:00
Graham Christensen
beb1f1ea91 nixos/rabbitmq: fix restarts and sasl logs
1. The chmod 400 with the preset cookie prevented restarts, as
on the second boot it would fail to write to the cookie. Oops.

2. As far as I can tell, sasl logs were disabled because of the
following error:

{error,{cannot_log_to_tty,sasl_report_tty_h,not_installed}}

Not because we actually wanted to disable them. This meant the
management plugin wasn't usable due to a bug set to be fixed in
3.7.0.

(cherry picked from commit f3b9ac73e2)
2017-09-23 17:59:07 -04:00
Daiderd Jordan
5a59b45811 libjack2: fix darwin build
(cherry picked from commit 7d98316a97)
2017-09-23 22:37:09 +02:00
Daiderd Jordan
cb78d96a64 darwin-frameworks: add impure version of CoreFoundation
(cherry picked from commit bb02b800a2)
2017-09-23 22:36:57 +02:00
Patrick Callahan
8d34b090a7 varnish: enable Darwin build
(cherry picked from commit 8be447b522)
2017-09-23 21:33:03 +02:00
Daiderd Jordan
ae583307ef qt5-qtbase: fix darwin build
Fixes #27474

(cherry picked from commit db2538fb0c)
2017-09-23 21:07:06 +02:00
Franz Pletz
7bd9dac1bd nixos-generate-config: add programs options examples
(cherry picked from commit 0f5cd17f2c)
2017-09-23 20:05:01 +02:00
Franz Pletz
8c5fdf1baf nixos/install: disable kernel debug console logging
Add another option for debugging instead. Lots of users have been
complaining about this default behaviour.

This patch also cleans up the EFI bootloader entries in the ISO.

(cherry picked from commit 3d040f9305)
2017-09-23 20:05:01 +02:00
Silvan Mosberger
aca6a2bd3f encrypted devices: add label set assertion (#29651) 2017-09-23 19:02:58 +01:00
Michael Raskin
81e4fbefda asymptote: do not install sty-files, let texlive care of it
TeXLive version is effectively identical anyway, and it caused an
unneccessary file name collision.

Fixes: #29671
(cherry picked from commit 8d001911db)
2017-09-23 19:36:01 +02:00
Robin Gloster
5825331856 fanctl, fan module: remove
This has been broken nearly all the time due to the patches needed to
iproute2 not being compatible with the newer versions we have been
shipping. As long as Ubuntu does not manage to upstream these changes
so they are maintained with iproute2 and we don't have a maintainer
updating these patches to new iproute2 versions it is not feasible to
have this available.

(cherry picked from commit 08b09fdc5c)
2017-09-23 18:00:40 +02:00
Peter Simons
bfbbfa09e1 yi: mark builds broken
Yi and its libraries have inconsistent versions because some of them are in LTS
Haskell and others aren't. Ping @fuuzetsu.
2017-09-23 17:28:27 +02:00
Bjørn Forsman
1cdb055879 nixos/gitolite: use group 'gitolite' instead of 'nogroup'
Having files (git repositories) owned by 'nogroup' is a bad idea.

(cherry picked from commit 3a58e41e43)
2017-09-23 17:13:06 +02:00
Samuel Leathers
5aa76ba06d kodi: 17.3 -> 17.4
(cherry picked from commit 694e7e08d6)
2017-09-23 17:08:12 +02:00
Peter Simons
23a021d12e Revert "nixos: add option for bind to not resolve local queries (#29503)"
This reverts commit 670b4e29ad. The change
added in this commit was controversial when it was originally suggested
in https://github.com/NixOS/nixpkgs/pull/29205. Then that PR was closed
and a new one opened, https://github.com/NixOS/nixpkgs/pull/29503,
effectively circumventing the review process. I don't agree with this
modification. Adding an option 'resolveLocalQueries' to tell the locally
running name server that it should resolve local DNS queries feels
outright nuts. I agree that the current state is unsatisfactory and that
it should be improved, but this is not the right way.
2017-09-23 16:36:05 +02:00
aszlig
f7411b81ed nixos/dovecot: Fix createMailUser implementation
This option got introduced in 7904499542
and it didn't check whether mailUser and mailGroup are null, which they
are by default.

Now we're only creating the user if createMailUser is set in conjunction
with mailUser and the group if mailGroup is set as well.

I've added a NixOS VM test so that we can verify whether dovecot works
without any additional options set, so it serves as a regression test
for issue #29466 and other issues that might come up with future changes
to the Dovecot service.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Fixes: #29466
Cc: @qknight, @abbradar, @ixmatus, @siddharthist, @peti
(cherry picked from commit 3ba2095a42)
2017-09-23 15:00:33 +02:00
Jörg Thalheim
3b2e3dfef3 traefik: link against libc, set build version/codename
this way gethostbyname() works as indented

(cherry picked from commit ad2004afd3)
2017-09-23 14:06:31 +02:00
Hamish Hutchings
c0f4005e4a Change to using source files to build traefik
(cherry picked from commit 0cc4cb96bb)
2017-09-23 14:06:25 +02:00
Hamish Hutchings
ea18f35e76 Traefik init at 1.3.8
(cherry picked from commit e0b81b9c3c)
2017-09-23 14:06:17 +02:00
Antoine Eiche
d41f20e9cc dockerTools.buildImage: Switch to the format image generated by Skopeo
We were using 'Combined Image JSON + Filesystem Changeset Format' [1] to
unpack and pack image and this patch switches to the format used by the registry.

We used the 'repository' file which is not generated by Skopeo when it
pulls an image. Moreover, all information of this file are also in the
manifest.json file.
We then use the manifest.json file instead of 'repository' file. Note
also the manifest.json file is required to push an image with Skopeo.

Fix #29636

[1] 749d90e10f/image/spec/v1.1.md (combined-image-json--filesystem-changeset-format)

(cherry picked from commit 35f205a4b6)
2017-09-23 14:00:32 +02:00
Michael Raskin
5cf35d7ae4 singular: use gcc5
Progress on: #28643
Fixes: #29682

(cherry picked from commit f7d7c7bedf)
2017-09-23 14:00:25 +02:00
Frederik Rietdijk
d5cc00eca4 python.pkgs: alias dateutil to python-dateutil
(cherry picked from commit 5e916914ef)
2017-09-23 13:58:44 +02:00
Andreas Rammhold
7dda5471d7 ferm: 2.3.1 -> 2.4.1
(cherry picked from commit e9a56e798a)
2017-09-23 13:31:06 +02:00
Joachim Fasting
8dd308c031 nixos/lock-kernel-modules: fix deferred fileSystem mounts
Ensure that modules required by all declared fileSystems are explicitly
loaded.  A little ugly but fixes the deferred mount test.

See also https://github.com/NixOS/nixpkgs/issues/29019

(cherry picked from commit 1df6cf5d1d)
2017-09-23 13:30:18 +02:00
Joachim Fasting
cf4e7c0181 nixos/hardened test: add failing test-case for deferred mounts
(cherry picked from commit bccaf63067)
2017-09-23 13:29:47 +02:00
Joachim Fasting
ce59db3423 nixos/hardened: simplify script
(cherry picked from commit 15a4f9d8ef)
2017-09-23 13:29:35 +02:00
Joachim Fasting
6a17d11ff7 snapper: 0.3.3 -> 0.5.0
(cherry picked from commit 6bf56656f0)
2017-09-23 13:29:17 +02:00
Joachim Fasting
a8120e1828 tor: enable parallel building
(cherry picked from commit fd3a9e6468)
2017-09-23 13:27:42 +02:00
Kranium Gikos Mendoza
06caa2ac3a trackballs: 1.1.4 (broken) -> 1.2.3
(cherry picked from commit 92ec5cddbc)
2017-09-23 13:25:55 +02:00
Kranium Gikos Mendoza
99d7dcdf61 giv: 20150811-git (broken) -> 0.9.26
(cherry picked from commit 5da75526f7)
2017-09-23 13:22:17 +02:00
mimadrid
8d4cb4e214 calc: 2.12.6.1 -> 2.12.6.3
(cherry picked from commit 676db57c37)
2017-09-23 09:10:01 +02:00
Daiderd Jordan
980cbaea1e lmdb: fix library id on darwin
(cherry picked from commit 84bd2f4ab0)
2017-09-22 23:35:28 +02:00
Daiderd Jordan
90a034b67c textql: fix darwin build
(cherry picked from commit 1acf6716aa)
2017-09-22 21:26:19 +02:00
Tuomas Tynkkynen
83b72a90c5 darwin: Disable yet another bunch of packages never having built successfully
cjdns: https://hydra.nixos.org/build/61134279
jonprl: https://hydra.nixos.org/build/61123711
mate.libmatemixer: https://hydra.nixos.org/build/61126968
dirac: https://hydra.nixos.org/build/61132432
idnkit: https://hydra.nixos.org/build/61123544
trousers: https://hydra.nixos.org/build/61109766
packetdrill: https://hydra.nixos.org/build/61116190
osm2pgsql: https://hydra.nixos.org/build/61118017
nawk: https://hydra.nixos.org/build/61139000

(cherry picked from commit 4acb425c39)
2017-09-22 21:20:08 +03:00
Daiderd Jordan
a8214f6e33 tw-rs: fix darwin build
(cherry picked from commit 8a0d857aa9)
2017-09-22 19:46:02 +02:00
Tuomas Tynkkynen
71f5290b4a hdf5: Re-enable on darwin
Oops, ab71280823 intended to only disable hdf5-fortran but also
disabled the others that are fine.

(cherry picked from commit a7440aa7c6)
2017-09-22 19:59:02 +03:00
Tuomas Tynkkynen
733336153d darwin: Disable another bunch of packages never having built successfully
tecoc: https://hydra.nixos.org/build/61141995
shallot: https://hydra.nixos.org/build/61145497
plink-ng: https://hydra.nixos.org/build/61130149
tshark: https://hydra.nixos.org/build/61479600
(cherry picked from commit 4b4bfbf3e5)
2017-09-22 19:59:01 +03:00
Pavel Goran
5b1d686a22 nixos/gitolite: customize .gitolite.rc declaratively
Add the `extraGitoliteRc` option to customize the `.gitolite.rc`
configuration file declaratively.

Resolves #29249.

(cherry picked from commit c73a3813fa)
2017-09-22 18:30:22 +02:00
Michael Weiss
b8919e7ba0 sshfs-fuse: Fix the build on i686-linux
The last upgrade (137142a72c) broke the
build on i686. Thanks @globin for noticing this.

(cherry picked from commit 6f02c3bf77)
2017-09-22 17:23:44 +02:00
Tuomas Tynkkynen
f5d5180562 darwin: Disable some packages that have never built successfully
mate.mate-desktop: https://hydra.nixos.org/build/61110037
gdmap: https://hydra.nixos.org/build/61144743
redsocks: https://hydra.nixos.org/build/61123106
resolv_wrapper: https://hydra.nixos.org/build/61121132
ogmtools: https://hydra.nixos.org/build/61108726
mp3info: https://hydra.nixos.org/build/61139015
lxappearance-gtk3: https://hydra.nixos.org/build/61126327
hdf5-fortran: https://hydra.nixos.org/build/61146631
pqiv: https://hydra.nixos.org/build/61124724

(cherry picked from commit ab71280823)
2017-09-22 17:27:49 +03:00
Michael Weiss
d108cafd0e pythonPackages.raven: 6.1.0 -> 6.2.0
(cherry picked from commit 8758a4dde2)
2017-09-22 16:03:47 +02:00
Joerg Thalheim
18822c3263 jetbrains.datagrip: 2017.1.5 -> 2017.2.2
(cherry picked from commit e4a859a95d)
2017-09-22 16:03:36 +02:00
Lancelot SIX
b05b750eb3 qtcreator: 4.3.1 -> 4.4.0
See http://blog.qt.io/blog/2017/09/05/qt-creator-4-4-0-released/ for
release information

(cherry picked from commit bd170e778b)
2017-09-22 16:02:58 +02:00
Joerg Thalheim
2007c5171b neomutt: fix missing libidn
(cherry picked from commit a2444a2831)
2017-09-22 16:02:14 +02:00
Brandon Barker
56d062ea3a jetbrains: update.pl fixes
* indentation, retab
  * url handling for alternative version names
  * handling for alt. download url format
  * made unknown channel error non-fatal

(cherry picked from commit 14f2e0cd36)
2017-09-22 16:02:07 +02:00
André-Patrick Bubel
f9efede475 nixos/fileystems: Fix boot fails with encrypted fs
Boot fails when a keyfile is configured for all encrypted filesystems
and no other luks devices are configured. This is because luks support is only
enabled in the initrd, when boot.initrd.luks.devices has entries. When a
fileystem has a keyfile configured though, it is setup by a custom
command, not by boot.initrd.luks.

This commit adds an internal config flag to enable luks support in the
initrd file, even if there are no luks devices configured.

(cherry picked from commit 2000fba561)
2017-09-22 16:01:53 +02:00
Mathias Schreck
1fdd60ff08 nodejs: 8.4.0 -> 8.5.0
(cherry picked from commit 9d2a2dc43e)
2017-09-22 16:01:19 +02:00
Mathias Schreck
4abcec18f9 libuv: 1.13.1 -> 1.14.1
(cherry picked from commit f4b207438d)
2017-09-22 16:01:12 +02:00
John M. Harris, Jr
5d20f56ca5 pim-data-exporter: init at 17.08.1
* Add pim-data-exporter

* pim-data-exporter: fix indentation

(cherry picked from commit b2924389ac)
2017-09-22 16:00:57 +02:00
Edward Tjörnhammar
f7182dc53d jetbrains.clion: set CL_JDK
(cherry picked from commit 4e12dbb092)
2017-09-22 16:00:06 +02:00
Russell O'Connor
8694cec1be bitcoin: 0.15.0 -> 0.15.0.1
(cherry picked from commit 6075d4ad07)
2017-09-22 15:59:58 +02:00
Cray Elliott
19a0166eb8 wineUnstable: 2.16 -> 2.17
per usual, staging has been updated as well!

(cherry picked from commit 5522cd5cb1)
2017-09-22 15:59:28 +02:00
Vincent Laporte
6aa5fbed97 abella: fix build with OCaml ≥ 4.03
(cherry picked from commit 3b7c68615e)
2017-09-22 15:59:15 +02:00
Ruben Maher
4070c95d3c nfs-utils: set /etc/krb5.keytab as default path for rpc-gssd
Currently the `rpc-gssd.service` has a `ConditionPathExists` clause that can
never be met, because it's looking for stateful data inside `/nix/store`.

`auth-rpcgss-module.service` also only starts if this file exists.

Fixes NixOS/nixpkgs#29509.

(cherry picked from commit 98a2316166)
2017-09-22 15:59:06 +02:00
Thomas Mader
d59fd99b90 dmd: Disable check phase because some tests are not working if build has
sandboxing enabled

(cherry picked from commit 4535008a4c)
2017-09-22 15:57:50 +02:00
Thomas Mader
6fd611c5ba dmd: Fix bootstrap dmd to build with sandboxing of nixUnstable
(cherry picked from commit 8fa1b39279)
2017-09-22 15:57:39 +02:00
Ben Darwin
f36c13564f ants: bump version and fix sandboxed build
(cherry picked from commit c7bbe471b0)
2017-09-22 15:57:21 +02:00
Jörg Thalheim
4d86845c68 assh: add openssh to PATH
(cherry picked from commit 81569ecd72)
2017-09-22 15:56:56 +02:00
Diego Zamboni
631bed3947 assh: init at 2.6.0
Powerful wrapper around ssh.

(cherry picked from commit 334dfc3086)
2017-09-22 15:56:47 +02:00
Michael Weiss
c1c0717f81 sshfs-fuse: 2.10 -> 3.2.0
(cherry picked from commit 137142a72c)
2017-09-22 15:55:09 +02:00
Michael Weiss
586db45da0 fuse3: init at 3.1.1
This includes fuse-common (fusePackages.fuse_3.common) as recommended by
upstream. But while fuse(2) and fuse3 would normally depend on
fuse-common we can't do that in nixpkgs while fuse-common is just
another output from the fuse3 multiple-output derivation (i.e. this
would result in a circular dependency). To avoid building fuse3 twice I
decided it would be best to copy the shared files (i.e. the ones
provided by fuse(2) and fuse3) from fuse-common to fuse (version 2) and
avoid collision warnings by defining priorities. Now it should be
possible to install an arbitrary combination of "fuse", "fuse3", and
"fuse-common" without getting any collision warnings. The end result
should be the same and all changes should be backwards compatible
(assuming that mount.fuse from fuse3 is backwards compatible as stated
by upstream [0] - if not this might break some /etc/fstab definitions
but that should be very unlikely).

My tests with sshfs (version 2 and 3) didn't show any problems.

See #28409 for some additional information.

[0]: https://github.com/libfuse/libfuse/releases/tag/fuse-3.0.0

(cherry picked from commit 351f5fc585)
2017-09-22 15:54:59 +02:00
Joachim Fasting
47d2582533 hydra: 2017-07-27 -> 2017-09-14
Builds against recent nixUnstable

(cherry picked from commit 3e96cee147)
2017-09-22 15:54:23 +02:00
Pascal Bach
85ae319351 gluster service: use str instead of path for private key
This pervents the user from accidently commiting the key to the nix store.
If providing a path instead of a string.

(cherry picked from commit 8ed758696c)
2017-09-22 15:53:49 +02:00
Pascal Bach
5f996d59d9 glusterfs service: add support for TLS communication
TLS settings are implemented as submodule.

(cherry picked from commit c68118ce65)
2017-09-22 15:53:35 +02:00
Pascal Bach
2f3e3c6348 riot-web: 0.12.3 -> 0.12.5
(cherry picked from commit 50f12373af)
2017-09-22 15:53:15 +02:00
José Romildo Malaquias
f1e01bc2b2 google-drive-ocamlfuse: 0.6.17 -> 0.6.21
(cherry picked from commit 2bbef7658a)
2017-09-22 15:52:16 +02:00
dywedir
be0f44bd1a tokei: 6.0.1 -> 6.1.2
(cherry picked from commit 69379fcf10)
2017-09-22 15:52:05 +02:00
Théo Zimmermann
16254ddb63 compcert: fix license
The license of CompCert is not a generic "INRIA" license. It is "INRIA Non-Commercial
Agreement for the CompCert verified compiler". As unfortunate as it may seem, this
is a non-free license (clearly mentioned as such in its preamble). See also #20256.

(cherry picked from commit 8fde5790b4)
2017-09-22 15:48:24 +02:00
Théo Zimmermann
a955480320 compcert: 3.0.1 -> 3.1
Note that the fix of the VERSION file can likely be removed at the next update.

(cherry picked from commit 3370615a7f)
2017-09-22 15:48:11 +02:00
Robert Helgesson
7972f6c59a perl-Scope-Upper: 0.24 -> 0.29
(cherry picked from commit 41cca299ef)
2017-09-22 15:46:13 +02:00
Robert Helgesson
bdda999ce8 perl-File-Slurper: 0.009 -> 0.010
(cherry picked from commit 2dae9980cc)
2017-09-22 15:46:04 +02:00
Robert Helgesson
9264d3d413 svtplay-dl: 1.9.4 -> 1.9.6
(cherry picked from commit 25a2b4b3ec)
2017-09-22 15:45:58 +02:00
Edward Tjörnhammar
d699866fd2 jetbrains.jdk: style fixes, platform restriction
(cherry picked from commit 85cd648778)
2017-09-22 15:45:34 +02:00
Aleksey Kladov
c94a1f6a18 jetbrains.jdk: init at 152b970.2
(cherry picked from commit 53337c0fc8)
2017-09-22 15:45:11 +02:00
Andreas Rammhold
1df3a94254 jetbrains.webstorm: 2017.2.2 -> 2017.2.4
(cherry picked from commit ac9353b815)
2017-09-22 15:45:01 +02:00
Andreas Rammhold
5ab5ba8684 jetbrains.rider: 171.4456.1432 -> 2017.1.1
(cherry picked from commit 4948b09524)
2017-09-22 15:44:49 +02:00
Andreas Rammhold
b72287dd40 jetbrains.pycharm-professional: 2017.2.2 -> 2017.2.3
(cherry picked from commit eb363ff3dc)
2017-09-22 15:44:41 +02:00
Andreas Rammhold
5bf43ab50e jetbrains.pycharm-community: 2017.2.2 -> 2017.2.3
(cherry picked from commit 0d6b50f2eb)
2017-09-22 15:44:33 +02:00
Andreas Rammhold
491227305e jetbrains.phpstorm: 2017.2.1 -> 2017.2.2
(cherry picked from commit 5f9a4cb163)
2017-09-22 15:44:25 +02:00
Andreas Rammhold
af9fef4777 jetbrains.idea-ultimate: 2017.2.2 -> 2017.2.4
(cherry picked from commit 74d7542892)
2017-09-22 15:44:15 +02:00
Andreas Rammhold
7ed7f686a7 jetbrains.idea-community: 2017.2.2 -> 2017.2.4
(cherry picked from commit d6663a559c)
2017-09-22 15:44:09 +02:00
Andreas Rammhold
1466d9f375 jetbrains.gogland: 172.3757.46 -> 172.3968.45
(cherry picked from commit 5b3dad3b1c)
2017-09-22 15:44:00 +02:00
Andreas Rammhold
8cfa0f8a3c jetbrains.clion: 2017.2.1 -> 2017.2.2
(cherry picked from commit 42e13a85ed)
2017-09-22 15:43:52 +02:00
Neil Mayhew
f7ca2a5d47 spideroak: fix crash due to zlib version mismatch
Fixes #23960

(cherry picked from commit 4d7dd8169c)
2017-09-22 15:43:44 +02:00
Jörg Thalheim
b9e95f5c43 khal: use fetchPypi
(cherry picked from commit d5b46fdd80)
2017-09-22 15:43:33 +02:00
Matthias Beyer
e85ec8617b khal: 0.9.5 -> 0.9.7
(cherry picked from commit d697403303)
2017-09-22 15:43:22 +02:00
Diego Zamboni
50fd6b73f3 elvish: 0.9 -> 0.10; fix darwin build (#29587)
* First attempt at making elvish compile on darwin

* Fixed cyclic dependency on darwin

This fixes the "cycle detected in the references of" error when building
on darwin. The fix is based on the solution in issue #18131.

* Use version 0.10 and not 0.10.1, which is not officially released yet

(cherry picked from commit 8b8a2fd542)
2017-09-22 15:42:44 +02:00
José Romildo Malaquias
41fdc7aa34 ocamlfuse: 2.7-3 -> 2.7.1_cvs5 (#29606)
(cherry picked from commit 595d92eb7a)
2017-09-22 15:42:23 +02:00
Linus Heckemann
d5549f722d oil: 0.0.0 -> 0.1.0
(cherry picked from commit 6988537835)
2017-09-22 15:41:55 +02:00
Robert Schütz
92fc55b281 texworks: init at 0.6.2
(cherry picked from commit 50d52ac8a8)
2017-09-22 15:41:28 +02:00
Andreas Rammhold
b1f0ae87c0 afew: git-2017-02-8 -> 1.2.0
(cherry picked from commit 559d8d4c3a)
2017-09-22 15:25:45 +02:00
Jörg Thalheim
4ec394bf1b nifticlib: use mirror for sourceforge
(cherry picked from commit aab8f8df4b)
2017-09-22 15:25:27 +02:00
Ben Darwin
31614f59f2 nifticlib: init at 2.0.0
(cherry picked from commit 0d981c5761)
2017-09-22 15:25:19 +02:00
Nick Novitski
6e4da2a7e1 gemconfig: add curb
(cherry picked from commit 5ddfcc774c)
2017-09-22 15:24:15 +02:00
Robert Schütz
828dcf805a pythonPackages.py3status: add file as a dependency
(cherry picked from commit d58a88277d)
2017-09-22 15:22:39 +02:00
Raphael Das Gupta
47bc25a916 xonsh: fix typo ("xnosh") in "enable" description
(cherry picked from commit 42d6e933d6)
2017-09-22 15:22:29 +02:00
Bas van Dijk
9858d7ee80 elk: 5.5.2 -> 5.6.1
Release notes:

* https://www.elastic.co/guide/en/elasticsearch/reference/5.6/release-notes-5.6.1.html
* https://www.elastic.co/guide/en/logstash/5.6/logstash-5-6-1.html
* https://www.elastic.co/guide/en/kibana/current/release-notes-5.6.1.html

(cherry picked from commit ea8e7ed1e3)
2017-09-22 15:22:19 +02:00
José Romildo Malaquias
6c08148ec2 tint2: 0.14.6 -> 15.1
(cherry picked from commit ee88bd3424)
2017-09-22 15:21:28 +02:00
José Romildo Malaquias
739a070db0 numix-icon-theme: 2017-01-25 -> 2017-09-17
(cherry picked from commit b9907fc6fe)
2017-09-22 15:21:17 +02:00
José Romildo Malaquias
6d263a3658 numix-icon-theme-circle: 2016-11-10 -> 17-09-13
(cherry picked from commit c40b6862f2)
2017-09-22 15:21:11 +02:00
José Romildo Malaquias
7d1ffbaf2f numix-icon-theme-square: 2016-11-23 -> 17-09-13
(cherry picked from commit 79941a3bf4)
2017-09-22 15:21:05 +02:00
José Romildo Malaquias
5ee4a2044f flat-plat: 20170605 -> 20170917
(cherry picked from commit f89ba64f00)
2017-09-22 15:20:55 +02:00
Samuel Leathers
b331778066 mqtt-bench: init at 0.3.0
(cherry picked from commit f8ad84ad23)
2017-09-22 15:19:56 +02:00
Michael Weiss
638abc6b49 gengetopt: Fix the build
Thanks @orivej for providing this fix.

Fix #28255 (the build was broken since
2bc7b4e134).

(cherry picked from commit 9182927998)
2017-09-22 15:17:44 +02:00
Tuomas Tynkkynen
5b8be60bee esptool: Fix tests in sandbox
It actually requires flake8-future-import but manages to download it
from the Internet when run outside the sandbox.

(cherry picked from commit 2c2cd34b54)
2017-09-22 15:11:39 +02:00
Tuomas Tynkkynen
4acbf1ed2b pythonPackages.flake8-future-import: Init at 0.4.3
(cherry picked from commit ecebb6090a)
2017-09-22 15:11:07 +02:00
Peter Hoeg
b347e5951b calibre: 3.5.0 -> 3.7.0
(cherry picked from commit 55c58c0826)
2017-09-22 15:09:31 +02:00
Jörg Thalheim
4eff61a87b valauncher: 1.2 -> 1.3.1
(cherry picked from commit e3141bc1b1)
2017-09-22 15:08:33 +02:00
Jörg Thalheim
0d5f45340a nvim-cm-racer: init at 2017-07-27
(cherry picked from commit 2ebfdf972f)
2017-09-22 15:07:57 +02:00
Jörg Thalheim
7d4b13f1fa vimPlugins.LanguageClient-neovim: init at 2017-09-05
(cherry picked from commit 276d234659)
2017-09-22 15:07:50 +02:00
Jean-Francois Roche
68d7d26616 openfortivpn: 1.2.0 -> 1.5.0
fixes #29578

(cherry picked from commit 0b39118494)
2017-09-22 15:07:23 +02:00
Lancelot SIX
a654fa6af9 gnupg: 2.2.0 -> 2.2.1
See http://lists.gnu.org/archive/html/info-gnu/2017-09/msg00010.html
for release information

(cherry picked from commit 4935d5f376)
2017-09-22 15:07:07 +02:00
John Ericson
dfff946215 vim: Properly categorize pkgconfig dependency
(cherry picked from commit 100db4fa3b)
2017-09-22 15:06:18 +02:00
Jörg Thalheim
2dd2baaf97 libwebsockets: revert making libuv a propagated build input
it is possible to use libwebsockets without libuv

cc @volth

(cherry picked from commit c1de354a3d)
2017-09-22 15:05:52 +02:00
Bas van Dijk
5eadc1fe7a journalbeat: 5.5.0 -> 5.6.0
(cherry picked from commit 8d07b99b96)
2017-09-22 15:05:31 +02:00
Ruben Maher
a34dc6cd1c flow: 0.54.0 -> 0.55.0
(cherry picked from commit 1787043323)
2017-09-22 15:05:25 +02:00
Peter Hoeg
eef72844de syncthing: 0.14.37 -> 0.14.38
(cherry picked from commit f170dbe16f)
2017-09-22 15:05:18 +02:00
Frank Doepper
8c853bbf67 circumvent hdaps name clash
(cherry picked from commit 28dd1158ff)
2017-09-22 15:05:10 +02:00
Frank Doepper
6f6602b93d tp_smapi with hdaps
(cherry picked from commit a3e806ef0f)
2017-09-22 15:04:58 +02:00
Samuel Leathers
91aa0f43f5 lenmus: removing custom cmakeFlags
(cherry picked from commit 2c2252247c)
2017-09-22 15:03:20 +02:00
Thomas Tuegel
c57bf23a76 alacritty: respect pre- and post-hooks of overridden phases
Failing to `runHook` when overriding phases can have unpredictable results.

fixes #29572

(cherry picked from commit 6e01011211)
2017-09-22 15:03:06 +02:00
Thomas Tuegel
63c5978fae alacritty: install desktop icon
(cherry picked from commit a50d0b719f)
2017-09-22 15:02:53 +02:00
Joerg Thalheim
053d9a4dab topydo: use throw instead of trace to not break evaluation
(cherry picked from commit f2aecac5c7)
2017-09-22 10:56:21 +01:00
Joerg Thalheim
ae26449964 topydo: really move out of python-packages
(cherry picked from commit 446f9c96f5)
2017-09-22 10:56:21 +01:00
Samuel Leathers
1c8872bfeb topydo: 0.9 -> 0.13
(cherry picked from commit be530263bc)
2017-09-22 10:56:21 +01:00
Vladimír Čunát
beacbecfd7 knot-resolver: 1.3.3 -> 1.4.0
Also drop rarely used dependencies, by default,
and utilize root server addresses from nixpkgs.

(cherry picked from commit fd56648a04)
2017-09-22 11:31:12 +02:00
timor
ee06b11141 ParaView: 4.0.1 -> 5.4.0
(cherry picked from commit 274333e222)
2017-09-22 08:32:28 +01:00
Florian Jacob
e6ca475e24 piwik: 3.1.0 -> 3.1.1
(cherry picked from commit 6aea372e28)
2017-09-21 23:54:04 +01:00
Daiderd Jordan
e53621734e transfig: cleanup and fix darwin clang
(cherry picked from commit 570c0b3a72)
2017-09-22 00:26:05 +02:00
Daiderd Jordan
c2affb9c90 vapoursynth: fix darwin build
(cherry picked from commit 62f8e255a4)
2017-09-21 22:33:15 +02:00
Pascal Bach
0269045390 node-exporter service: fix documentation for enabledCollectors
(cherry picked from commit a217d73381)
2017-09-21 21:04:57 +01:00
Daiderd Jordan
6c34d1dc26 vmmlib: fix darwin frameworks
(cherry picked from commit 7c30c83b7b)
2017-09-21 21:52:33 +02:00
Daiderd Jordan
1f60b1e18b erlang: remove erlangR16 and all versioned variants from all-packages
(re-applies commit 0fafa0d7d7)
2017-09-21 21:34:53 +02:00
Daiderd Jordan
af8d8bf049 vsqlite: fix darwin build
(cherry picked from commit bafb9c4d50)
2017-09-21 21:34:52 +02:00
Vladimír Čunát
1c6357cc0f Merge #29612: unbound: 1.6.5 -> 1.6.6
(cherry picked from commit e15123092c)
2017-09-21 21:14:18 +02:00
Thomas Tuegel
db0b50da2a hplip: fix Python wrappers
We cannot rely on wrapPythonPrograms to wrap the installed executables because
they are symlinks (which it ignores). Instead, we have to emulate it to make
the wrappers ourselves.

(cherry picked from commit 1e2ebee42a)
2017-09-21 13:59:35 -05:00
Thomas Tuegel
ae580c8dbf hplip: install PPDs where CUPS will find them
(cherry picked from commit 5ab37fb913)
2017-09-21 13:59:28 -05:00
Daiderd Jordan
fce9c33905 zroc-ice: cleanup and fix darwin build
(cherry picked from commit 1ae204d2fa)
2017-09-21 20:49:43 +02:00
Tim Steinbach
79cc48735a linux-copperhead: 4.13.2.a -> 4.13.3.a
(cherry picked from commit 28071e9d9c4f6f1bbc7818e6b46a76ec3b8002a6)
2017-09-21 14:38:00 -04:00
Jörg Thalheim
0c59c5f406 Merge pull request #29420 from roberth/release-17.09-arelle
arelle: enable only on python 3.4 (merge as necessary)
2017-09-21 19:32:37 +01:00
Robin Gloster
0ca5090fd8 gitlab: 9.5.2 -> 9.5.5
(cherry picked from commit e2822f6384)
2017-09-21 20:26:59 +02:00
rnhmjoj
1a3072133a vapoursynth-mvtools: 17 -> 19
(cherry picked from commit a7eb2e01bc)
2017-09-21 16:23:37 +01:00
rnhmjoj
80fea39662 vapoursynth: R36 -> R38
(cherry picked from commit 3f9661588b)
2017-09-21 16:23:37 +01:00
Shea Levy
4a5c1a3fe6 openldap: Use a global localstatedir
(cherry picked from commit c3b41a77e6)
2017-09-21 08:18:54 -06:00
Théophane Hufschmitt
6052d2b6cc pythonPackages.pafy: 0.5.2 -> 0.5.3.1 (#29588)
* pythonPackages.pafy: 0.5.2 -> 0.5.3.1

* pythonPackages.pafy: move to its own file

* pythonPackages.pafy: fetchurl -> fetchPypi

(cherry picked from commit e76c2c1496)
2017-09-21 12:46:32 +01:00
Thomas Tuegel
811f15305a dropbox: 34.4.22 -> 35.4.20
(cherry picked from commit b0deb1ed48)
2017-09-21 06:12:47 -05:00
Vaibhav Sagar
3f44159ae1 nginxModules.echo: 0.57 -> 0.61
This fixes #29555.

(cherry picked from commit dea2affe6c)
2017-09-21 12:03:13 +01:00
Linus Heckemann
4a17dea467 impressive: fixes and improvements
- Fix finding SDL (would previously fail unless gcc was in environment)
- Use ghostscript rather than xpdf for rendering as it has a slightly
  smaller closure
- Fix broken link for reasoning behind name change
- Add self to maintainers
- Add reference to DejaVu fonts so it can always find the OSD fonts
- Install manpage into correct location

(cherry picked from commit 05101d32c0)
2017-09-21 08:53:50 +01:00
Peter Hoeg
34efc5b056 kmscon: reset ExecStart to allow override
The getty@.service unit already has an ExecStart so we cannot simply set a new
one in order to override it or we will get this error:

systemd[1]: getty@tty1.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.

Instead "reset" ExecStart by setting it to empty which is the systemd way of
doing it.

(cherry picked from commit 6558f81bc9)
2017-09-21 10:03:18 +08:00
aszlig
5f5eb7f0d8 nixos/tests/virtualbox: Fix netcat invocation
This is a backwards-incompatibility in netcat-openbsd introduced due to
bumping the netcat version to 1.130 in
a72ba661ac.

Version 1.130 no longer exits on EOF but now needs to be passed the -N
flag in order to exit on EOF.

The upstream change reads[1] like this:

  Don't shutdown nc(1)'s network socket when stdin closes. Matches
  *Hobbit*'s original netcat and GNU netcat; revert to old behaviour
  with the new -N flag if needed. After much discussion with otto
  deraadt tedu and Martin Pelikan.  ok deraadt@

Here is the diff of this change:

http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/nc/netcat.c.diff?r1=1.110&r2=1.111&f=h

[1]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/nc/netcat.c?rev=1.111&content-type=text/x-cvsweb-markup

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
(cherry picked from commit a75265924f)
2017-09-21 03:50:20 +02:00
Samuel Leathers
00ca2b3a6c jfbview: 0.5.3 -> 0.5.4
(cherry picked from commit 2fdb8f9b8f)
2017-09-21 00:52:24 +02:00
Franz Pletz
883ea76934 unifi: 5.5.20 -> 5.6.16
(cherry picked from commit 94a5de61af)
2017-09-20 23:53:09 +02:00
Simon Lackerbauer
a4754a575f atlassian-jira: 7.4.1 -> 7.5.0
(cherry picked from commit 27ed570445)
2017-09-20 23:53:09 +02:00
Simon Lackerbauer
7d0fe7b86e atlassian-confluence: 6.3.1 -> 6.4.0
(cherry picked from commit c95e158143)
2017-09-20 23:53:09 +02:00
Robin Gloster
0fccf291f2 gitlab module: fix shell hook path
(cherry picked from commit 370ac6275e)
2017-09-20 23:53:08 +02:00
Tim Steinbach
ec43a30698 sbt: 1.0.1 -> 1.0.2
(cherry picked from commit e200cfbae1)
2017-09-20 09:42:23 -04:00
Tim Steinbach
31f048e624 vscode: 1.16.0 -> 1.16.1
(cherry picked from commit 605dba0ac9)
2017-09-20 08:41:58 -04:00
Tim Steinbach
0859004342 linux: 4.13.2 -> 4.13.3
(cherry picked from commit eab480ac3d)
2017-09-20 08:37:39 -04:00
Tim Steinbach
93862afe6b linux: 4.12.13 -> 4.12.14
(cherry picked from commit 726765404b)
2017-09-20 08:37:38 -04:00
Tim Steinbach
1eb54ed156 linux: 4.9.50 -> 4.9.51
(cherry picked from commit 7cfa6895e8)
2017-09-20 08:37:38 -04:00
Peter Hoeg
1d7ba9f7d6 mtr nixos module: wrap the proper binary
(cherry picked from commit 4b78d44ab6)
2017-09-20 20:15:44 +08:00
Rob Vermaas
eb873f6c78 Make sure dummy kernel module is loaded for hologram-agent. 2017-09-20 10:57:54 +00:00
Gauthier POGAM--LE MONTAGNER
a695feff16 jetbrains.phpstorm10: remove
(cherry picked from commit bca1c64f4afcbdb208d345ff8c322699aa4bcb38)
2017-09-20 10:48:00 +02:00
Gauthier POGAM--LE MONTAGNER
f276d4fdb5 jetbrains.idea{14,15}-{community,ultimate}: remove
(cherry picked from commit d132887ef30fcd371b0a3ee9a94c124d6ca087d5)
2017-09-20 10:48:00 +02:00
Gauthier POGAM--LE MONTAGNER
27bcf11646 jetbrains.webstorm{10,11}: remove
(cherry picked from commit 3287c23f8edb21ef35d6015f86131096eb5b6c4b)
2017-09-20 10:48:00 +02:00
Gauthier POGAM--LE MONTAGNER
9443496c8e jetbrains.ruby-mine{7,8}: remove
(cherry picked from commit 1487a344bc1de108cd933fa57862552535530b18)
2017-09-20 10:47:59 +02:00
Franz Pletz
f837532664 p11_kit: don't build documentation
This depends ultimately on texlive which is a big build and depends on
lots of libraries which often get security updates. This triggers
mass rebuilds because systemd depends on gnutls which depends on
p11_kit.

This was introduced with 93d80f1951.

(cherry picked from commit 0a2c39e205)
2017-09-19 22:30:37 +02:00
Benjamin Staffin
609290bd94 slack: 2.7.1 -> 2.8.0 (#29339)
(cherry picked from commit 7e6011083d)
2017-09-19 22:30:37 +02:00
Vincent Demeester
aed3fe9676 runc: 1.0.0-rc3 -> 1.0.0-rc4
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
(cherry picked from commit 19ba982b40)
2017-09-19 22:30:37 +02:00
dywedir
8e0e4d8343 fd: 3.0.0 -> 3.1.0
(cherry picked from commit 72129c2cb4)
2017-09-19 22:30:37 +02:00
John Mercier
2c75bfedae obnam: 1.21 -> 1.22
(cherry picked from commit 90e572f40a)
2017-09-19 22:30:37 +02:00
Edward Tjörnhammar
1564b3284e jetbrains: update.pl, make sure hashes are in base32
(cherry picked from commit add7faf539)
2017-09-19 22:30:37 +02:00
Tuomas Tynkkynen
09bf503231 qt4: Add aarch64 patch
(cherry picked from commit bc850cfed5)
2017-09-19 22:30:36 +02:00
Matthieu Coudron
e27e62b9d1 tshark: init at 2.4.0
as an alias to wireshark-cli

(cherry picked from commit bfd6d20c3e)
2017-09-19 22:30:36 +02:00
zimbatm
f8d73885c3 fixes missing attributes
(cherry picked from commit 3920a44628)
2017-09-19 22:30:36 +02:00
timor
4716b5b442 perl-Term-Animation: init at 2.6
(cherry picked from commit ccfce4b958)
2017-09-19 22:30:36 +02:00
Samuel Leathers
dd83590578 pydub 0.16.7 -> 0.20.0
(cherry picked from commit bef916338d)
2017-09-19 22:30:36 +02:00
rybern
6245eb0ab5 pythonPackages.pomegranate: init at 0.7.7 (#29338)
(cherry picked from commit 1d0c8f8687)
2017-09-19 22:30:36 +02:00
Samuel Leathers
652985b233 eve: 0.6.1 -> 0.7.4
(cherry picked from commit 6d367ba9f3)
2017-09-19 22:30:35 +02:00
Samuel Leathers
7569c375e1 pymongo: 3.0.3 -> 3.5.1
(cherry picked from commit 756cd8a6c4)
2017-09-19 22:30:35 +02:00
Ryan Mulligan
9e36b98c9c matterbridge: fix src hash
I used the wrong source hash because of some kind of metadata problem.
See https://github.com/NixOS/nixpkgs/pull/28892#issuecomment-330344570
for details.

(cherry picked from commit 20f949376f)
2017-09-19 22:30:35 +02:00
Samuel Leathers
69a76a3277 dyn: 1.5.0 -> 1.6.3
(cherry picked from commit 96bd8daebc)
2017-09-19 22:30:35 +02:00
Robert Schütz
1476291405 esptool: 1.3 -> 2.1
(cherry picked from commit 7f89abd820)
2017-09-19 22:30:35 +02:00
Samuel Leathers
58405c1332 awesome-slugify: fixes tests
(cherry picked from commit 7fa2c54a60)
2017-09-19 22:30:35 +02:00
Samuel Leathers
88c71be748 logilab_common: 0.63.2 -> 1.4.1
(cherry picked from commit dce4276d5e)
2017-09-19 22:30:34 +02:00
Samuel Leathers
ccefc74081 logilab-constraint: move to python-modules
(cherry picked from commit 4db4f70be6)
2017-09-19 22:30:34 +02:00
Aneesh Agrawal
2c1879863e radicale: Test migration functionality
This also provides an example of how to migrate.

(cherry picked from commit 28c2cea847)
2017-09-19 22:30:34 +02:00
Aneesh Agrawal
e6d5a7828f radicale: 2.1.2 -> 2.1.6
Radicale 2.1.5 is the first to support the `--verify-storage` option.

(cherry picked from commit 61de150aa8)
2017-09-19 22:30:34 +02:00
Aneesh Agrawal
3e9f43b6f3 radicale: Add extraArgs option to assist in data migration
(cherry picked from commit fcd590d116)
2017-09-19 22:30:34 +02:00
Elis Hirwing
1dad6c1010 gocode: 20170530 -> 20170903
(cherry picked from commit 0eb1fdc50a)
2017-09-19 22:30:33 +02:00
volth
64e3f1f1d3 haxe: 3.4.2 -> 3.4.3
(cherry picked from commit 9efe27ee3b)
2017-09-19 22:30:33 +02:00
Franz Pletz
10b71b2a15 newsbeuter: fix CVE-2017-14500
(cherry picked from commit 38c14d7132)
2017-09-19 22:30:33 +02:00
Franz Pletz
09227354cc gd: 2.2.4 -> 2.2.5 for multiple CVEs
Fixes:
  * CVE-2017-6362
  * CVE-2017-7890
(cherry picked from commit 0653abc07a)
2017-09-19 22:30:33 +02:00
Franz Pletz
3347e007d8 geolite-legacy: 2017-05-26 -> 2017-09-17
(cherry picked from commit c7ed26b6a9)
2017-09-19 22:30:33 +02:00
Franz Pletz
562090ebd6 mirrorbits: init at 0.4
(cherry picked from commit ad13618c9b)
2017-09-19 22:30:33 +02:00
Franz Pletz
70882471df mercurial: 4.3.1 -> 4.3.2
(cherry picked from commit 316858466a)
2017-09-19 22:30:32 +02:00
Franz Pletz
a3f35a270a ssh service: add sftpFlags option
(cherry picked from commit dc08dcf6e7)
2017-09-19 22:30:32 +02:00
Franz Pletz
58f7a2dd41 clawsMail: 3.15.0 -> 3.15.1
(cherry picked from commit a796d692c4)
2017-09-19 22:30:32 +02:00
Franz Pletz
1deeb8b7f2 matterircd: 0.11.4 -> 0.12.0
This version is compatible with our current Mattermost.

(cherry picked from commit 05b1e514bc)
2017-09-19 22:30:32 +02:00
Franz Pletz
950d032311 bluez4: remove, unused and probably vulnerable
(cherry picked from commit 94bbe7db22)
2017-09-19 22:30:32 +02:00
Franz Pletz
c8b1784ed4 bluez: 5.43 -> 5.47 for CVE-2017-1000250
Fixes #29289.

(cherry picked from commit dadb16a57f)
2017-09-19 22:30:32 +02:00
WilliButz
17f97e8c93 grafana: 4.5.0 -> 4.5.1
(cherry picked from commit 8eb3e45f37)
2017-09-19 22:30:31 +02:00
Maximilian König
baf06fd7e6 palemoon: 27.4.1 -> 27.4.2
(cherry picked from commit 460cd80729)
2017-09-19 22:30:31 +02:00
Samuel Leathers
49c2e9dc79 mpi4py: disabling tests
(cherry picked from commit 2f9cb45bd4)
2017-09-19 22:30:31 +02:00
Bastian Köcher
05c5b3b669 teamspeak_client: Adds missing dependency
(cherry picked from commit 34b1e4c3db)
2017-09-19 22:30:31 +02:00
Robert Klotzner
00b7744d46 coturn service: Fix coturn to properly come up (#29415)
properly also in case dhcpcd being used.

Without network-online.target, coturn will fail to listen on addresses that
come up with dhcpcd.

(cherry picked from commit a9f60224f8)
2017-09-19 22:30:31 +02:00
Franz Pletz
e4e7f61d8d nixos/networking: network is online if default gw set
Previously services depending on network-online.target would wait until
dhcpcd times out if it was enabled and a static network address
configuration was used. Setting the default gateway statically is enough
for the networking to be considered online.

This also adjusts the relevant networking tests to wait for
network-online.target instead of just network.target.

(cherry picked from commit b179908414)
2017-09-19 22:30:31 +02:00
Maximilian Güntner
50b5587fe5 tests: ipfs: enable autoMount tests
(cherry picked from commit 44475cae27)
2017-09-19 22:30:30 +02:00
Eric Litak
0f2484c34f ipfs: autoMount working without root
(cherry picked from commit 1a15c5d8c6)
2017-09-19 22:30:30 +02:00
Eric Litak
a8d411e3cb ipfs: workaround for upstream bug; doc fixes
(cherry picked from commit 6324317c76)
2017-09-19 22:30:30 +02:00
Florian Jacob
ddbec38741 nixos/mysql: declarative users & databases
using Unix socket authentication, ensured on every rebuild.

(cherry picked from commit 839e3c7666)
2017-09-19 22:30:30 +02:00
Russell O'Connor
daafea2788 bitcoin: 0.14.0 -> 0.15.0
(cherry picked from commit 08824d7ae0)
2017-09-19 22:30:30 +02:00
Samuel Leathers
e90b75dd2c trollius: fix tests
(cherry picked from commit 3a33ed7c46)
2017-09-19 22:30:30 +02:00
Samuel Leathers
68e20d5871 discogs_client: 2.0.2 -> 2.2.0
(cherry picked from commit 28a9f74769)
2017-09-19 22:30:30 +02:00
Kranium Gikos
66eccc7c23 influxdb service: fixup postStart script to handle TLS
(cherry picked from commit 662b409b72)
2017-09-19 22:30:29 +02:00
Justin Humm
e2197ade16 gollum service: init
(cherry picked from commit b5a5d0ba84)
2017-09-19 22:30:29 +02:00
Samuel Leathers
1ae126fd28 marionette-harness: disable for python 3
(cherry picked from commit 700b0945b1)
2017-09-19 22:30:29 +02:00
Samuel Leathers
ca4c570dfe marionette-driver: disable for python 3
(cherry picked from commit cbea57b9c7)
2017-09-19 22:30:29 +02:00
Samuel Leathers
47a8bddcac interruptingcow: 0.6 -> 0.7
(cherry picked from commit d355b55e82)
2017-09-19 22:30:29 +02:00
Bastian Köcher
45a02ffb91 teamspeak_client: 3.1.4 -> 3.1.6
(cherry picked from commit afa8c106fb)
2017-09-19 22:30:29 +02:00
Yurii Rashkovskii
192a73c5fd awesome: specify version
By default, awesome will use "devel" as a version name
(or `git describe`). This has led to awesome always
showing "devel" for its version.

Some extensions depend on version information to figure
out what features they can use.

This change overrides the version for the build from the
derivations' `version` attribute.

(cherry picked from commit 824b30a715)
2017-09-19 22:30:28 +02:00
Kranium Gikos Mendoza
0afa3c0ddb freeswitch: fix build
(cherry picked from commit 50edaffb0c)
2017-09-19 22:30:28 +02:00
Pascal Bach
594b193c7b arangodb: 3.2.2 -> 3.2.3
(cherry picked from commit 6af8b104fd)
2017-09-19 22:30:28 +02:00
Pascal Bach
f6d4769b34 squid service: intial service based on default config
(cherry picked from commit 2ed89eddf3)
2017-09-19 22:30:28 +02:00
yesbox
071e8251db netdata: 1.5.0 -> 1.7.0
(cherry picked from commit 6b3d9144b0)
2017-09-19 22:30:28 +02:00
k0ral
0bee7f3c25 youtube-dl: 2017.08.27 -> 2017.09.15
(cherry picked from commit 579a190cfd)
2017-09-19 22:30:28 +02:00
Rodney Lorrimar
f3c517d5e0 nixos/gogs: Fix module when no passwords provided
If neither database.password or database.passwordFile were provided,
it would try and fail to coerce null to a string.

This fixes the situation where there is no password for the database.

Resolves #27950

(cherry picked from commit 6460e459de)
2017-09-19 22:30:27 +02:00
Jörg Thalheim
841b32a49e libwebsockets: fix eval
(cherry picked from commit 6d423da7cc)
2017-09-19 21:16:48 +01:00
Volth
910eb529a0 mosquitto: 1.4 -> 1.4.14
fixes #29567

(cherry picked from commit 6950da832d)
2017-09-19 20:35:23 +01:00
volth
9383721f46 libwebsockets: 1.4 -> 2.3.0
(cherry picked from commit 4916f64948)
2017-09-19 20:35:23 +01:00
Graham Christensen
97452cc795 Convert libs to a fixed-point
This does break the API of being able to import any lib file and get
its libs, however I'm not sure people did this.

I made this while exploring being able to swap out docFn with a stub
in #2305, to avoid functor performance problems. I don't know if that
is going to move forward (or if it is a problem or not,) but after
doing all this work figured I'd put it up anyway :)

Two notable advantages to this approach:

1. when a lib inherits another lib's functions, it doesn't
   automatically get put in to the scope of lib
2. when a lib implements a new obscure functions, it doesn't
   automatically get put in to the scope of lib

Using the test script (later in this commit) I got the following diff
on the API:

  + diff master fixed-lib
  11764a11765,11766
  > .types.defaultFunctor
  > .types.defaultTypeMerge
  11774a11777,11778
  > .types.isOptionType
  > .types.isType
  11781a11786
  > .types.mkOptionType
  11788a11794
  > .types.setType
  11795a11802
  > .types.types

This means that this commit _adds_ to the API, however I can't find a
way to fix these last remaining discrepancies. At least none are
_removed_.

Test script (run with nix-repl in the PATH):

  #!/bin/sh

  set -eux

  repl() {
      suff=${1:-}
      echo "(import ./lib)$suff" \
          | nix-repl 2>&1
  }

  attrs_to_check() {
      repl "${1:-}" \
          | tr ';'  $'\n' \
          | grep "\.\.\." \
          | cut -d' ' -f2 \
          | sed -e "s/^/${1:-}./" \
          | sort
  }

  summ() {
      repl "${1:-}" \
          | tr ' ' $'\n' \
          | sort \
          | uniq
  }

  deep_summ() {
      suff="${1:-}"
      depth="${2:-4}"
      depth=$((depth - 1))
      summ "$suff"

      for attr in $(attrs_to_check "$suff" | grep -v "types.types"); do
          if [ $depth -eq 0 ]; then
              summ "$attr" | sed -e "s/^/$attr./"
          else
              deep_summ "$attr" "$depth" | sed -e "s/^/$attr./"
          fi
      done
  }

  (
      cd nixpkgs

      #git add .
      #git commit -m "Auto-commit, sorry" || true
      git checkout fixed-lib
      deep_summ > ../fixed-lib
      git checkout master
      deep_summ > ../master
  )

  if diff master fixed-lib; then
      echo "SHALLOW MATCH!"
  fi

  (
      cd nixpkgs
      git checkout fixed-lib
      repl .types
  )

(cherry picked from commit 152c63c9ff)
2017-09-19 10:53:10 -04:00
Peter Simons
db849d3c66 haskell-generic-builder: rename withBenchmarkDepends argument to doBenchmark
This partially undoes the change from 8788bfe762.
The 'doBenchmark' name is more consistent with the naming scheme used for
other phases, like 'doCheck', 'doHaddock', etc.

(cherry picked from commit 33e34aa95b)
2017-09-19 15:46:35 +02:00
Robin Gloster
fb16e57508 dmtcp: fix buffer overflow due to too long ld-linux.so path
fixes #29565

(cherry picked from commit 5c18c55062)
2017-09-19 13:42:48 +02:00
Joachim Fasting
4a524b55ec tor: 0.3.0.10 -> 0.3.1.7
(cherry picked from commit 1ee60e98e2)
2017-09-19 13:32:29 +02:00
dywedir
9c9a10650c feh: 2.19.3 -> 2.20
(cherry picked from commit 1b261730f2)
2017-09-19 13:32:23 +02:00
Robert Hensing
4f7e6a2c20 arelle: enable only on python 3.4 2017-09-19 13:15:10 +02:00
Rob Vermaas
06896f2648 keybase: update to 1.0.30 2017-09-19 07:34:35 +00:00
Jonathan Rudenberg
4197ff7086 kodiPlugins: fix path for shared object links
Signed-off-by: Jonathan Rudenberg <jonathan@titanous.com>
2017-09-19 08:13:14 +02:00
Tuomas Tynkkynen
f5daefbef6 linuxPackages.mxu11x0: Mark broken on >= 4.13
https://hydra.nixos.org/build/61465503
(cherry picked from commit 779aea8868)
2017-09-19 08:43:31 +03:00
Tuomas Tynkkynen
b54190b8ac linuxPackages.cryptodev: Mark broken on >= 4.13
https://hydra.nixos.org/build/61470492
(cherry picked from commit 3e495bfd94)
2017-09-19 08:43:30 +03:00
Franz Pletz
5fa2fe91c0 Merge branch 'staging-17.09' into release-17.09 2017-09-19 01:36:17 +02:00
Rodney Lorrimar
9e0896334c pythonPackages.unidecode: 0.04.18 -> 0.04.21
Higher version is a requirement of textacy.

(cherry picked from commit 151d0fde19)
2017-09-18 23:20:32 +02:00
Daiderd Jordan
c7957215e0 gperftools: fix darwin build
(cherry picked from commit 69bf06ad6c)
2017-09-18 22:29:45 +02:00
Daiderd Jordan
17c6710100 nmap: patch vendored libz for darwin
(cherry picked from commit 6b7e103870)
2017-09-18 22:04:36 +02:00
Franz Pletz
50bd460ddc Revert "libreoffice-still: 5.2.6.2 -> 5.3.6.1"
This reverts commit fcec6aec78.
2017-09-18 20:14:22 +02:00
Franz Pletz
c9202ce956 Revert "libreoffice-fresh: 5.3.1.2 -> 5.4.1.2; fixes #29379"
This reverts commit 2c131c5e16.
2017-09-18 20:14:14 +02:00
Franz Pletz
ee18a31907 Revert "xmlsec: 1.2.23 -> 1.2.25; enable nss (for LO)"
This reverts commit ab526141b0.
2017-09-18 20:14:05 +02:00
Franz Pletz
3dba8b2a29 potrace: 1.14 -> 1.15
Fixes CVE-2017-12067 and other security issues.

Fixes NixOS/security#107.

(cherry picked from commit ede0ecdc69)
2017-09-18 20:13:44 +02:00
Frederik Rietdijk
9dee43f188 python27: support test/support
In the maintenance release bump in
90059701a8 a certain change to /test/ was
backported from Python 3:

- bpo-30207: To simplify backports from Python 3, the test.test_support
  module was converted into a package and renamed to test.support.  The
  test.script_helper module was moved into the test.support package.
  Names test.test_support and test.script_helper are left as aliases to
  test.support and test.support.script_helper.

(cherry picked from commit 96d15eaddb)
2017-09-18 19:46:41 +02:00
Frederik Rietdijk
b516a2e4fb python.pkgs.subprocess32: 3.2.6 -> 3.2.7
(cherry picked from commit bebdd7ac61)
2017-09-18 19:46:31 +02:00
Frederik Rietdijk
e532d32e03 python27: 2.7.13 -> 2.7.14
The enosys patch is not needed anymore since the patch is included in
this maintenance release.

(cherry picked from commit 90059701a8)
2017-09-18 19:46:21 +02:00
Josef Kemetmueller
f8f126b9a1 valgrind: Fix darwin build
The bzero-patch was merged upstream in
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16103, so it does no
longer apply.

Additionally - to make the build succeed on darwin systems more recent
than our nixpkgs.darwin.xnu kernel version - we need to teach the build
the version of the xnu headers we provide, instead of letting the build
figure out the actual system version using `uname -r`.

(cherry picked from commit c71fd76822)
(cherry picked from commit cab5d25d3081a6d13773264000a308a7e07938b8)
2017-09-18 18:53:54 +02:00
Franz Pletz
e7d8bc1574 apacheHttpd: fix CVE-2017-9798 (Optionsbleed)
https://blog.fuzzing-project.org/60-Optionsbleed-HTTP-OPTIONS-method-can-leak-Apaches-server-memory.html
(cherry picked from commit c9d11b8a1d)
2017-09-18 16:04:29 +02:00
gwitmond
670b4e29ad nixos: add option for bind to not resolve local queries (#29503)
When the user specifies the networking.nameservers setting in the
configuration file, it must take precedence over automatically
derived settings.

The culprit was services.bind that made the resolver set to
127.0.0.1 and ignore the nameserver setting.

This patch adds a flag to services.bind to override the nameserver
to localhost. It defaults to true. Setting this to false prevents the
service.bind and dnsmasq.resolveLocalQueries settings from
overriding the users' settings.

Also, when the user specifies a domain to search, it must be set in
the resolver configuration, even if the user does not specify any
nameservers.
2017-09-18 13:21:44 +02:00
Franz Pletz
49c3ca3f05 Revert "cppunit: 1.14.0"
This reverts commit 12f460962b.
2017-09-18 02:01:14 +02:00
Daiderd Jordan
3ff962d844 gcc: add gccStdenv for darwin
(cherry picked from commit a5168fe457)
2017-09-17 20:06:56 +02:00
Daiderd Jordan
2cbe9488ff darwin-frameworks: move fixup setup-hook
(cherry picked from commit 5a28fd660a)
2017-09-17 19:10:14 +02:00
Daiderd Jordan
f4af3c5408 darwin-frameworks: use the system CF when frameworks are used
This will get propagated down to other libraries loaded because
everything in nixpkgs references CF based on an rpath entry.

(cherry picked from commit cc1bfbd9a7)
2017-09-17 19:10:13 +02:00
Daiderd Jordan
285ed1fdae darwin-CF: use @rpath for library id and add an rpath entry for CF based on NIX_COREFOUNDATION_RPATH
(cherry picked from commit 92652b4d79)
2017-09-17 19:10:13 +02:00
lassulus
07b24cc2e5 altcoins: remove obsolete boost override
(cherry picked from commit 077dd9fca3)
2017-09-17 18:37:18 +02:00
Michael Raskin
fcec6aec78 libreoffice-still: 5.2.6.2 -> 5.3.6.1
(cherry picked from commit ea1d5e9c7a)
2017-09-17 18:33:27 +02:00
Vaibhav Sagar
4d0052dbfb nginx-modules: remove unused fetchpatch
(cherry picked from commit 70eb31c853)
2017-09-17 18:32:28 +02:00
romildo
5976b3514d gnome-shell-extensions: enable all extensions
(cherry picked from commit 349782cee4)
2017-09-17 18:31:44 +02:00
rnhmjoj
0c53e6b7b7 lua-nginx-module: 0.10.5 -> 0.10.10
(cherry picked from commit d0aa64a8e2)
2017-09-17 18:31:25 +02:00
Michael Raskin
2c131c5e16 libreoffice-fresh: 5.3.1.2 -> 5.4.1.2; fixes #29379
(cherry picked from commit 08b1bc9fcb)
2017-09-17 18:31:18 +02:00
Michael Raskin
12f460962b cppunit: 1.14.0
(cherry picked from commit 02f439d062)
2017-09-17 18:31:12 +02:00
Michael Raskin
ab526141b0 xmlsec: 1.2.23 -> 1.2.25; enable nss (for LO)
(cherry picked from commit 44db65d61c)
2017-09-17 18:30:40 +02:00
Vladimír Čunát
90b1a1ad37 gtkmm3: maintenance 3.22.0 -> 3.22.2
(cherry picked from commit 222e18698a)
2017-09-17 18:28:34 +02:00
Eelco Dolstra
96a3fda34a blender: Fix CUDA support
CUDA toolkit 8 doesn't support gcc 6, so we have to build opensubdiv
and blender with gcc 5.

(cherry picked from commit afc0218ecd)
2017-09-17 18:28:26 +02:00
Eelco Dolstra
43e2f2087c cudatoolkit: Move libcudart to a separate output
This prevents opensubdiv (and thus blender) from having all of
cudatoolkit in its closure.

(cherry picked from commit bb1c9b027d)
2017-09-17 18:28:26 +02:00
Eelco Dolstra
e7114a503f opencollada: 1.3 -> 1.6.59
(cherry picked from commit 63f3b35204)
2017-09-17 18:28:26 +02:00
Eelco Dolstra
5845606631 openimage: 1.7.12 -> 1.7.17
(cherry picked from commit 9f740f1f7c)
2017-09-17 18:27:48 +02:00
Georges Dubus
66ae29c09e nox: 0.0.5 -> 0.0.6
(cherry picked from commit 94400c0cd2)
2017-09-17 18:27:33 +02:00
aszlig
6f03d690fa krita: 3.1.4 -> 3.2.1
New features since version 3.2.0:

  * G'MIC Plugin
  * Touch Painting
  * Smart Patch Tool
  * New Brush Presets

The full release notes can be found at:

https://krita.org/en/release-notes-for-krita-3-2/

Version 3.2.1 contains these fixes:

  * Crash on startup if only OpenGL 2.1 is found: if you had to disable
    opengl for 3.2.0, you can try to enable it again
  * A crash when changing layer types in the gmic-qt plugin
  * A bug where gmic-qt could crash on odd-sized images
  * A regression where using the text tool would break the brush tool
  * The option to use the native platform's file dialogs was restored
  * A bug where selecting the line tool would disable the flow slider
  * Some issues with the LUT docker were fixed

Upstream release notes for 3.2.1:

https://krita.org/en/item/krita-3-2-1-released/

I've dropped the patch, because it was already from the upstream
development version and thus is also included in this release.

Built and tested using a few images and just playing around with a few
new features.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Cc: @abbradar, @Mic92, @kragniz
(cherry picked from commit 8180085733)
2017-09-17 18:27:14 +02:00
Joachim Fasting
15abcf6237 nixos/tests: move sysctl test to misc
(cherry picked from commit c85cf60c83)
2017-09-17 18:26:32 +02:00
Jaka Hudoklin
b677fa83d3 pkgs/telepresence: init at 0.65
(cherry picked from commit 18245fd222)
2017-09-17 18:25:54 +02:00
Ryan Mulligan
b81ef1e31d matterbridge, modules/matterbridge: init at 1.1.0
(cherry picked from commit 9c786d82f2)
2017-09-17 18:25:27 +02:00
adisbladis
6c60ce8f8b caddy: 0.10.7 -> 0.10.9
(cherry picked from commit 9ede0dea45)
2017-09-17 18:24:54 +02:00
Matt McHenry
73f34f1c7a systemd: better document enabled, wantedBy, and requiredBy (#29453)
the systemd.unit(5) discussion of wantedBy and requiredBy is in the
[Install] section, and thus focused on stateful 'systemctl enable'.
so, clarify that in NixOS, wantedBy & requiredBy are still what most
users want, and not to be confused with enabled.

(cherry picked from commit cfbac1beb4)
2017-09-17 18:24:07 +02:00
Cray Elliott
2f7733c20e zandronum: fix soundfont support, minor cleanup
also add myself to maintainers

(cherry picked from commit 8080285966)
2017-09-17 18:22:12 +02:00
Jörg Thalheim
a3793f7a1f kerberos: store state in /var/lib instead of $out/var
(cherry picked from commit 0016d925e4)
2017-09-17 18:20:51 +02:00
Tuomas Tynkkynen
545d8e7cb4 sd-image-aarch64: Increase CMA memory so RPi3 virtual console works again
(cherry picked from commit c8e7aab0c8)
2017-09-17 18:19:46 +02:00
Cray Elliott
41882d76f4 zandronum: 2.1.2 -> 3.0
remove sqlite-amalgamation and put it internal to the zandronum folder,
as it is only used by zandronum. Patches needed to avoid build impurities
and to get the correct protocol version to connect to public servers.

remove zandronum_bin as it is no longer needed

(cherry picked from commit 990ea8789d)
2017-09-17 18:19:46 +02:00
Cray Elliott
6091fa7c3d doomseeker: 1.0 -> 1.1
(cherry picked from commit ae624c89c1)
2017-09-17 18:19:46 +02:00
Daniel Fullmer
8fbd366a0c gocr: Install libraries and includes
(cherry picked from commit 6182b67228)
2017-09-17 18:19:45 +02:00
Samuel Leathers
ccc94bfd3c cram: fix ignored tests causing failures
(cherry picked from commit a4633ca5a3)
2017-09-17 18:19:45 +02:00
joachim schiele
4ddf1959d0 dovecot2: added quota, changed pop3 default
(cherry picked from commit 7904499542)
2017-09-17 18:19:45 +02:00
Jörg Thalheim
f6d4327d55 zfsUnstable: init at 2017-09-12
(cherry picked from commit 1ecf3e862f)
2017-09-17 18:19:45 +02:00
lassulus
d89d8e818c tinc_pre: 1.1pre14 -> 1.1pre15
Remove an obsolete patch
Add lassulus to maintainers
Supply the build with the correct version number and changelog

(cherry picked from commit f4dfa30d24)
2017-09-17 18:19:45 +02:00
WilliButz
48cd0f7bbf grafana: 4.4.3 -> 4.5.0
(cherry picked from commit e13e3dd2fb)
2017-09-17 18:19:45 +02:00
Maximilian Güntner
79b92d787c emscriptenfastcomp: move wrap magic to own file, use newScope
(cherry picked from commit 8550e4e520)
2017-09-17 18:19:45 +02:00
Linus Heckemann
787bf9292f nixos-install: use FIFO for system closure
This avoids running out of space in space-constrained environments,
e.g. VMs with relatively small amounts of memory and tmp on tmpfs

(cherry picked from commit 77ce02201e)
2017-09-17 18:19:44 +02:00
Linus Heckemann
d0edf75d99 nixos-install: only search for nixpkgs when needed
(cherry picked from commit 8b1f1d93fa)
2017-09-17 18:19:44 +02:00
Eelco Dolstra
887d60d5aa nix: 1.11.14 -> 1.11.15
(cherry picked from commit 6dad1f70ce)
2017-09-17 18:19:44 +02:00
Joachim Fasting
e6dfef0eda tinycc: 0.9.27pre-20170821 -> 0.9.27pre-20170911
Contains various fixes.

(cherry picked from commit 3f7ac92175)
2017-09-17 18:19:44 +02:00
Michael Fellinger
62e6dcf20b ruby: 2.4.1 -> 2.4.2 (#29417)
(cherry picked from commit 2edb7e9b2d)
2017-09-17 18:19:44 +02:00
Robert Schütz
4d2f667df3 abcMIDI: init at 2017.06.10
(cherry picked from commit 608045aed5)
2017-09-17 18:19:44 +02:00
Muhammad Herdiansyah
a45d99a1b2 neofetch: 3.2.0 -> 3.3.0
(cherry picked from commit 25944370e1)
2017-09-17 18:19:43 +02:00
Muhammad Herdiansyah
b92266c1db maintainer: change email
(cherry picked from commit 0e09b79bcc)
2017-09-17 18:19:43 +02:00
Lancelot SIX
9ce29fd755 xorriso: 1.4.6 -> 1.4.8
See http://lists.gnu.org/archive/html/info-gnu/2017-09/msg00009.html
for release information

(cherry picked from commit 259d61b34a)
2017-09-17 18:19:43 +02:00
Nadrieril
33a014211a bitlbee-facebook: 1.1.1 -> 1.1.2
(cherry picked from commit d0090c0941)
2017-09-17 18:19:43 +02:00
adisbladis
5a98afc530 go-ethereum: 1.6.7 -> 1.7.0
(cherry picked from commit 090947b285)
2017-09-17 18:19:43 +02:00
romildo
030ff06053 clearlooks-phenix: 5.0.7 -> 7.0.1
(cherry picked from commit 17c3599ee3)
2017-09-17 18:19:43 +02:00
romildo
534a0a8880 numix-gtk-theme: 2017-02-15 -> 2017-07-26
(cherry picked from commit 32f7c567cd)
2017-09-17 18:19:42 +02:00
romildo
5ba3e43924 zuki-themes: 3.24.2017-06-26 -> 3.24-2
- Update to version 3.24-2, released on 2017 Aug 3

- Remove versions for GNOME 3.22 and 3.20. The version for 3.24 should
  work with them as well.

(cherry picked from commit 6319210b8a)
2017-09-17 18:19:42 +02:00
Gabriel Ebner
ba17627adb lean: 3.2.0 -> 3.3.0
(cherry picked from commit aad00e35db)
2017-09-17 18:19:42 +02:00
Cray Elliott
f74cb90455 ffmpeg, ffmpeg-full: 3.3.3 -> 3.3.4
(cherry picked from commit 739b4091cf)
2017-09-17 18:19:42 +02:00
Tuomas Tynkkynen
0cbb125748 diffoscope: Move cbfstool and poppler_utils to bloat category
(cherry picked from commit 0dc4672d36)
2017-09-17 18:19:42 +02:00
Tuomas Tynkkynen
79862c96c0 diffoscope: Add even more tools
(cherry picked from commit 2581865717)
2017-09-17 18:19:42 +02:00
Kamil Chmielewski
ecbbef8c7b ponyc: 0.19.0 -> 0.19.1
https://github.com/ponylang/ponyc/issues/2226
(cherry picked from commit a2666e3668)
2017-09-17 18:19:41 +02:00
Peter Hoeg
2874ab06dd pdf2odt: 20141217 -> 20170207
(cherry picked from commit d29a8f25c3)
2017-09-17 18:19:41 +02:00
Jörg Thalheim
04d81781b0 vimPlugins.nvim-completion-manager: init at 2017-09-05
(cherry picked from commit 5c544b8c78)
2017-09-17 18:19:41 +02:00
Jörg Thalheim
c2769d7388 vimPlugins.vim-devicons: init at 2017-05-29
(cherry picked from commit e477fa94b5)
2017-09-17 18:19:41 +02:00
romildo
9ee486ec9d adapta-gtk-theme: 3.91.2.10 -> 3.91.2.147
(cherry picked from commit 9b985dfb2f)
2017-09-17 18:19:41 +02:00
Jörg Thalheim
fc592b13ad perlPackages.SCGI: init at 0.6
(cherry picked from commit 4addea54ae)
2017-09-17 18:19:41 +02:00
Jörg Thalheim
97e5fa4cb1 perlPackages.ProtocolHTTP2: init at 1.08
(cherry picked from commit 9b960686bf)
2017-09-17 18:19:40 +02:00
Jörg Thalheim
86071abcb9 perlPackages.HTTPDAV: init at 0.44
(cherry picked from commit 94dc132ff9)
2017-09-17 18:19:40 +02:00
Jörg Thalheim
afd1a906aa perlPackages.TermReadKey: 2.31 -> 2.37
(cherry picked from commit 068fd9fb8e)
2017-09-17 18:19:40 +02:00
Peter Hoeg
9616c99871 mtr: 0.87 -> 0.92
(cherry picked from commit 68764d50b3)
2017-09-17 18:19:40 +02:00
Robert Helgesson
a9a39a201d josm: minor cleanups
- Use `makeWrapper` to generate wrapper script.

- Use `buildCommand` instead of explicit phases.`

(cherry picked from commit 2a36c6c185)
2017-09-17 18:19:40 +02:00
Robert Helgesson
abda418b45 josm: 12545 -> 12712
(cherry picked from commit fd4d957ac4)
2017-09-17 18:19:40 +02:00
Robert Helgesson
b7bab3ca98 cloc: add myself as maintainer
(cherry picked from commit a3a8887b7f)
2017-09-17 18:19:39 +02:00
Robert Helgesson
1173b76249 cloc: 1.72 -> 1.74
(cherry picked from commit d35e4439dd)
2017-09-17 18:19:39 +02:00
zraexy
1b801b8acd streamlink: 0.7.0 -> 0.8.1
(cherry picked from commit e87a72caef)
2017-09-17 18:19:39 +02:00
AndersonTorres
d11e20300a mgba: 0.5.2 -> 0.6.0
(cherry picked from commit 4a67ee9893)
2017-09-17 18:19:39 +02:00
Peter Hoeg
7edb3f1fe5 neomutt: 20170907 -> 20170912
(cherry picked from commit addfb83852)
2017-09-17 18:19:39 +02:00
Sarah Brofeldt
56cb9ef008 s3fs: 1.80 -> 1.82
(cherry picked from commit fc2566e966)
2017-09-17 18:19:39 +02:00
geistesk
05bd6d0549 racket: 6.10 -> 6.10.1
(cherry picked from commit af2ceaf63c)
2017-09-17 18:19:38 +02:00
Frank Doepper
d54a6379ee oysttyer: init at 2.9.1
A Perl Console Twitter Client

(cherry picked from commit 9c4233f7b6)
2017-09-17 18:19:38 +02:00
Tim Steinbach
db92b49ade atom: 1.19.7 -> 1.20.0
(cherry picked from commit 3d812d2037)
2017-09-17 18:19:38 +02:00
Jan Tojnar
7dd575d610 meson: 0.41.2 → 0.42.1
(cherry picked from commit ad8e4c272a)
2017-09-17 18:19:38 +02:00
Emanuele Peruffo
ddf427ec42 epson-alc1100: init at version 1.2-0
Driver for printer Epson AcuLaser C1100

(cherry picked from commit 03187c3e15)
2017-09-17 18:19:38 +02:00
Jan Tojnar
75bc3407dd sublime3: 3126 → 3143
(cherry picked from commit 74065fc780)
2017-09-17 18:19:38 +02:00
Tuomas Tynkkynen
74ca4b651f strace: 4.18 -> 4.19
(cherry picked from commit 1e84bb90d4)
2017-09-17 18:19:37 +02:00
Yann Hodique
5bfb2a80af hugo: 0.27 -> 0.27.1
(cherry picked from commit 85f3834bad)
2017-09-17 18:19:37 +02:00
Robin Gloster
55f626fbb6 nixos/redmine: fix create role
postgresql create role no longer supports NOCREATEUSER option. See
https://www.postgresql.org/docs/9.6/static/release-9-6.html for
details.

(cherry picked from commit f5e0e94b2a)
2017-09-17 18:19:37 +02:00
Matthias Beyer
7e71499756 bean-add: 2017-04-16 -> 2017-09-13
(cherry picked from commit b0237f767e)
2017-09-17 18:19:37 +02:00
Matthias Beyer
195b25c23a rtv: 1.15.1 -> 1.18.0
Disable tests, which try to access the network.

(cherry picked from commit 8c1403066c)
2017-09-17 18:19:37 +02:00
Matthias Beyer
48aaf6237a mdp: 1.0.9 -> 1.0.10
(cherry picked from commit 495dbc2cc2)
2017-09-17 18:19:37 +02:00
Matthias Beyer
f10058e774 ctodo: 1.2 -> 1.3
(cherry picked from commit 30a1e189ac)
2017-09-17 18:19:36 +02:00
Matthias Beyer
36de5d341b buku: 3.0 -> 3.3.1
(cherry picked from commit 678c149e53)
2017-09-17 18:19:36 +02:00
Matthias Beyer
cfbe0fb72b toot: 0.13.0 -> 0.15.0
(cherry picked from commit 56cf561581)
2017-09-17 18:19:36 +02:00
Ryan Mulligan
cc7c4bb36f nixos/mattermost: fix create role
postgresql create role no longer supports NOCREATEUSER option. See
https://www.postgresql.org/docs/9.6/static/release-9-6.html for
details.

(cherry picked from commit 8585898909)
2017-09-17 18:19:36 +02:00
Ryan Mulligan
68374e59aa mattermost: 3.8.2 -> 4.1.0
(cherry picked from commit 65ee687439)
2017-09-17 18:19:36 +02:00
Gabriel Adomnicai
87a687d101 meteor: 1.4.2.3 -> 1.5 (#28905)
(cherry picked from commit 49eb1664d8)
2017-09-17 18:19:36 +02:00
Domen Kožar
f64a4878eb Add atom-beta
(cherry picked from commit 4ffa9ace43)
2017-09-17 18:19:35 +02:00
Symphorien Gibol
ae046076e4 bombono: init at 1.2.4
(cherry picked from commit 945f346f60)
2017-09-17 18:19:35 +02:00
Vincent Laporte
daa0ccd626 proverif: 1.95 -> 1.97pl1
(cherry picked from commit cc5491d02c)
2017-09-17 18:19:35 +02:00
geistesk
935dbdc30a nixos/fireqos: add service
(cherry picked from commit 2316f16ac0)
2017-09-17 18:19:35 +02:00
geistesk
8df4af5e4d firehol: init at 3.1.4
(cherry picked from commit f84a8fb605)
2017-09-17 18:19:35 +02:00
geistesk
b7e4dd7f8a iprange: init at 1.0.3
(cherry picked from commit 5e25459144)
2017-09-17 18:19:35 +02:00
Michael Alan Dorman
b273ab6454 melpa-packages: 2017-09-13
Removals:
 - debian-bug: removed from melpa
 - debian-changelog-mode: removed from melpa
 - rcirc-color: removed from melpa
 - sentence-highlight: removed from melpa
(cherry picked from commit 9feb5bdf06)
2017-09-17 18:19:34 +02:00
Michael Alan Dorman
f5afacd499 melpa-stable-packages: 2017-09-13
Removals:
 - sentence-highlight: removed from melpa
(cherry picked from commit b9eb2d3348)
2017-09-17 18:19:34 +02:00
Michael Alan Dorman
4b9ba2c1ad org-packages: 2017-09-13
(cherry picked from commit cfe5664e04)
2017-09-17 18:19:34 +02:00
Michael Alan Dorman
21cced0782 elpa-packages: 2017-09-13
(cherry picked from commit bae9557826)
2017-09-17 18:19:34 +02:00
Silvan Mosberger
7ba40a38ed s-tui: init at 0.6.0
(cherry picked from commit 753d114b34)
2017-09-17 18:19:33 +02:00
Tuomas Tynkkynen
02886260f7 afl: 2.48b -> 2.51b
(cherry picked from commit 42a3be191d)
2017-09-17 18:19:33 +02:00
Tuomas Tynkkynen
827c4689c7 _915resolution: Only works on x86
https://hydra.nixos.org/build/60928068
(cherry picked from commit 204a15ec42)
2017-09-17 18:19:33 +02:00
Tuomas Tynkkynen
2c1436ac02 libsmbios: Only works on x86
https://hydra.nixos.org/build/60942499
(cherry picked from commit 9aa998eb48)
2017-09-17 18:19:33 +02:00
Tuomas Tynkkynen
6224ed46f2 reptyr: Only works on x86
https://hydra.nixos.org/build/60933200
(cherry picked from commit 4f34a3b230)
2017-09-17 18:19:33 +02:00
Tuomas Tynkkynen
c02952a8b3 seabios: Only works on x86
https://hydra.nixos.org/build/60949790
(cherry picked from commit 84544c5bc2)
2017-09-17 18:19:33 +02:00
Tuomas Tynkkynen
1fea5575c8 syslinux: Only works on x86
https://hydra.nixos.org/build/60930963
(cherry picked from commit f567d0a5a6)
2017-09-17 18:19:32 +02:00
Tuomas Tynkkynen
d55ec1aad2 x86info: only works on x86
https://hydra.nixos.org/build/60931250
(cherry picked from commit 21298fd3f7)
2017-09-17 18:19:32 +02:00
dywedir
8e7ea87607 mpv: 0.26.0 -> 0.27.0
(cherry picked from commit 15002fbf7e)
2017-09-17 18:19:32 +02:00
Robert Schütz
b14457605c seafile-client: add optional Shibboleth support
(cherry picked from commit 7cceee29fb)
2017-09-17 18:19:32 +02:00
Peter Hoeg
2149004768 arc-theme: docs were going to the wrong directory
(cherry picked from commit 3f56114223)
2017-09-17 18:19:32 +02:00
Winnie Quinn
1adc4dd110 aspcud: add darwin platform support
This works because `gringo` now builds on Darwin.

(cherry picked from commit abeb6af482)
2017-09-17 18:19:32 +02:00
Orivej Desh
96e838764f aseprite: install desktop icons
(cherry picked from commit 247fa20962)
2017-09-17 18:19:31 +02:00
Orivej Desh
6b59cddaeb aseprite unfree: init at 1.2-beta12
(cherry picked from commit f0483d59f3)
2017-09-17 18:19:31 +02:00
Orivej Desh
74ed524310 aseprite: 0.9.5 -> 1.1.7
(cherry picked from commit 05eb7ba6e4)
2017-09-17 18:19:31 +02:00
Tristan Helmich
5964f952b5 graylogPlugins: update and add plugins
(cherry picked from commit ea5e03085a)
2017-09-17 18:19:31 +02:00
Yann Hodique
395c626161 hugo: 0.26 -> 0.27
(cherry picked from commit ebf1f8c4e6)
2017-09-17 18:19:31 +02:00
Daiderd Jordan
18fc3525af nginx: disable pie on darwin
(cherry picked from commit 734788b71d)
2017-09-17 18:19:31 +02:00
Franz Pletz
c99d568261 ncurses: 6.0-20170729 -> 6.0-20170902
Fixes issues with xterm terminfo.

(cherry picked from commit fea02e30f1)
2017-09-17 18:19:30 +02:00
Maximilian Güntner
a2238d2ea2 samba: 4.6.4 -> 4.6.7
(cherry picked from commit e6353a82bf)
2017-09-17 18:19:30 +02:00
Robin Gloster
43ea0d6dc0 systemd: use fetchpatch for patch with the correct hash
the fetchurl failed on hydra sometimes

(cherry picked from commit 61733ed6cc)
2017-09-17 18:19:30 +02:00
Vladimír Čunát
22852e0627 pango: maintenance 1.40.9 -> 1.40.11
(cherry picked from commit daa12ab7b9)
2017-09-17 18:19:30 +02:00
Vladimír Čunát
e8e53043ca mesa: maintenance 17.1.7 -> 17.1.8
(cherry picked from commit 6d2d7d5f46)
2017-09-17 18:19:30 +02:00
Tim Steinbach
4bb826c760 gnutls: 3.5.14 -> 3.5.15
(cherry picked from commit 5c66a4e221)
2017-09-17 18:19:30 +02:00
Frederik Rietdijk
a729a1d933 systemd: use fetchurl for patch
because a hash corresponding to fetchurl was provided.

(cherry picked from commit 91ede67a5a)
2017-09-17 18:19:29 +02:00
teh
35e06baae7 systemd: add patch to fix suspend.target
(cherry picked from commit 3e50f0ae0e)
2017-09-17 18:19:29 +02:00
Matthew Robbetts
a62fbe0922 openldap: Fix build with LibreSSL.
(cherry picked from commit e82cb3dfa4)
2017-09-17 18:19:29 +02:00
Casey Rodarmor
3c42f36ff5 ncurses: put tic binary in bin
(cherry picked from commit 555900081d)
2017-09-17 18:19:29 +02:00
WilliButz
e7ffb76a75 highlight: 3.35 -> 3.39
(cherry picked from commit 5b36d3993f)
2017-09-17 18:19:29 +02:00
Jörg Thalheim
a3f5e1c642 openssh: update gssapi patch
(cherry picked from commit 7786aab173)
2017-09-17 18:19:29 +02:00
gnidorah
50e57c4e59 maxx: allow launching individual components
(cherry picked from commit d627ded461)
2017-09-17 18:19:29 +02:00
yesbox
74d1043c9b jackett: 0.7.1308 -> 0.8.151
(cherry picked from commit e70e5de2c7)
2017-09-17 18:19:28 +02:00
Chris Burr
11dbd1876f dns-root-data: 2017-07-26 -> 2017-08-29
(cherry picked from commit 0b356dfb75)
2017-09-17 18:19:28 +02:00
Jörg Thalheim
be8038d7ec cheat: 2.2.0 -> 2.2.1
(cherry picked from commit 7f2f427e8f)
2017-09-17 18:19:28 +02:00
mingchuan
28f6b7fba5 spin: 6.4.6 -> 6.4.7
(cherry picked from commit cb8bfbdbba)
2017-09-17 18:19:28 +02:00
Edward Tjörnhammar
5cd35fe367 i2pd: 2.14.0 -> 2.15.0
(cherry picked from commit 90e78aafad)
2017-09-17 18:19:28 +02:00
Edward Tjörnhammar
fe0ea07417 nixos, i2pd: nat option, default true
(cherry picked from commit 847ce53ab1)
2017-09-17 18:19:28 +02:00
timor
5218059660 physlock: 0.5 -> 11-dev
Update physlock to a more current version which supports PAM and
systemd-logind.  Amongst others, this should work now with the slim
login manager without any additional configuration, because it does
not rely on the utmp mechanism anymore.

(cherry picked from commit ae87a30a83)
2017-09-17 18:19:27 +02:00
Orivej Desh
c6425e3c2b gopherclient: init at 2016-10-02
(cherry picked from commit e47543f1be)
2017-09-17 18:19:27 +02:00
Winnie Quinn
8c23e20e23 gringo: add darwin platform support
(cherry picked from commit a1013287f3)
2017-09-17 18:19:27 +02:00
Jörg Thalheim
141e50fdac buildbot-full: also include wsgi-dashboards
(cherry picked from commit 6844b1375b)
2017-09-17 18:19:27 +02:00
Artem Kazakov
9bb346312d buildbot: add wsgi dashboards plugin
fixes #29236

(cherry picked from commit 60709abb82)
2017-09-17 18:19:27 +02:00
rnhmjoj
83264136ce vapoursynth-mvtools: 17 -> 19
(cherry picked from commit a7eb2e01bc)
2017-09-17 18:19:27 +02:00
rnhmjoj
b99022efba vapoursynth: R36 -> R38
(cherry picked from commit 3f9661588b)
2017-09-17 18:19:26 +02:00
AndersonTorres
c994dbce04 Moe: init at 1.9
Moe is a small text editor.

(cherry picked from commit 6126e3add4)
2017-09-17 18:19:26 +02:00
Tristan Helmich
a26af0221d pythonPackages.phonenumbers: 8.8.0 -> 8.8.1
(cherry picked from commit c3b304e811)
2017-09-17 18:19:26 +02:00
Michael Weiss
29c9481f6d lf: 2017-05-15 -> 2017-09-06
(cherry picked from commit 9f4fa7339b)
2017-09-17 18:19:26 +02:00
Pascal Bach
8e2391d169 nixos/prometheus-collectd-exporter: init module (#29212)
* prometheus-collectd-exporter service: init module

Supports JSON and binary (optional) protocol
of collectd.

* nixos/prometheus-collectd-exporter: submodule is not needed for collectdBinary

(cherry picked from commit 334e23d244)
2017-09-17 18:19:26 +02:00
romildo
80a387df9b greybird: 3.22.4 -> 3.22.5
(cherry picked from commit 3c02edc290)
2017-09-17 18:19:26 +02:00
Roman Volosatovs
ecb46b8f5b mopidy-iris: 3.3.3 -> 3.4.1
(cherry picked from commit 383b7c658a)
2017-09-17 18:19:25 +02:00
lewo
a6bf07155a nixos/nova-image: cleanup image builders (#29242)
There are currently two ways to build Openstack image. This just picks
best of both, to keep only one!

- Image is resizable
- Cloudinit is enable
- Password authentication is disable by default
- Use the same layer than other image builders (ec2, gce...)

(cherry picked from commit 3a377e26b2)
2017-09-17 18:19:25 +02:00
Robert
8563cb9f15 NixOS Manual: document assertions and warnings (#29206)
* NixOS Manual: document assertions and warnings

* NixOS manual: re-wrap assertions text

(cherry picked from commit 1b1fc65505)
2017-09-17 18:19:25 +02:00
lassulus
2117b2ea29 bitcoin-classic: 1.2.5 -> 1.3.6
(cherry picked from commit 0a4a6f71cb)
2017-09-17 18:19:25 +02:00
AndersonTorres
f144015dc7 jupp: init at 3.1
jupp is a fork of joe's editor.

(cherry picked from commit 4f976bdd3e)
2017-09-17 18:19:25 +02:00
Klaas van Schelven
d55e0c9330 andviro/flake8-vim: init at 2017-02-17
(cherry picked from commit 6e6a3c9ba5)
2017-09-17 18:19:25 +02:00
James Kay
d6060457d1 buildbot: 0.9.9post2 -> 0.9.11
(cherry picked from commit cf497c60f0)
2017-09-17 18:19:24 +02:00
Michael Weiss
b5763e0054 dynamips: init at 0.2.17
(cherry picked from commit 1011c76598)
2017-09-17 18:19:24 +02:00
hiberno (Christian Lask)
10cb4e312b tasksh: Add readline support.
(cherry picked from commit 38563d6130)
2017-09-17 18:19:24 +02:00
Ioannis Koutras
a90af04760 sddm: 0.14.0 -> 0.15.0
(cherry picked from commit 01b4c3c13b)
2017-09-17 18:19:24 +02:00
Peter Hoeg
00364fa6bd qtox: drop gtk2 dependency
Tray icon still works without gtk2.

(cherry picked from commit 90b3d2db91)
2017-09-17 18:19:24 +02:00
Thomas Bach
a819f3b18f manual: reworked submodule section for better readability
The section was strange to read, as the initial example already used
`listOf' which is mentioned in the very first paragraph. Then you read
in a subsection about `listOf' and the exact same example is given
once again.

(cherry picked from commit 4d101993bf)
2017-09-17 18:19:24 +02:00
Thomas Bach
d9afaff2be manual: fixed remaining placeholder literal
(cherry picked from commit f37a1e155e)
2017-09-17 18:19:23 +02:00
Thomas Bach
fd059ca1a9 manual: name' is not an argument for mkOption'
(cherry picked from commit 572726a570)
2017-09-17 18:19:21 +02:00
Vaibhav Sagar
07425e43ed nginx-modules: remove unused fetchpatch
(cherry picked from commit 70eb31c853)
2017-09-17 18:17:33 +02:00
rnhmjoj
5687327e29 lua-nginx-module: 0.10.5 -> 0.10.10
(cherry picked from commit d0aa64a8e2)
2017-09-17 18:17:32 +02:00
Anthony Cowley
e7e8d1fd21 emacsMacport: emacs-25.2 => 25.3, macport-6.3 => 6.7
(cherry picked from commit 50a33089c6)
2017-09-17 18:17:27 +02:00
Maximilian Güntner
800e422653 hostapd/wpa_supplicant: update urls
(cherry picked from commit daf07c9d62)
2017-09-17 17:43:40 +02:00
Daniel Fullmer
4f7e499315 k2pdfopt: 2.32 -> 2.42
(cherry picked from commit 8c2895400f)
2017-09-17 17:43:37 +02:00
Matt Smith
777e002054 monero: 0.10.3.1 -> 0.11.0.0
(cherry picked from commit 21e135c8bd)
2017-09-17 17:43:36 +02:00
Paul Hendry
9882b7fcbf ktorrent: Add missing meta.license
(cherry picked from commit f814c3d090)
2017-09-17 17:43:35 +02:00
Hoang Xuan Phu
76b36ad9a6 rabbitmq_server: 3.6.6 -> 3.6.10
(cherry picked from commit 2c58562d48)

Addresses some known vulns in 3.6.6: https://pivotal.io/security/cve-2017-4965
2017-09-17 17:43:34 +02:00
Florian Jacob
c69ee73db1 nixos/tinc: Fix tinc cli wrapper for tinc 1.0.
tinc prior to 1.1 doesn't have the `tinc` executable,
and `tincd` isn't of any use while the daemon already runs.

(cherry picked from commit 8cea87c1eb)
2017-09-17 17:43:33 +02:00
Silvan Mosberger
2fd44d9847 namecoin service: fix typo
(cherry picked from commit fea9e081a9)
2017-09-17 17:43:33 +02:00
Joachim Fasting
884ac056a5 nixos/tests: expand hardened tests
(cherry picked from commit 586d04c588)
2017-09-17 17:43:32 +02:00
Jan Malakhovski
5ae9a94cb0 linuxPackages: hardened-config: enable DEBUG_PI_LIST
(cherry picked from commit 62fa45eac5)
2017-09-17 17:43:31 +02:00
Jan Malakhovski
e8af562d48 linuxPackages: hardened-config: check kernelArch, not system
(cherry picked from commit c345761c13)
2017-09-17 17:43:30 +02:00
Jan Malakhovski
ec00da8d10 linuxPackages: hardened-config: disable BUG_ON_DATA_CORRUPTION for older kernels
They don't support it.

(cherry picked from commit 616a7fe237)
2017-09-17 17:43:30 +02:00
Joachim Fasting
34f867d96e hardened-config: build with fortify source
(cherry picked from commit dd170cd5df)
2017-09-17 17:43:29 +02:00
Joachim Fasting
e15669fa07 hardened-config: enable the randstruct plugin
(cherry picked from commit 9a763f8f59)
2017-09-17 17:43:28 +02:00
Joachim Fasting
84f5bb3e43 hardened-config: additional refcount checking
(cherry picked from commit edd0d2f2e9)
2017-09-17 17:43:23 +02:00
Daiderd Jordan
523fb3c77e opensc: add darwin frameworks
(cherry picked from commit 64bf283104)
2017-09-17 16:26:31 +02:00
Frederik Rietdijk
fe2f16e289 niff: init at 0.1
(cherry picked from commit 8a09e51dc2)
2017-09-17 15:37:59 +02:00
Bjørn Forsman
1d156a60fc fpart: init at 0.9.3
(cherry picked from commit 983d01421e)
2017-09-17 13:07:04 +02:00
Joachim Fasting
676560af25 lttng-uts: 2.9.1 -> 2.10.0
(cherry picked from commit 40d6414863)
2017-09-17 09:49:48 +02:00
Joachim Fasting
622afa9dc7 lttng-tools: 2.9.5 -> 2.10.1
(cherry picked from commit 969db57853)
2017-09-17 09:49:46 +02:00
Joachim Fasting
b967357400 linuxPackages.lttng-modules: broken on kernels >4.11
(cherry picked from commit 7d69e5a18f)
2017-09-17 09:49:45 +02:00
Joachim Fasting
5946d7d2c7 linuxPackages.lttng-modules: 2.9.3 -> 2.10.0
(cherry picked from commit 9e395545e8)
2017-09-17 09:49:43 +02:00
Frederik Rietdijk
20e1833914 aspellWithDicts: use a single env
In c0cf19608f the function
`aspellWithDicts` was introduced, that allows to build a derivation
consisting of aspell and specified dictionaries. In
96457d26dd a fix was included to properly
find the dictionaries.

Issue #29429 describes that, while the current method works for the
aspell binary, it does not in case of the API.

This commit rewrites the wrapper into a single derivation, create a
single tree of symbolic references to both the binary and the
dictionaries so that its possible to find the dictionaries with the API.
Furthermore, the binary is wrapped so it can still find the dictionaries
as well.

(cherry picked from commit 91f7042aa0)
2017-09-17 09:30:19 +02:00
Antoine Eiche
b94ee1a9b5 dockerTools.pullImage: release note regarding sha256 argument value
(cherry picked from commit ea6d37c2bb)
Signed-off-by: Domen Kožar <domen@dev.si>
2017-09-17 09:27:11 +02:00
Antoine Eiche
dc4178e15a dockerTools.pullImage: use skopeo to pull the image
Before this patch, a VM was used to spawn docker that pulled the
VM. Now, the tool Skopeo does this job well so we can simplify our
dockerTools since we doesn't need Docker anymore:)

This also fixe the regression described in
https://github.com/NixOS/nixpkgs/issues/29271 : cntlm proxy doesn't
work in 17.09 while it worked in 17.03.

Note Skopeo doesn't produce the same output than docker pull so, we
have to update sha.

(cherry picked from commit 01174c5f4d)
Signed-off-by: Domen Kožar <domen@dev.si>
2017-09-17 09:27:04 +02:00
Samuel Leathers
f22378c383 python pies: remove packages
(cherry picked from commit 0f0aeed803)
2017-09-17 09:03:41 +02:00
Daiderd Jordan
2ad805568c python-cffi: fix test failures when using clang
(cherry picked from commit 35649750c3)
2017-09-16 17:11:10 +02:00
Vladimír Čunát
a4bf452eb3 vivaldi-ffmpeg-codecs: fix evaluation (forgotten file)
(cherry picked from commit d5724ef2dd)
2017-09-16 15:28:48 +02:00
Samuel Leathers
9284617344 arelle: 2017-06-01 -> 2017-08-24
(cherry picked from commit d15c019edd)
2017-09-16 14:06:16 +01:00
Tim Steinbach
27809dd7a7 linux-copperhead: 4.13.1.b -> 4.13.2.a
(cherry picked from commit 7de078ccae4c9e0a81df7da3440295cc7d8459c7)
2017-09-16 08:58:13 -04:00
Jörg Thalheim
b83dde56bb gns3: 2.0.3 -> 2.1.0rc1
(cherry picked from commit 27e87d8bc8)
2017-09-16 13:57:41 +01:00
Samuel Leathers
ee4c2cbac7 aiohttp-cors: 0.5.1 -> 0.5.3
(cherry picked from commit eb125adf24)
2017-09-16 13:57:41 +01:00
Vladimír Čunát
902a863df5 vivaldi-ffmpeg-codecs: fix evaluation
The patch was removed during chromium update.
It won't build, but the error seems the same as before chromium update...

(cherry picked from commit 9a55f74e43)
2017-09-16 14:32:48 +02:00
Samuel Leathers
2001001d7c hglib: 1.7 -> 2.4
(cherry picked from commit c256a685e8)
2017-09-16 13:27:39 +01:00
Jörg Thalheim
2dceddeaf6 python.pkgs.hcs_utils: fix tests; disable python2
(cherry picked from commit 46c30b2232)
2017-09-16 13:08:11 +01:00
Samuel Leathers
fba5537677 hcs_utils: 1.5 -> 2.0
(cherry picked from commit 755e6eb22e)
2017-09-16 13:07:59 +01:00
Samuel Leathers
4285cdb4b1 jscoverage: fix build with gcc6 (#29423) 2017-09-16 13:21:32 +02:00
Samuel Leathers
81e650b451 moto: 0.4.25 -> 0.4.31
(cherry picked from commit 49fac1f824)
2017-09-16 12:33:24 +02:00
Frederik Rietdijk
0ab6f09539 python.pkgs.PyXAPI: remove old package
url of source and homepage is dead as well.

(cherry picked from commit bb57df26dd)
2017-09-16 12:23:38 +02:00
Frederik Rietdijk
66d3d19b31 python.pkgs.{pitz, clepy}: remove old packages
These were added in 2013 by @bjornfor but haven't been touched since.
They seem to be unmaintained, both in Nixpkgs and by upstream.
2017-09-16 11:47:50 +02:00
Vladimír Čunát
adfd4fe950 Merge #29335: chromium: 60.0.3112.90 -> 61.0.3163.79 [security]
(cherry picked from commit b82b23b25b)
2017-09-16 11:23:04 +02:00
Peter Hoeg
bf75da298b dropbox: 34.4.20 -> 34.4.22
(cherry picked from commit 569867b3e8)
2017-09-16 10:35:48 +08:00
Samuel Leathers
11c88047b8 nilearn: 0.2.5 -> 0.3.1
fixes #29178

(cherry picked from commit f8f62d5216)
2017-09-16 00:26:26 +01:00
Bjørn Forsman
8f37a144e1 nixos/wpa_supplicant: use literalExample
For various reasons, big Nix attrsets look ugly in the generated manual
page[1]. Use literalExample to fix it.

[1] Quotes around attribute names are lost, newlines inside multi-line
strings are shown as '\n' and attrs written on multiple lines are joined
into one.

(cherry picked from commit 6b7a9376f1)
2017-09-15 20:31:53 +02:00
Daiderd Jordan
c90c29550f nntp-proxy: fix clang build
(cherry picked from commit 8554eafb78)
2017-09-15 20:01:47 +02:00
Vincent Laporte
46a68c8680 gtk+: 3.22.19 -> 3.22.21
(cherry picked from commit 2f70241e21)
2017-09-15 20:30:14 +03:00
Vladimír Čunát
831e310f24 gkt3: maintenance 3.22.18 -> 3.22.19
(cherry picked from commit 3980abe191)
2017-09-15 20:30:07 +03:00
Joachim Fasting
838f8617ce pharo-launcher: fix build
As noted by @dtzWill at https://github.com/NixOS/nixpkgs/pull/26924/files#r126686231

(cherry picked from commit 42f2439228)

Re: https://github.com/NixOS/nixpkgs/issues/28643
2017-09-15 18:53:08 +02:00
Peter Simons
2f90efacab ghc-7.2.2 is broken
(cherry picked from commit 33b09c0f0e)
2017-09-15 13:56:33 +02:00
Rob Vermaas
38883f8ddc google-instance-setup: add openssh to path
(cherry picked from commit 0783efb41c)
2017-09-15 10:49:01 +00:00
Frederik Rietdijk
baee496f37 Merge pull request #29353 from disassembler/pgpdump
pgpdump: disable tests
(cherry picked from commit 56f8b3626f)
2017-09-15 12:36:58 +02:00
Frederik Rietdijk
e13c4975c1 Merge pull request #29357 from FRidh/ld_library_path
Python 3.4 and 3.5: support LD_LIBRARY_PATH

(cherry picked from commit fdbe81bab0)
2017-09-15 12:36:18 +02:00
Frederik Rietdijk
631b96acbf Merge pull request #29407 from disassembler/cxfreeze
cx_Freeze: 4.3.4 -> 5.3.2

(cherry picked from commit beaada6c2d)
2017-09-15 12:32:07 +02:00
Samuel Leathers
8067485230 mdp: disable tests
(cherry picked from commit 140136ad95)
2017-09-15 12:29:42 +02:00
Frederik Rietdijk
01aafc644f Merge pull request #29388 from disassembler/arelle
arelle: add py3to2 as a buildInput
(cherry picked from commit 47e1751fd0)
2017-09-15 12:27:05 +02:00
Frederik Rietdijk
329d844c81 Merge pull request #29405 from disassembler/jedi
jedi: disable tests
(cherry picked from commit f5ea99f195)
2017-09-15 12:16:46 +02:00
Eelco Dolstra
cb3203645a nixUnstable: 1.12pre5511_c94f3d55 -> 1.12pre5619_346aeee1
(cherry picked from commit b86fd340f0)
2017-09-15 11:41:10 +02:00
Eelco Dolstra
8e80fa158b blender: 2.78c -> 2.79
(cherry picked from commit e3b562e0e2)
2017-09-15 11:40:54 +02:00
Jörg Thalheim
a3a0594820 dmd: remove broken flag
(cherry picked from commit 3b5245f0c4)
2017-09-15 04:38:39 -05:00
Thomas Mader
7bfde1d2b9 apple-sdk: Move cf-private first in list, otherwise the build fails because CoreFoundation/CFAttributedString.h could not be found.
The problem appeared when building ldc on Mac OSX. See also 13778.

(cherry picked from commit 2a0f1ecdc8)
2017-09-15 04:38:30 -05:00
Thomas Mader
463656e755 dtools: Fix rdmd test when building with newer phobos version which doesn't include std.stdiobase.d anymore.
(cherry picked from commit 930b01ab3d)
2017-09-15 04:38:21 -05:00
Thomas Mader
f5fe80a042 dmd: Run dmd-testsuite in checkPhase
Remove cppa test for now because it isn't working.

(cherry picked from commit 5a35b0707f)
2017-09-15 04:37:54 -05:00
Thomas Mader
e357ee4589 dmd: Fix bootstrap dmd compiler build. Doesn't work with gcc6.
(cherry picked from commit e17fdb9607)
2017-09-15 04:37:44 -05:00
Samuel Leathers
706f3a3833 PyWebDAV: Fix src url
(cherry picked from commit 95f88c458b)
2017-09-15 10:42:15 +02:00
Maarten Hoogendoorn
ec76904f30 mount is in utillinux
(cherry picked from commit d27f710b87)
2017-09-15 08:55:23 +01:00
Maarten Hoogendoorn
d8f979d0e2 Fix oc cluster up
The command `oc cluster up` mainly runs code though Docker containers.

However, in pkg/bootstrap/docker/host/host.go, nsenter is used to run
some commands on the host. For this to work on NixOS, we need to provide
the absolute path to the required programs.

(cherry picked from commit a3dde7776b)
2017-09-15 08:55:23 +01:00
Maarten Hoogendoorn
57ae49b05a openshift: 1.5.0 -> 3.6.0
- Updated from 1.5.0 to 3.6.0 (this is just the next version, but Red
  Hat did quite the version bump there)
- Added 'v' to the version; it is used by `oc cluster up` to determine
  which image should be downloaded.
- Added myself as a maintainer.

(cherry picked from commit f8a72662cf)
2017-09-15 08:55:22 +01:00
Orivej Desh
84cb90d690 include-what-you-use: 0.6 -> 0.8
(cherry picked from commit a4a187fe5f)
2017-09-15 01:04:34 +02:00
Daiderd Jordan
b1c115e211 nixpkgs-tests: add tests for llvm 3.9
(cherry picked from commit 70c4ac12cd)
2017-09-15 00:56:19 +02:00
Daiderd Jordan
af12478dfb llvm-packages: apply cc-wrapper/stdenv changes to older versions
(cherry picked from commit ad486c48a6)
2017-09-15 00:56:06 +02:00
Daiderd Jordan
c13335a5ca clang-stdenv: move libstdcxxHook to cc-wrapper
(cherry picked from commit ac88515052)
2017-09-15 00:55:37 +02:00
Matthias Beyer
bec8a34469 sqlitebrowser: 3.9.1 -> 3.10.0
(cherry picked from commit 65b91cd23b)
2017-09-14 22:31:37 +02:00
Daiderd Jordan
f17ceeab18 irony-server: don't use wrapped clang
(cherry picked from commit d1260ea6aa)
2017-09-14 22:25:40 +02:00
Daiderd Jordan
56b2df0923 rtags: use clang-unwrapped
(cherry picked from commit cd97211358)
2017-09-14 22:04:56 +02:00
Thomas Tuegel
4515d4af50 Merge pull request #29369 from bkchr/remove_kde4_workspace_kde_telepathy
Remove kde4workspace and kdetelepathy

(cherry picked from commit 815135f31b)
2017-09-14 11:19:36 -05:00
Tuomas Tynkkynen
5190526d1c linuxPackages.evdi: Mark broken on >= 4.13
(cherry picked from commit 94454384c2)
2017-09-14 18:55:06 +03:00
Tuomas Tynkkynen
7545ab5f31 linuxPackages.netatop: Mark broken on >= 4.13
(cherry picked from commit 2459616f0f)
2017-09-14 18:55:06 +03:00
Tuomas Tynkkynen
6529d7d2c1 linuxPackages.sch_cake: Mark broken on >= 4.13
(cherry picked from commit 808ddd86fc)
2017-09-14 18:55:06 +03:00
Tuomas Tynkkynen
4215b390d3 swfmill: Fix build on GCC 6
https://hydra.nixos.org/build/60900173
(cherry picked from commit c8c82a67f0)
2017-09-14 18:21:41 +03:00
Bastian Köcher
9475c13a7f mailnag: 1.1.0 -> 1.2.1
(cherry picked from commit 5b91f125aa)
2017-09-14 17:07:00 +03:00
Jörg Thalheim
bd98103fac Merge pull request #29370 from mguentner/urltypofixes
fix src.url typos

(cherry picked from commit 610eac1773)
2017-09-14 14:50:22 +02:00
Tuomas Tynkkynen
6baffd9af5 awesomebump: Yet another RPATH-contains-TMPDIR hack
https://github.com/NixOS/patchelf/pull/98
(cherry picked from commit 14b833e560)
2017-09-14 15:46:16 +03:00
Tuomas Tynkkynen
058cb603f2 pythonmagick: Fix sha256
(cherry picked from commit eab8124939)
2017-09-14 15:46:07 +03:00
Tim Steinbach
1e588f9bc3 linux: 4.9.49 -> 4.9.50
(cherry picked from commit 5e4fcb63ac76e10aa36623477ebbafc00e3bcda1)
2017-09-14 08:40:27 -04:00
Tim Steinbach
ede357afda linux: 4.12.12 -> 4.12.13
(cherry picked from commit e5beeced7a1fd725e203ad88acf1c67b16d5e5fa)
2017-09-14 08:40:27 -04:00
Tim Steinbach
eec780b687 linux: 4.13.1 -> 4.13.2
(cherry picked from commit 0e9599181dd85d68c32c089e95055e7dbffd9f5c)
2017-09-14 08:40:27 -04:00
Samuel Leathers
c6eb5fbe87 ws4py: add git to checkInputs
(cherry picked from commit 3f5f208d13)
2017-09-14 13:19:39 +02:00
Frederik Rietdijk
8822c7f348 python.pkgs.mwlib: mark as broken
(cherry picked from commit 1e16bceb46)
2017-09-14 13:07:38 +02:00
Domen Kožar
71fb65709c vm: remove trusty-updates hash as it changes too often
(cherry picked from commit f49b7d3c88)
Signed-off-by: Domen Kožar <domen@dev.si>
2017-09-14 11:31:00 +02:00
Samuel Leathers
cd2ecbe919 credstash: 1.13.2 -> 1.13.3
(cherry picked from commit dabf89fadd)
2017-09-14 09:52:43 +02:00
Samuel Leathers
304d3a4bce colanderalchemy: fixes tests
(cherry picked from commit 746f20fc7f)
2017-09-14 09:31:43 +02:00
Bjørn Forsman
5e860f6737 OVMF: add 'src' attribute
No functional change, but allows getting the source via the standard
attribute: `nix-build -A OVMF.src`.

(cherry picked from commit 67c70aa581)
2017-09-14 08:08:01 +02:00
Ruben Maher
e61f1a24c4 nextcloud-client: provide optional gnome-keyring integration
`qtkeyring` can use `gnome-keyring`, but it needs some help to find it.

I have not enabled this by default because not everyone who uses this will want
to pull in GNOME dependencies.

(cherry picked from commit e828dcb5cd)
2017-09-14 08:01:06 +02:00
Ruben Maher
d1414523f2 nextcloud-client: enable parallel building
So that the client can build faster.

(cherry picked from commit 4ce18c8367)
2017-09-14 08:01:05 +02:00
Ruben Maher
bb290c95e5 nextcloud-client: add inotify dependency when building on linux
This allows for more efficient change detection.

(cherry picked from commit e02f936b27)
2017-09-14 08:01:04 +02:00
Ruben Maher
6bd0b33261 nextcloud-client: use cmakeDir and cmakeFlags attrs
(cherry picked from commit ebb6488e74)
2017-09-14 08:01:03 +02:00
Jörg Thalheim
892015000a tor: skip ControlPort in torrc, if not set. 2017-09-13 23:34:04 +01:00
Tuomas Tynkkynen
7d7e9673fc treewide: Escape backslash in strings properly
"\." is apparently the same as "." wheras the correct one is "\\."

(cherry picked from commit 0c368ef02f)
2017-09-14 01:06:31 +03:00
Sarah Brofeldt
9483d1641f steam: Get rid of newStdcpp option, always on
(cherry picked from commit 734a04800a)
2017-09-13 22:05:03 +01:00
Daiderd Jordan
70cc6fa727 prometheus-node-exported: fix output cycle on darwin
(cherry picked from commit 56ea313c29)
2017-09-13 22:10:35 +02:00
Tuomas Tynkkynen
708f1683c6 diffoscope: Update tool list
(cherry picked from commit 98d84b1375)
2017-09-13 22:44:42 +03:00
Tuomas Tynkkynen
9e8da964d4 diffoscope: Remove obsolete and unreferenced patch
(cherry picked from commit ab5bd5e596)
2017-09-13 22:44:42 +03:00
Tuomas Tynkkynen
94bba27fed diffoscope: Revive hard links patch
(cherry picked from commit 890d4a2853)
2017-09-13 22:44:42 +03:00
Tuomas Tynkkynen
39acaf7c25 diffoscope: 85 -> 86
(cherry picked from commit 4b28da6fd8)
2017-09-13 22:44:42 +03:00
Andreas Rammhold
f1d6e24bdf afewmail: update meta.homepage (#29313)
(cherry picked from commit f47ab6c2fe)
2017-09-13 20:05:26 +02:00
Samuel Leathers
5879433aa9 irods-icommands: 4.2.0 -> 4.2.1
(cherry picked from commit 5fb93524b3)
2017-09-13 20:05:20 +02:00
Joachim Fasting
1939476ec1 socklog: properly disable the chkshsgr test
My previous attempt d438cbb0b6 was
bogus ...

(cherry picked from commit 705f47f50e)
2017-09-13 18:31:44 +02:00
taku0
23b2ca654b flashplayer: 26.0.0.151 -> 27.0.0.130
(cherry picked from commit c2e7d1f1f2)
2017-09-13 18:31:42 +02:00
Florian Jacob
c4674a88bb piwik: 3.0.4 -> 3.1.0
Patch for Nix was merged upstream and therefore could be removed.

(cherry picked from commit 556dfedda7)
2017-09-13 18:31:39 +02:00
Joachim Fasting
11f8e12aec libffcall: 1.10 -> 2.0
Thanks to Bruno Haible for a notifying me of this.

(cherry picked from commit e2ddc7ffd2)
2017-09-13 18:31:30 +02:00
John Ericson
a9ccf26c3b treewide: Use *Platform.extensions
(cherry picked from commit 5aec3f96a2)
2017-09-13 11:25:02 -04:00
John Ericson
e8e99f7466 lib: Add *Platform.extensions
This is used to platform specific library and exectuable extensions. In
the next commit I'll replace a bunch of ad-hoc logic with it.

(cherry picked from commit 741839a687)
2017-09-13 11:23:01 -04:00
Tim Steinbach
97eef25947 linux-copperhead: 4.13.1.a -> 4.13.1.b
(cherry picked from commit 87fa247867)
2017-09-13 08:21:21 -04:00
Bjørn Forsman
dcb66ca0d7 doc/submitting-changes.xml: suggest "nixos/<module>" prefix for NixOS changes
Commit 8537cf0f81
("CONTRIBUTING.md: suggest "nixos/<module>" prefix for NixOS changes")
only changed CONTRIBUTING.md file and forgot about the Nixpkgs manual.
(I didn't know this information was stored in two places.)

(cherry picked from commit 56a047c7a1)
2017-09-13 14:14:24 +02:00
Tuomas Tynkkynen
221a743514 prelink: Disable on Darwin
https://hydra.nixos.org/build/60439488

A tool that works on ELF files only isn't probably that useful on
Darwin.

(cherry picked from commit 2cd2ee5f85)
2017-09-13 14:49:50 +03:00
Tuomas Tynkkynen
62eeec7486 firebird: Fix build by using gcc5
https://hydra.nixos.org/build/59941948
(cherry picked from commit c78c565245)
2017-09-13 14:43:41 +03:00
Tuomas Tynkkynen
439c2073d2 policycoreutils: Fix setuid install
(cherry picked from commit 4d205eb044)
2017-09-13 14:21:40 +03:00
Antoine Eiche
7c1278d94f dockerTools.pullImage: change the docker deamon readiness mechanism
To wait for the docker deamon, curl requests are sent. However, if a
http proxy is set, it will respond instead of the docker daemon.
To avoid this, we send docker ps command instead of curl command.

(cherry picked from commit 132e790735)
2017-09-13 10:40:43 +01:00
Frederik Rietdijk
6076d9f31b python.pkgs.jupyter_console: 5.0.0 -> 5.2.0
(cherry picked from commit 8d4e37710f)
2017-09-13 10:25:04 +02:00
Frederik Rietdijk
64478a07fe python.pkgs.joblib: move expression
(cherry picked from commit 47dcf634bb)
2017-09-13 09:37:40 +02:00
Rodney Lorrimar
5ea5dbcd56 pythonPackages.ftfy: 5.1.1 -> 4.4.3
ftfy package was added for spaCy and is only used by spaCy.

This change downgrades its version to meet the bounds specified by
spaCy (>=4.4.2,<5.0.0).

Relevant to #28643.

(cherry picked from commit 566f5e9e8d)
2017-09-13 09:19:40 +02:00
Klaas van Schelven
f8cb04b96c PyBrain: Mark as broken
It's broken on all versions of Python (I've tried 2.7, 3.4, 3.5, 3.6)

I think the root cause is that PyBrain is not working with numpy >= 1.12.0 as I reported here:
https://github.com/pybrain/pybrain/issues/217

(The relevant release notes may be found here):
https://docs.scipy.org/doc/numpy-1.12.0/release.html#compatibility-notes

The PyBrain github repo does not seem very active (last commit 18 months ago, last release 3 years),
so I have some doubts as to whether this will be fixed any time soon.

I suppose an alternative solution could be to reintroduce the explicit dependency to numpy 1.11. But,
this is not entirely trivial: in c9b4a2f319, the versions 1.10, 1.11, 1.12 were folded into a single version.
Also, the numpy dependency is not a direct one, but is implied via scipy

(cherry picked from commit 50d36558a4)
2017-09-13 09:09:03 +02:00
Frederik Rietdijk
9bf53d18b5 python.pkgs.wheel: 0.29.0 -> 0.30.0
(cherry picked from commit 88367b1e78)
2017-09-13 09:06:58 +02:00
Vladimír Čunát
0b131dfaeb hpsa service: fallout from #28557 merge and revert
(cherry picked from commit 97ac29cafc)
2017-09-13 07:58:29 +02:00
Jan Tojnar
fd1b9e357d gnome-disk-utility: fix missing schemas for gnome-disk-image-mounter
Continuation of #28053

gnome-disk-image-mounter from gnome-disk-utility was not wrapped, resulting in an
error due to the inability to find gsettings schemas.

This commit replaces the manual wrapping of gnome-disks binary with wrapGAppsHook
so that all binaries are wrapped correctly.

(cherry picked from commit b64f149ea9)
2017-09-13 07:41:26 +02:00
rnhmjoj
3a52fb941a btfs: 2.13 -> 2.17
(cherry picked from commit b9dc49e847)
2017-09-13 01:02:43 +02:00
rnhmjoj
6adb5cbcfb pirate-get: 0.2.10 -> 0.2.12
(cherry picked from commit 375ff71380)
2017-09-13 01:02:40 +02:00
Mikael Brockman
a19583934f emacs: 25.2 -> 25.3
https://lists.gnu.org/archive/html/emacs-devel/2017-09/msg00211.html

> This is an emergency release to fix a security vulnerability in Emacs.
>
> Enriched Text mode has its support for decoding 'x-display' disabled.
> This feature allows saving 'display' properties as part of text.
> Emacs 'display' properties support evaluation of arbitrary Lisp forms
> as part of instantiating the property, so decoding 'x-display' is
> vulnerable to executing arbitrary malicious Lisp code included in the
> text (e.g., sent as part of an email message).

(cherry picked from commit 78f457c76c)
2017-09-13 01:02:34 +02:00
Joachim F
68778d0b77 Merge pull request #29286 from abuibrahim/release-17.09
odp-dpdk: fix a typo
2017-09-12 22:42:28 +00:00
Ruslan Babayev
d88ec014ef odp-dpdk: fix a typo
(cherry picked from commit 4ac8529dd4)
2017-09-12 13:43:52 -07:00
Daiderd Jordan
5fe5c843d0 kyotocabinet: fix darwin build
(cherry picked from commit 4d7c3b2f5f)
2017-09-12 22:16:16 +02:00
Daiderd Jordan
b16c73697a python-keyring: disable tests on darwin
(cherry picked from commit f0956b7baf)
2017-09-12 21:04:14 +02:00
Josef Kemetmueller
947f295ef1 pythonPackages.audiotools: Fix darwin build
(cherry picked from commit 6d760d970f)
2017-09-12 19:55:14 +02:00
Jörg Thalheim
30d6f55f47 nixos/openafs-client: update cellServDB 2009-06-29 -> 2017-03-14
(cherry picked from commit 39e327eeb5)
2017-09-12 13:14:01 +01:00
Tuomas Tynkkynen
e39775fd49 lib.cleanSourceFilter: Fix VIM swap file filtering
The backslash wasn't properly escaped, and "\." is apparently equal to
".". So it's accidentally filtering out these valid file names (in
Nixpkgs):

trace: excluding clfswm
trace: excluding larswm
trace: excluding mkpasswd

While at it, turn the file filter stricter to what it was before
e2589b3ca2. That is, the file name must
start with a dot: '.swp', '.foo.swo' are filtered but 'bar.swf' is not.

(cherry picked from commit 9275c3387e)
2017-09-12 15:01:15 +03:00
Tuomas Tynkkynen
6b5eeca9b7 pythonPackages.audiotools: Disable on Darwin
Last successful build 2015-09-20 07:44:17

https://hydra.nixos.org/build/60587519
(cherry picked from commit 8f566f4bde)
2017-09-12 15:01:09 +03:00
Tuomas Tynkkynen
7b05f25ffb pythonPackages.alot: Disable on Darwin
Last successful build 2015-12-31 19:17:08

https://hydra.nixos.org/build/60775312
(cherry picked from commit 8d85d279f2)
2017-09-12 15:01:06 +03:00
Tuomas Tynkkynen
1b6e075e59 toxic: Disable on Darwin
Last successful build 2014-03-12 17:47:58

https://hydra.nixos.org/build/59716009
(cherry picked from commit e6e8565131)
2017-09-12 15:01:03 +03:00
Tuomas Tynkkynen
37fc2c0c0a chromaprint: Disable on Darwin
Last successful build 2015-09-20 08:03:33

https://hydra.nixos.org/build/60589826
(cherry picked from commit 817c20c7ee)
2017-09-12 15:00:59 +03:00
Domen Kožar
3418e73469 pyopenssl: 17.0.0 -> 17.2.0
An attempt to fix tests under 32bit linux to unblock nix build
2017-09-12 13:37:03 +02:00
Dmitry Vyal
eb7b9e1edf tensorflow-1.1.0 for python3.6
Google publishes prebuilt tensorflow whl for python 3.4, 3.5, 3.6,
but nix expression for tensorflow only supported 3.5.
This change adds support for python-3.6.
2017-09-12 12:52:14 +02:00
Maximilian Güntner
124555b7b6 simavr: fix build for separate avr toolchain
(cherry picked from commit b22718d51c)
2017-09-12 10:33:31 +01:00
Maximilian Güntner
bc6561132b microscheme: replaced avrgcclibc with separate dependencies
(cherry picked from commit 414f5eff2d)
2017-09-12 10:33:31 +01:00
Maximilian Güntner
4ed547b94a arduino/ino: remove avrgcclibc as a dependency (see TODO)
(cherry picked from commit 6e54dbb49e)
2017-09-12 10:33:30 +01:00
Maximilian Güntner
ace472e343 avrdudess: add separate avr-{gcc, binutils} dependencies
(cherry picked from commit 0f74f11b03)
2017-09-12 10:33:30 +01:00
Maximilian Güntner
64d008cb73 avr-*: split avr-gcc-libc into separate packages
- avr-gcc 5.3.0 -> 5.4.0

closes #28220

Since the packages do not share a common prefix anymore, you need
to define the current store paths in your project's Makefile.

Example for an atmega644 build:

CFLAGS += -I /nix/store/9rffxzds5crcpm76g3nr03jx0aa657cf-avr-libc-2.0.0/avr/include
CFLAGS += -B /nix/store/9rffxzds5crcpm76g3nr03jx0aa657cf-avr-libc-2.0.0/avr/lib/avr5
CFLAGS += -L /nix/store/9rffxzds5crcpm76g3nr03jx0aa657cf-avr-libc-2.0.0/avr/lib/avr5
CFLAGS += -L /nix/store/8409dj9js4i5901i63275wxdm783l0p6-avr-gcc-5.4.0/lib/gcc/avr/5.4.0/avr5

(cherry picked from commit 6a458c169b)
2017-09-12 10:33:30 +01:00
Tuomas Tynkkynen
99d9f74d9f Revert "libgcrypt: Add pre-ARMv7 patch"
This reverts commit 1cfe9539f9.

No longer needed after the upgrade in 095af3e63b.

(cherry picked from commit ab62b7e9b9)
2017-09-12 12:26:06 +03:00
Bjørn Forsman
b98fda5cad nixos/gitolite: don't leak nix store hash into gitolite-admin username/key
It doesn't look good when the initial admin user is named
"<hash>-gitolite-admin" and the key stored as
"<hash>-gitolite-admin.pub". Instead, make it simply "gitolite-admin"
and "gitolite-admin.pub".

(cherry picked from commit 6b9ee30672)
2017-09-12 10:59:30 +02:00
pvgoran
898924ed5e services.gitolite: Add RequiresMountsFor unit option ...
... to ensure that the filesystem where `dataDir` resides is mounted when we do initialization or upgrade.

(cherry picked from commit 4c4f73c0eb)
2017-09-12 07:04:05 +00:00
rnhmjoj
6d7530563a vapoursynth-mvtools: 17 -> 19
(cherry picked from commit a7eb2e01bc)
2017-09-12 06:58:30 +00:00
rnhmjoj
902afad78e vapoursynth: R36 -> R38
(cherry picked from commit 3f9661588b)
2017-09-12 06:58:22 +00:00
Silvan Mosberger
37340f2f2c namecoin: legacy 0.3.80 -> core 0.13.0rc1
This updates namecoin from a legacy version from about 3 years ago
(https://github.com/namecoin/namecoin-legacy) to
the new namecoin-core.

(cherry picked from commit 8bd3664f373cb78a0526dc8a86e750f55b96420a)
(cherry picked from commit 31f349dbb4)
2017-09-12 07:17:49 +01:00
lassulus
20b9942065 bitcoin-xt: 0.11F -> 0.11G2
(cherry picked from commit f87d4ac2c1)
2017-09-12 07:17:49 +01:00
lassulus
f70f4c68bf altcoins: remove obsolete boost override
(cherry picked from commit 077dd9fca3)
2017-09-12 07:17:49 +01:00
Bjørn Forsman
726c294cae nixos/samba: remove space in "[ global ]" heading
Use consistent no-space style. (All documentation I've seen use no
space, and the generated section headings from the NixOS module also use
no space.)

(cherry picked from commit fc02a0265a)
2017-09-12 08:04:02 +02:00
Daiderd Jordan
5f165451c0 jbigkit: fix substituteInPlace
(cherry picked from commit 2509b629d7)
2017-09-12 00:17:52 +02:00
Daiderd Jordan
f155c98522 html2text: fix clang build
(cherry picked from commit 7b00a6ef15)
2017-09-11 23:42:02 +02:00
Daiderd Jordan
f15742bbaf go-mtpfs: fix darwin build
(cherry picked from commit 77294205ac)
2017-09-11 23:05:01 +02:00
timor
5566ca9fcd coin3d: include fix for newer compilers
This manifests as a segfault in any applications that use the library.

(cherry picked from commit cf32537210)
2017-09-11 21:32:43 +01:00
Jörg Thalheim
a82fe0ec5e Merge pull request #29187 from vanschelven/recaptcha-client
python.pkgs.recaptcha-client: disable broken versions
2017-09-11 19:41:02 +01:00
Markus Mueller
b7144b2db8 desmume: fix build with gcc6 by adding debian patch
Debian also removed the package in testing when building
with gcc7.

(cherry picked from commit 55b5a94d84)
2017-09-11 19:33:01 +01:00
Markus Mueller
6fb2a7c676 dmenu-wayland: git-2014-11-02 -> git-2017-04-07 fix build
Bumped and fixed substitution for package to build successfully.

(cherry picked from commit 301ab39213)
2017-09-11 19:31:28 +01:00
timor
9be724d65b qfsm: fix build with gcc 6 (#29245) 2017-09-11 20:29:16 +02:00
Aristid Breitkreuz
2248565ea4 blitz++: mark as broken 2017-09-11 20:15:15 +02:00
Bjørn Forsman
da832b5855 qmmp: 1.1.9 -> 1.1.10
(cherry picked from commit 88ae298467)
2017-09-11 20:10:04 +02:00
Bjørn Forsman
42caac39d8 qmmp: 1.1.5 -> 1.1.9
(cherry picked from commit 4b84127f1c)
2017-09-11 20:03:58 +02:00
timor
5bdfcbbea2 perl-Class-Autouse: 1.99_02 -> 2.01
(cherry picked from commit f717af03ad)
2017-09-11 18:50:35 +02:00
Robert Helgesson
c5f150d5ed perl-Data-Dumper-Concise: 2.022 -> 2.023
(cherry picked from commit 99b09a2006)
2017-09-11 18:44:54 +02:00
Robert Helgesson
6c773d3ae8 perl-Log-Contextual: 0.006003 -> 0.007001
(cherry picked from commit f6537dafe2)
2017-09-11 18:44:54 +02:00
timor
656cffa68d perl-Data-Dumper: 2.154 -> 2.161 + build fix
(cherry picked from commit dcdbe960f8)
2017-09-11 18:44:54 +02:00
Franz Pletz
cc5202c941 borgbackup: fix build with python36
cffi fails to build with python34.
2017-09-11 18:44:34 +02:00
timor
c22ff5213a perl-Devel-NYTProf: init at 6.04
(cherry picked from commit fdaaaea31e)
2017-09-11 17:43:35 +01:00
timor
2b7db2ea76 perl-Devel-DProf: deprecated, remove
does not build

(cherry picked from commit 60bb058cf5)
2017-09-11 17:38:37 +01:00
Tuomas Tynkkynen
a95a9fb4af make-fonts-cache.nix: Don't build-depend on unnecessary outputs of fontconfig
(cherry picked from commit 886837f479)
2017-09-11 19:22:46 +03:00
Bjørn Forsman
9355706fdb wireshark: 2.4.0 -> 2.4.1
Remove patches that have been merged upstream.

(cherry picked from commit f4bac5cdb7)
2017-09-11 18:01:52 +02:00
Bjørn Forsman
fd65540aa7 t1utils: 1.39 -> 1.41
(cherry picked from commit 835b2ccfa8)
2017-09-11 18:01:52 +02:00
Bjørn Forsman
038580c0c9 gsoap: 2.8.49 -> 2.8.53
(cherry picked from commit 421949e436)
2017-09-11 18:01:52 +02:00
Bjørn Forsman
28fbe0a7cf basex: 8.6.4 -> 8.6.6
(cherry picked from commit 0a7d124eb0)
2017-09-11 18:01:52 +02:00
Bjørn Forsman
b5607c41ca ascii: 3.15 -> 3.18
(cherry picked from commit 0177902337)
2017-09-11 18:01:52 +02:00
Jörg Thalheim
90f8d926ab altcoins: remove pkgs non-sense
(cherry picked from commit bb2e6d131e)
2017-09-11 16:59:14 +01:00
lassulus
4740b2c658 bitcoin-classic: 1.2.5 -> 1.3.6
(cherry picked from commit 0a4a6f71cb)
2017-09-11 16:59:06 +01:00
lassulus
773268eede mupen64plus: 1.5 -> 2.5
(cherry picked from commit f068f3f209)
2017-09-11 15:39:30 +01:00
Tuomas Tynkkynen
ebd90bfdb9 dbench: Disable on Darwin
Assumes Linux versions of xattr system calls. Has never built
successfully.

https://hydra.nixos.org/build/60443210
(cherry picked from commit e61022ac55)
2017-09-11 16:35:22 +03:00
Bjørn Forsman
92ca300cc6 eagle: 7.5 -> 7.7
This is the latest release from Cadsoft, before they were bought by
Autocad. Autocad has released 8.x, but

- it requires reworking the Nix expression (different packaging)
- the paid license version requires a monthly subscription fee, you never
  "own" the software (AFAICT).

Due to the licensing change in 8.x, I think keeping Eagle 7.x around is
a good idea.

(cherry picked from commit 28f780b320)
2017-09-11 14:48:16 +02:00
Domen Kožar
64a563f15b vm: bump trusty-updates hash
In future we might just not use the updates if hash changes too
often.
2017-09-11 13:00:30 +02:00
Tuomas Tynkkynen
b1cb7ee364 pythonPackages.ssdeep: Mark broken
https://hydra.nixos.org/build/59943791

This package is a library and has no reverse dependencies. (It was once
used by diffoscope, but it changed to use a different library).

(cherry picked from commit 373b2231be)
2017-09-11 13:53:06 +03:00
Thomas Tuegel
7921852a33 Merge pull request #29117 from bkchr/kde_applications_17_08_1
kdeApplications: 17.08.0 -> 17.08.1
(cherry picked from commit 6299659da6)
2017-09-11 05:11:16 -05:00
Tim Steinbach
15c04be775 linux-copperhead: 4.13.a -> 4.13.1.a
(cherry picked from commit 114a2bcc80)
2017-09-10 19:22:11 -04:00
John Ericson
b3128d3c48 ghc-8.2.1: Get rid of preReleaseName binding now that it is released
No hashes should be changed

(cherry picked from commit e916917acf)
2017-09-10 17:36:40 -04:00
Daiderd Jordan
2e65ad64fa nixpkgs-tests: add basic test for buildInputs
(cherry picked from commit b91307c2e1)
2017-09-10 22:56:54 +02:00
Daiderd Jordan
6e8d22e851 nixpkgs-tests: add basic test for cc-wrapper
(cherry picked from commit 19c4673310)
2017-09-10 22:56:40 +02:00
Sander van der Burg
471bea8fe6 fast-cli: fix build
(cherry picked from commit 397fc0daca)
2017-09-10 16:30:46 +00:00
Tim Steinbach
2f0cf23905 linux: 4.13 -> 4.13.1
(cherry picked from commit 54a4a22719451ae5b9a899025087d4a6e7f7095d)
2017-09-10 12:13:26 -04:00
Tim Steinbach
f7b2a625ca linux: 4.12.11 -> 4.12.12
(cherry picked from commit e5e8836cd1564ed675678bd4a3f8f279afd22b5a)
2017-09-10 12:13:26 -04:00
Tim Steinbach
b8a8f6f174 linux: 4.9.48 -> 4.9.49
(cherry picked from commit 2ec7d290cd96d7bfb1ed61a1a8a2d5b0625bf260)
2017-09-10 12:13:26 -04:00
Daiderd Jordan
3307386d45 perl-moose: fix darwin build
(cherry picked from commit 259e73d678)
2017-09-10 18:08:15 +02:00
Vaibhav Sagar
cd19919d1e znc: add openFirewall configuration option
(cherry picked from commit c7dd5e146b)
2017-09-10 18:00:34 +02:00
Vaibhav Sagar
d2b00a6a85 znc: open firewall with configured port
The configuration doesn't currently open the configured port, which is
less convenient than opening it.

(cherry picked from commit 83d89e9b22)
2017-09-10 18:00:34 +02:00
Pascal Bach
656f90717c riot-web: 1.12.2 -> 1.12.3
(cherry picked from commit 44ec317a13)
2017-09-10 17:55:52 +02:00
Eelco Dolstra
eeec388ac9 tribler: 7.0.0-beta -> 7.0.0-rc2
Also, fix the xcb plugin error
(https://github.com/NixOS/nixpkgs/issues/24256) and add service-identity which is a required dependency now.

(cherry picked from commit bcd382f032)
2017-09-10 17:55:52 +02:00
dywedir
ec8cc52bc5 fd: 2.0.0 -> 3.0.0
(cherry picked from commit bb0f86be43)
2017-09-10 17:55:52 +02:00
Peter Hoeg
69502062cf sane-frontends: boy scout cleanups
(cherry picked from commit af1f99143f)
2017-09-10 17:55:52 +02:00
Peter Hoeg
e872c9eedf sane-backends: 1.0.25 -> 1.0.27
Use a proper upstream as well.

(cherry picked from commit 67c949a8b6)
2017-09-10 17:55:52 +02:00
Peter Hoeg
8c3343e19d sane-backends: support parallel building
(cherry picked from commit 2dff799a10)
2017-09-10 17:55:52 +02:00
Vaibhav Sagar
a3d4721d3f znc: fix network example configuration
s/ssl/useSSL/

(cherry picked from commit 405050b2cb)
2017-09-10 17:55:51 +02:00
Peter Hoeg
557e1d2030 kget: init at 20170903
(cherry picked from commit 758c597696)
2017-09-10 17:55:51 +02:00
Ruslan Babayev
23d2db8876 ofp: mark as broken due to odp-dpdk change
(cherry picked from commit f319314c35)
2017-09-10 17:55:51 +02:00
Ruslan Babayev
8de61c321c pktgen: 3.1.0 -> 3.4.0
(cherry picked from commit f1e1d71494)
2017-09-10 17:55:51 +02:00
Ruslan Babayev
5053b8144b dpdk: drop examples output; simplify install phase
(cherry picked from commit f6075fc211)
2017-09-10 17:55:51 +02:00
Ruslan Babayev
b0df0af34f odp-dpdk: 1.12.0.0 -> 1.15.0.0
(cherry picked from commit ec85e42c0b)
2017-09-10 17:55:51 +02:00
Peter Hoeg
e6f2c4d51b manual: steam on nouveau also requires newStdCpp
(cherry picked from commit a9a3af423f)
2017-09-10 17:55:50 +02:00
Dan Peebles
46dc8a5450 yubikey-manager: 3.1 -> 4.0
Also, support Darwin properly

(cherry picked from commit 15502421c7)
2017-09-10 17:55:50 +02:00
Ruben Maher
05f1c244dd nixos/transmission: make it possible to use a different home directory (#29138)
(cherry picked from commit 4ff9e9e333)
2017-09-10 17:55:50 +02:00
John Mercier
659f53a05d notion: 3-2015061300 -> 3-2017050501
(cherry picked from commit fc0e22b7a7)
2017-09-10 17:55:50 +02:00
Joachim Fasting
fc7d2aaec9 nixos/hardened: blacklist a few obscure net protocols
(cherry picked from commit 8aa0618cf0)
2017-09-10 17:55:50 +02:00
Joachim Fasting
e7e99f3642 nixos/hardened: set mmap_min_addr
This is set in the hardened linux config as well but sysctl is more
flexible & works with any boot.kernelPackages

(cherry picked from commit 2bce0b13e7)
2017-09-10 17:55:50 +02:00
Joachim Fasting
6bb5c1ba49 tor-browser-bundle-bin: runtime purity improvements
These changes reduce file accesses outside TBB_HOME or the Nix store, as
determined by running under strace -e access,open,stat.

(cherry picked from commit f84125c3b1)
2017-09-10 17:55:49 +02:00
Joachim Fasting
481ccb82c8 tor-browser-bundle-bin: hard-code path to desktop Icon
(cherry picked from commit c8f2dbae9f)
2017-09-10 17:55:49 +02:00
Michael Weiss
639848651b androidenv: Add the Android Instant Apps SDK
(cherry picked from commit af78d76718)
2017-09-10 17:55:49 +02:00
Michael Weiss
cace24242c androidenv: Update all packages using fetch.sh
(cherry picked from commit 498e3a9989)
2017-09-10 17:55:49 +02:00
Thomas Bach
b9638c2014 haproxy: 1.7.8 -> 1.7.9
(cherry picked from commit d34386792d)
2017-09-10 17:55:49 +02:00
Thomas Bach
4d4280a834 haproxy: haproxy.org is now accessible via https
(cherry picked from commit fd84128595)
2017-09-10 17:55:49 +02:00
Michael Weiss
790036dbee pythonPackages.glances: 2.11 -> 2.11.1
(cherry picked from commit 8e3681d8bb)
2017-09-10 17:55:49 +02:00
Vincent Laporte
307ce6c0dc smplayer: 17.8.0 -> 17.9.0
(cherry picked from commit b5c9a47b85)
2017-09-10 17:55:48 +02:00
Will Dietz
d0a976e872 rr: 4.5.0 -> 5.0.0
(cherry picked from commit b95dc6f7d6)
2017-09-10 17:55:48 +02:00
timor
8687d7885e perl-ExtUtils-XSpp: 0.1700 -> 0.18
(cherry picked from commit dd07d9a04d)
2017-09-10 17:55:48 +02:00
timor
8c602e0e82 perl-ExtUtils-ParseXS: 3.24 -> 3.35
(cherry picked from commit 34c76e463e)
2017-09-10 17:55:48 +02:00
Tim Steinbach
2a33eaa7d8 vscode: 1.15.1 -> 1.16.0
(cherry picked from commit 58963fda09)
2017-09-10 17:55:48 +02:00
dywedir
b261baf607 minidlna: 1.1.5 -> 1.2.1
(cherry picked from commit 79770136ff)
2017-09-10 17:55:48 +02:00
Vincent Laporte
9a1253c064 aften: init at 0.0.8
Aften is an audio encoder which generates compressed audio streams based on
ATSC A/52 specification. This type of audio is also known as AC-3 or Dolby®
Digital and is one of the audio codecs used in DVD-Video content.

Homepage: http://aften.sourceforge.net/
(cherry picked from commit 6e009edc41)
2017-09-10 17:55:47 +02:00
Peter Hoeg
de84d8446b neovim-qt: 0.2.7 -> 0.2.8
We now also run some of the tests which is better than nothing.

(cherry picked from commit 608fe16482)
2017-09-10 17:55:47 +02:00
Peter Hoeg
6f1eacac88 neomutt: 20170714 -> 20170907
(cherry picked from commit b21778f43e)
2017-09-10 17:55:47 +02:00
Cray Elliott
77c46580ec wineUnstable: 2.15 -> 2.16
bump staging as well

(cherry picked from commit c892f77e37)
2017-09-10 17:55:47 +02:00
romildo
7a2f00d288 efl: 1.20.2 -> 1.20.3
(cherry picked from commit b776cd02bf)
2017-09-10 17:55:47 +02:00
Jason Miller
f8e518817f tigervnc: correct default ssh client path (#29084)
* tigervnc: correct default ssh client path

The -via command sets up an ssh tunnel, but is hardcoded to /usr/bin/ssh
upstream.  This patches it to use the nixpkgs openssh client.

* tigervnc: patch ssh path correctly

(cherry picked from commit e9183fd2d4)
2017-09-10 17:55:47 +02:00
Jaakko Luttinen
bfa5987ab6 rssguard: 3.4.0 -> 3.4.2
(cherry picked from commit b17ccf39c4)
2017-09-10 17:55:46 +02:00
gnidorah
bc5d6e3250 rambox: 0.5.10 -> 0.5.12
(cherry picked from commit 9810c0c911)
2017-09-10 17:55:46 +02:00
Matthieu Coudron
9530cd9219 offlineimap: 7.1.1 -> 7.1.2
(cherry picked from commit 4551099cb8)
2017-09-10 17:55:46 +02:00
Markus Mueller
300b9f13de mcrl2: 201409 -> 201707
(cherry picked from commit edd94f5fcd)
2017-09-10 17:55:46 +02:00
lassulus
e09335914e centerim: 4.22.10 -> 5.0.1
(cherry picked from commit 72699348c8)
2017-09-10 17:55:46 +02:00
Lancelot SIX
5bedd80b09 gdb: 8.0 -> 8.0.1
See http://lists.gnu.org/archive/html/info-gnu/2017-09/msg00005.html
for release information.

(cherry picked from commit 653cad7a3c)
2017-09-10 17:55:46 +02:00
Andraz Brodnik
9d7ee2e897 Add gosu
(cherry picked from commit 4955943101)
2017-09-10 17:55:46 +02:00
AndersonTorres
586d90215a mcomix: fixup
MComix is failing in the check phase; so, we'll not check it.

(cherry picked from commit f93a019816)
2017-09-10 17:55:45 +02:00
Kamil Chmielewski
dd978b3101 yEd: 3.17 -> 3.17.1
(cherry picked from commit d70e64ceff)
2017-09-10 17:55:43 +02:00
Daiderd Jordan
07602a9176 glslviewer: fix darwin build
(cherry picked from commit 92163ec65c)
2017-09-10 17:26:48 +02:00
Aristid Breitkreuz
302b5af7d6 v8: fix v3 builds by switching to GCC 5 (mksnapshot segfaults with GCC 6) 2017-09-10 17:17:11 +02:00
Daiderd Jordan
4e1bc40607 fox-1.6: add missing frameworks
(cherry picked from commit b310053c01)
2017-09-10 17:11:10 +02:00
Niklas Hambüchen
cf9c0199dc glusterfs: Fix glusterfind's crawlers dlopen() error.
This fixes:

  Traceback (most recent call last):
    File "/nix/store/7f9arl3f9xyj8sm05mkanh2mlp217192-glusterfs-3.10.2/libexec/glusterfs/glusterfind/changelog.py", line 22, in <module>
      import libgfchangelog
    File "/nix/store/7f9arl3f9xyj8sm05mkanh2mlp217192-glusterfs-3.10.2/libexec/glusterfs/glusterfind/libgfchangelog.py", line 21, in <module>
      libgfc = CDLL("libgfchangelog.so", use_errno=True, mode=RTLD_GLOBAL)
    File "/nix/store/nlyr5ankhi7yvva8zndi718zj37js270-python-2.7.13-env/lib/python2.7/ctypes/__init__.py", line 362, in __init__
      self._handle = _dlopen(self._name, mode)
  OSError: libgfchangelog.so: cannot open shared object file: No such file or directory
  Connection to 10.0.0.2 closed.

when running `glusterfind pre`.

Done by setting PYTHONPATH/LD_LIBRARY_PATH as for the other
Python scripts.

(cherry picked from commit abc96aae47)
2017-09-10 16:53:06 +02:00
Niklas Hambüchen
f0a12b8848 glusterfs: Patch upstream bug preventing glusterfind from running.
See: https://bugzilla.redhat.com/show_bug.cgi?id=1489610

Also add patch to correctly log stderr from remote nodes
when glusterfind fails.
This, too, should be removed when fixed upstream.

(cherry picked from commit e7325f82a3)
2017-09-10 16:53:06 +02:00
Niklas Hambüchen
49da03dfff glusterfs: Fix wrong xattr package: xattr -> pyxattr.
Fixes error

  File "/nix/store/lxpsl84km87xpk59nai6a33ihgpfs7qr-glusterfs-3.10.2/libexec/glusterfs/glusterfind/changelog.py", line 105, in populate_pgfid_and_inodegfid
      file_xattrs = xattr.list(p)
  AttributeError: 'module' object has no attribute 'list'

when using `glusterfind pre`.

(cherry picked from commit 8e329da496)
2017-09-10 16:53:06 +02:00
Niklas Hambüchen
6830087d7b glusterfs service: Ensure dirs needed by glusterfind exist
(cherry picked from commit 5bc38fc089)
2017-09-10 16:53:06 +02:00
Sander van der Burg
71f0a68a82 fs-uae: build on x86 linux only
(cherry picked from commit bf9b88f154)
2017-09-10 14:52:00 +00:00
Sander van der Burg
726f45a323 tomcat: bump versions
(cherry picked from commit 631abf835e)
2017-09-10 14:43:28 +00:00
Sander van der Burg
59b18ebd9e fs-uae: 2.8.0 -> 2.8.3
(cherry picked from commit 345e570921)
2017-09-10 14:26:33 +00:00
Rob Vermaas
7f47214526 mpich2: use gfortran 5 2017-09-10 14:11:40 +00:00
Sander van der Burg
3c148e1a54 vice: 2.2 -> 3.1 + fix build procedure
(cherry picked from commit 6e1eedd64e)
2017-09-10 14:00:45 +00:00
Sander van der Burg
cfbb20c8b5 zsnes: restrict building to x86-based Linux platforms only, znses' core is written in x86 asm code
(cherry picked from commit 0d8e157d61)
2017-09-10 14:00:28 +00:00
Aristid Breitkreuz
4d40df403b ispc: use newer version and LLVM 4.0 due to bug in clang++ 3.9 wrapper (see #29204) 2017-09-10 15:44:28 +02:00
Rob Vermaas
9ec0e863b6 Missing self reference 2017-09-10 13:43:45 +00:00
Rob Vermaas
2252998878 Missing semicolon 2017-09-10 13:42:29 +00:00
Jörg Thalheim
ee539d672e python.pkgs.python_simple_hipchat: move out of python-packages
(cherry picked from commit cfb64bdbbd)
2017-09-10 14:33:13 +01:00
Klaas van Schelven
f3522ede1e python-simple-hipchat: 0.1.0 => 0.4.0
0.1.0 does not work on Python 3 but versions >= 0.2 do.

(cherry picked from commit 70fe7ed01e)
2017-09-10 14:33:06 +01:00
Jörg Thalheim
02dd90a3c5 python.pkgs.unicorn: disable python3
fixes #29200

(cherry picked from commit 8f3f64e512)
2017-09-10 14:23:36 +01:00
Matthias Beyer
27e42497b9 audacity: 2.1.2 -> 2.1.3
* Remove gcc-6 patch to make it compile
* Add autoreconf call in preConfigure phase
  Inspired by
  https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/audacity

Suggested-by: Moritz Ulrich <moritz@tarn-vedra.de>
(cherry picked from commit fd1e362205)
2017-09-10 14:23:36 +01:00
Rob Vermaas
eb970de5b6 xonsh: use python 3.5 2017-09-10 13:22:11 +00:00
Rob Vermaas
2ccdac8c9e shaderc: mark as broken 2017-09-10 12:37:55 +00:00
Tristan Helmich
2b1521bfc7 radarr: 0.2.0.778 -> 0.2.0.846
(cherry picked from commit 6d6637549f)
2017-09-10 12:51:41 +01:00
Rob Vermaas
c90698c0a2 seeks: use gcc5, no upstream patch/version available that builds with gcc6 2017-09-10 11:49:26 +00:00
Jörg Thalheim
0f9cda064d perlPackages.Apache-Test: 1.38 -> 1.40
fixes #29155

(cherry picked from commit 87eafdc887)
2017-09-10 12:28:34 +01:00
Jörg Thalheim
ab4a242870 oprofile: fix hardcoded rm/cp paths
(cherry picked from commit a26817b215)
2017-09-10 12:03:03 +01:00
Markus Mueller
7b106c77b1 oprofile: 1.1.0 -> 1.2.0
Fixes build with newer gcc versions.

(cherry picked from commit 79f13f19f0)
2017-09-10 12:02:55 +01:00
Falco Peijnenburg
b31807a93d tests/elk: Fixed failing build on i686.
Too much memory is required for the test.

(cherry picked from commit 11ccf69f75)
2017-09-10 11:54:58 +01:00
Michael Raskin
5d369ba6c4 Merge pull request #29192 from vanschelven/cuneiform
Trying a less disruptive patch for Cuneiform
2017-09-10 12:52:39 +02:00
Jörg Thalheim
ee1aba6ac0 arm-frc-linux-gnueabi-binutils: mark as broken
(cherry picked from commit 72673e67f2)
2017-09-10 11:41:08 +01:00
Michael Raskin
4bc42d9c35 Trying a less disruptive patch for Cuneiform 2017-09-10 12:38:37 +02:00
Aristid Breitkreuz
f6dffbf415 v8: fix 5.4 build 2017-09-10 12:35:39 +02:00
Aristid Breitkreuz
370e2e7caa v8: remove unused old versions 2017-09-10 12:03:28 +02:00
Rob Vermaas
8d5fc1beda dmd: mark as broken 2017-09-10 09:58:37 +00:00
Klaas van Schelven
35009b3a3a python.pkgs.recaptcha-client: disable broken versions
It seems that the recaptcha-client package is no longer maintained.

* The latest released version (1.0.6) is from the year 2011;
* The project page does not mention which Python versions are supported
* The project is hosted on google code, which is discontinued

I was able to succesfully build with Python versions 3.3, 3.4, but not
3.5, 3.6.
2017-09-10 11:51:54 +02:00
Vladimír Čunát
5f15a9f53e stdenv bootstrap: fix evaluation
This is probably a fallout from #28557 merge and revert.
I can't see why exactly this happened, but it seems a safe fix.

(cherry picked from commit c86eb1da5f)
2017-09-10 11:18:50 +02:00
Rob Vermaas
c651a0ccbf gnupg: add gnupg2 alias/symlink for 2.2. Otherwise signing commits with git break. 2017-09-10 09:10:24 +00:00
Rob Vermaas
fbe46c7a24 Snapper: use gcc5, as there is not upstream patch for gcc6 2017-09-10 09:05:14 +00:00
Franz Pletz
c25f2b369d nixos/release: xmonad isn't release-critical
(cherry picked from commit 0d206c0b6c)
2017-09-10 11:02:11 +02:00
Eelco Dolstra
d04de205f3 nifskope: Fix build
https://hydra.nixos.org/build/60608938
(cherry picked from commit 79c9adce65)
2017-09-10 10:58:16 +02:00
timor
32e85cdf04 openafsClient: 1.6.20.2 -> 1.6.21
(cherry picked from commit 602e851052)
2017-09-10 09:36:36 +01:00
Itai Zukerman
29363f276d plex: 1.7.5 -> 1.8.4
(cherry picked from commit 21bac5cbfb)
2017-09-10 10:23:39 +02:00
Peter Simons
f456d206e0 Agda: disable broken build 2017-09-10 09:42:10 +02:00
Peter Simons
19dad71200 Allure & LambdaHack: disable failing Hydra builds 2017-09-10 09:37:18 +02:00
Frederik Rietdijk
45e518d8f0 Merge pull request #29158 from nlewo/ofxclient
pythonPackages.ofxclient and pythonPackages.osprofiler: remove argparse from requirements

(cherry picked from commit 6521a83efe)
2017-09-10 08:54:45 +02:00
Daiderd Jordan
4075187a8c fontforge-fonttools: use $CC
(cherry picked from commit 2317a07fbb)
2017-09-10 00:11:09 +02:00
Daiderd Jordan
830b121571 et: fix build with clang
(cherry picked from commit c0e7983359)
2017-09-09 23:43:26 +02:00
Daiderd Jordan
150195bdf3 eggdrop: fix tcllib reference on darwin
(cherry picked from commit 479c15b08b)
2017-09-09 23:08:00 +02:00
timor
376eb14ac6 perl-File-Modified: 0.07 -> 0.10
(cherry picked from commit e480b4baee)
2017-09-09 17:58:09 +02:00
timor
23b4aa1a8a perl-Filter-Simple: 0.91 -> 0.94
(cherry picked from commit 4bf61ab252)
2017-09-09 17:58:08 +02:00
Peter Simons
f366faa578 haskell-text-zipper: disable test suite to fix the build
(cherry picked from commit e960eb0bf5)
2017-09-09 17:08:44 +02:00
Aleksey Kladov
a6bba8335b lxqt-session: fix the build
closes #29130

(cherry picked from commit 6ce21acf32)
2017-09-09 16:14:27 +02:00
Tim Steinbach
e3fa7ef391 tests: xmonad less dependent on timings
(cherry picked from commit 84e34d4d5d)
2017-09-09 10:07:48 -04:00
Daiderd Jordan
7ccda60ea1 dibbler: fix darwin build
(cherry picked from commit 6226fd05ba)
2017-09-09 15:24:06 +02:00
Daiderd Jordan
ab0d743166 re2: fix dylib library id
(cherry picked from commit 6058539272)
2017-09-09 15:11:53 +02:00
Bjørn Forsman
cc601675e2 kicad: 4.0.6 -> 4.0.7
(cherry picked from commit 15c18cef3d)
2017-09-09 13:37:07 +02:00
Bjørn Forsman
2195b6b50e kicad: put the full version string in name
(cherry picked from commit dfbb710375)
2017-09-09 13:37:06 +02:00
Samuel Leathers
a342d6d780 slic3r: fix build with gcc6
(cherry picked from commit 707ee76522)
2017-09-09 09:56:19 +02:00
Nikolay Amiantov
85567a0941 gfortran: default to gfortran6
This is needed to be in sync with GCC. Fixes xgboost.

(cherry picked from commit 75b3113a4d)
2017-09-09 05:52:20 +03:00
Nikolay Amiantov
4652e1c5e0 openbrf: fix build
(cherry picked from commit b3c35a3974)
2017-09-09 05:52:18 +03:00
Daiderd Jordan
f665a37231 consul: fix output cycle on darwin
(cherry picked from commit cc7b771fcf)
2017-09-09 00:29:31 +02:00
Daiderd Jordan
8210e2a236 c3d: fix darwin build
(cherry picked from commit 25f74ecc8b)
2017-09-08 22:47:12 +02:00
Daiderd Jordan
18f6996169 gsc: fix darwin build
(cherry picked from commit 76437e5e5a)
2017-09-08 22:24:18 +02:00
Tom Saeger
043737b670 pythonPackages.dotfiles: 0.6.3 -> 0.6.4
(cherry picked from commit e1385f0a9461a1112c74f22f37ed3d56b5620770)
2017-09-08 22:07:05 +02:00
Spencer Baugh
065f9d7060 pythonPackages.linuxfd: init at 1.4.4
(cherry picked from commit 4978b204e3)
2017-09-08 22:03:44 +02:00
Robert Helgesson
399101c7a3 python-gst-python: fix pygi overrides dir path
Before it created a lib directory inside the lib directory.

(cherry picked from commit 23cc97f16b)
2017-09-08 21:56:26 +02:00
Daiderd Jordan
8926c06469 bigloo: use default stdenv
(cherry picked from commit 9e142e5a3e)
2017-09-08 21:50:37 +02:00
Daiderd Jordan
fc8634427a autotrace: fix darwin build
(cherry picked from commit a8382432d9)
2017-09-08 21:11:51 +02:00
Peter Simons
33bdb2715c Synchronize Haskell infrastructure with master at f93a019816. 2017-09-08 20:29:18 +02:00
PanAeon
3a3e0d8b04 update skypeforlinux to 5.4.0.1; Fix autologin issue (#29122)
skypeforlinux: 5.3.0.1 -> 5.4.0.1
(cherry picked from commit 5d1a8ecd91)
2017-09-08 18:25:20 +01:00
Thomas Tuegel
928a1ea373 dropbox: 33.4.23 -> 34.4.20
(cherry picked from commit a6fcd2ce2f)
2017-09-08 11:36:50 -05:00
Peter Hoeg
e7345735d3 rubygems: 2.6.10 -> 2.6.13
Fixes a number of CVEs:

- a DNS request hijacking vulnerability. (CVE-2017-0902)
- an ANSI escape sequence vulnerability. (CVE-2017-0899)
- a DoS vulnerability in the query command. (CVE-2017-0900)
- a vulnerability in the gem installer that allowed a malicious gem to overwrite arbitrary files. (CVE-2017-0901)

(cherry picked from commit 9f51b3c105)
2017-09-08 16:23:09 +01:00
Robin Gloster
36fd26a6ae dmtcp: 2.5.0 -> 2.5.1
(cherry picked from commit 04f456ef94)
2017-09-08 16:26:43 +02:00
Robin Gloster
b0664831b7 rosegarden: 15.08 -> 17.04
(cherry picked from commit 3d325000ab)
2017-09-08 16:26:35 +02:00
lassulus
c81b036f73 vbam: svn-1507 -> unstable-2017-09-04
(cherry picked from commit 2524e4cfd5)
2017-09-08 16:26:29 +02:00
Samuel Leathers
e1d0bf12a1 scorched3d: fixing build with gcc6
(cherry picked from commit dc15c15338)
2017-09-08 16:26:23 +02:00
romildo
b893ee4ae2 terminology: 1.1.0 -> 1.1.1
(cherry picked from commit dce314e55b)
2017-09-08 16:25:35 +02:00
Tim Steinbach
50e0deecaa atom: 1.19.4 -> 1.19.7
(cherry picked from commit 00829717e8)
2017-09-08 16:24:54 +02:00
Vladimír Čunát
4fe48dd356 factorio: fixup my eval fixup f9ea527a02
(cherry picked from commit 3a93d9c516)
2017-09-08 16:24:24 +02:00
Samuel Leathers
7e1f3592a4 xiphos: 4.0.3 -> 4.0.6
(cherry picked from commit 4bfa7d891f)
2017-09-08 16:24:09 +02:00
Samuel Leathers
22164c314b webkitgtk-2.17: init at 2.17.91
(cherry picked from commit e11c7399a0)
2017-09-08 16:24:00 +02:00
Samuel Leathers
201d7cddc6 gnome2.gtkhtml4: init at 4.10.0
(cherry picked from commit 2aa8bc45d3)
2017-09-08 16:23:27 +02:00
Franz Pletz
de7fb48967 searx: fix build
(cherry picked from commit 5901a645a8)
2017-09-08 16:23:14 +02:00
Franz Pletz
ba03b7195d atlassian-crowd: 2.12.0 -> 3.0.1
(cherry picked from commit 0ad1d8939f)
2017-09-08 16:23:06 +02:00
Matt McHenry
6e4a7e598a amarok: fixup by building with gcc-5
due to continued lack of progress on
https://github.com/NixOS/nixpkgs/issues/16588, probably not worth the
time for anything better.

Progress on: #28643

(cherry picked from commit af57251cb9)
2017-09-08 16:21:49 +02:00
Vladimír Čunát
683d7dbe0a factorio: use throw instead of abort
Otherwise if you try to listing all available packages, you will get a
hard error on platforms not supported by this package.  Consequently the
tarball job was broken.

(cherry picked from commit f9ea527a02)
2017-09-08 16:21:39 +02:00
zimbatm
6fde181321 yarn: 0.28.4 -> 1.0.1
(cherry picked from commit 2ae7e952b2)
2017-09-08 16:21:31 +02:00
Nikolay Amiantov
bab20afa84 python.pkgs.TheanoWithoutCuda: don't propagate stdenv
Fixes errors during buildEnv.

(cherry picked from commit db5a5ccf2b)
2017-09-08 16:19:27 +02:00
Nikolay Amiantov
ed566eae64 caffe: don't use CUDA by default
CUDA currently requires old GCC. Also, this way Caffe is usable without proprietary blobs.

(cherry picked from commit f1f944f23b)
2017-09-08 16:18:29 +02:00
Nikolay Amiantov
6d9c59bda4 python.pkgs.dlib: init at 19.6
(cherry picked from commit 5a2bb4c992)
2017-09-08 16:18:15 +02:00
Nikolay Amiantov
c17926b2c8 caffe: add Python support
Move to CMake in the process.

(cherry picked from commit c4bed3043d)
2017-09-08 16:17:55 +02:00
Nikolay Amiantov
040055b375 dlib: 19.4 -> 19.6
(cherry picked from commit eb6a8c3f52)
2017-09-08 16:17:44 +02:00
Nikolay Amiantov
ced1d50d8c bazel: 0.4.5 -> 0.5.4
(cherry picked from commit e5059a8739)
2017-09-08 16:17:32 +02:00
Nikolay Amiantov
f32122f98a caffe: 2015-07-02 -> 1.0-rc5
(cherry picked from commit 88641353d6)
2017-09-08 16:17:19 +02:00
Nikolay Amiantov
98ec5f7279 gcc7: 7.1.0 -> 7.2.0
(cherry picked from commit 1704eeb930)
2017-09-08 16:16:57 +02:00
Peter Hoeg
0e899275ea dict: enable the default upstream server so the client works out of the box
(cherry picked from commit 41e7e1304e)
2017-09-08 16:16:32 +02:00
Peter Hoeg
4519468090 syncthing: 0.14.36 -> 0.14.37
(cherry picked from commit e6c40a4dee)
2017-09-08 16:12:44 +02:00
Théo Zimmermann
ab410c3ac1 coq: fetch source from GitHub
(cherry picked from commit a26bbe547e)
2017-09-08 16:12:07 +02:00
Matthew Bauer
147047d72b pinentry-mac: no ‘fill plist’ stuff
fixes #26774

(cherry picked from commit 7f860249e1)
2017-09-08 16:11:50 +02:00
Tim Steinbach
e8e8c9b9c1 docker: Allow package selection in module
(cherry picked from commit 2bb57ef776)
2017-09-08 16:08:53 +02:00
Tim Steinbach
00bf522d58 Add XMonad test
(cherry picked from commit e153fa84a5)
2017-09-08 16:08:41 +02:00
Samuel Leathers
763020823a qucs: 0.0.18 -> 0.0.19
(cherry picked from commit 00753e078d)
2017-09-08 16:08:11 +02:00
Samuel Leathers
5eeab2372d adms: init at 2.3.6
(cherry picked from commit df1d5a4827)
2017-09-08 16:07:45 +02:00
Moritz Kiefer
aa527916df haskell/natural-transformation: add dependency on semigroups for GHC 7.10
(cherry picked from commit 243952d9d4)
2017-09-08 16:06:49 +02:00
José Luis Lafuente
13bc37120b mcomix: Disable test suite for now
Regression introduced by
94351197cd

Exactly the same problem (and solution) that here:
bd2aeb4883

(cherry picked from commit 4912c68aca)
2017-09-08 16:04:58 +02:00
Balletie
843b02c008 rtags: Fix configure phase errors
Add pkgconfig as buildinput, so that the install path is correctly set
with cmake. PkgConfig is an optional dependency for rtags, but they
say it's necessary if you want to replace the prefix with
CMAKE_INSTALL_PREFIX. See:
caad9ac494/cmake/BashCompletion.cmake (L13)

Furthermore, I let the configurePhase of the rtags emacs package be a
noop.

(cherry picked from commit 311a1ee33a)
2017-09-08 16:04:42 +02:00
Michael Raskin
65c34a8375 ocropus: 20150316 -> 20170811
(cherry picked from commit 036bafe0b9)
2017-09-08 16:03:51 +02:00
Michael Raskin
8c26ccac35 silgraphite: drop graphite1 (which had version 2.x)
(cherry picked from commit 6f740953e6)
2017-09-08 16:03:51 +02:00
Michael Raskin
9ba4e92fce vacuum: 1.2.4 -> 1.3.0.20160104
(cherry picked from commit fff500fc00)
2017-09-08 16:03:51 +02:00
Michael Raskin
3e70e3842c pythonPackages.wptserve: make python2-only (upstream uses relative import in the latest release)
(cherry picked from commit f20ccd4b5e)
2017-09-08 16:03:51 +02:00
Michael Raskin
308d3752df pythonPackages.manifestparser: make python2-only
(cherry picked from commit cca09d8067)
2017-09-08 16:02:47 +02:00
Michael Raskin
66070e0c70 pythonPackages.browsermob-proxy: make python2-only
(cherry picked from commit ad44a76005)
2017-09-08 16:02:38 +02:00
Cray Elliott
f4189a8f56 winetricks: 20170614 -> 20170823
(cherry picked from commit f03964ff7c)
2017-09-08 16:01:39 +02:00
Jaka Hudoklin
24f637915e spice-vdagent: systemd-logind integration
This change adds systemd as dependency to enable user session
integration with systemd-logind

(cherry picked from commit 3ca311d74d)
2017-09-08 16:01:19 +02:00
yesbox
ff3f831243 sonarr: 2.0.0.4928 -> 2.0.0.4949
(cherry picked from commit 5059db823a)
2017-09-08 16:01:03 +02:00
Andreas Rammhold
02e47908aa rustup: 1.2.0 -> 1.3.0
(cherry picked from commit 14c3ce919b)
2017-09-08 16:00:41 +02:00
Cray Elliott
7b890e2e1f nvidia-x11: 375.66 -> 384.69
(cherry picked from commit 6df5f88aca)
2017-09-08 16:00:29 +02:00
Eric Litak
a9af2309a7 factorio: 0.15.33 -> 0.15.34
(cherry picked from commit 2164c01a53)
2017-09-08 16:00:04 +02:00
Eric Litak
d1cc587512 factorio: refactored the arch+version abstraction
(cherry picked from commit 02d715d29b)
2017-09-08 15:59:56 +02:00
WilliButz
f0369b8c1e grafana: 4.3.2 -> 4.4.3
(cherry picked from commit 226a20117d)
2017-09-08 15:59:37 +02:00
Ryan Mulligan
327e0913e8 truecrypt: fix build with gcc6 patch
The build was failing with gcc 6.4.0; using the samee gcc6 patch Arch
Linux uses fixed the build.

This commit also refactors out the builder.sh possibly fixing the
NOGUI make flag option.

(cherry picked from commit 8b0de80e55)
2017-09-08 11:53:28 +01:00
Frederik Rietdijk
85a1d86d93 Revert "python.pkgs.buildPythonPackage: use distutils-cfg to block downloads, fixes #25428"
This reverts commit b73e3bfafd.

See https://github.com/NixOS/nixpkgs/issues/29103

(cherry picked from commit c3a0c3c9f1)
2017-09-08 08:55:52 +02:00
Vladimír Čunát
399b6100c2 nixos/mfi: fix eval after removal 7ffc6db733 2017-09-08 08:41:06 +02:00
Vladimír Čunát
9efe46d94d Merge #28906: glibc: 2.25 -> 2.25-49 (upstream patches)
(cherry picked from commit 0c660ad42f)
2017-09-07 23:34:43 +02:00
Frederik Rietdijk
722c328a22 Revert "python.pkgs.pybfd: mark as broken"
This reverts commit 2f5ee4989a.

Package is no longer broken since 460df30bd8 was reverted.
2017-09-07 22:27:55 +02:00
Bjørn Forsman
0a94033ab5 perlPackages.BoostGeometryUtils: unbreak build
Set LD=$CC to fix this build error:

...
ExtUtils::Mkbootstrap::Mkbootstrap('blib/arch/auto/Boost/Geometry/Utils/Utils.bs')
ld -shared -O2 -L/nix/store/sgjc1147vi5hd57ck9xgck5xjkydg5lz-glibc-2.25/lib -fstack-protector-strong -o blib/arch/auto/Boost/Geometry/Utils/Utils.so buildtmp/Utils.o -lstdc++
buildtmp/Utils.o: In function `_GLOBAL__sub_I_Utils.c':
Utils.c:(.text.startup+0x1a): undefined reference to `__dso_handle'
/nix/store/yf4p5w2v4h4i8rja9zw1akp007av624j-binutils-2.28.1/bin/ld: buildtmp/Utils.o: relocation R_X86_64_PC32 against undefined hidden symbol `__dso_handle' can not be used when making a shared object
/nix/store/yf4p5w2v4h4i8rja9zw1akp007av624j-binutils-2.28.1/bin/ld: final link failed: Bad value
error building blib/arch/auto/Boost/Geometry/Utils/Utils.so from buildtmp/Utils.o at /nix/store/7q2hps69zkj501lsmvnd2ry95mmdbh80-perl-5.24.2/lib/perl5/5.24.2/ExtUtils/CBuilder/Base.pm line 321.
builder for ‘/nix/store/bdwqvgxlgcqsmlqfh0d74jkpw96p78kh-perl-Boost-Geometry-Utils-0.15.drv’ failed with exit code 2
error: build of ‘/nix/store/bdwqvgxlgcqsmlqfh0d74jkpw96p78kh-perl-Boost-Geometry-Utils-0.15.drv’ failed

(cherry picked from commit c24820db93)
2017-09-07 21:53:01 +02:00
Bjørn Forsman
4b28be5f10 nixos/postfix: undo deprecation of extraConfig, extraMasterConf
I realize that advanced users like to configure services with Nix
attrsets, but I don't think we should remove the option to use the
(configuration) language provided by upstream.

(cherry picked from commit eed14baec3)
2017-09-07 21:46:13 +02:00
Robin Gloster
670c641c03 tcpdump: 4.9.1 -> 4.9.2
This is a security release theoretically under emgargo, but leaked by
Mageia and Fedora.

We have permission to deliver this prior to public release.

(cherry picked from commit 993a83d395)
2017-09-07 21:39:12 +02:00
Jörg Thalheim
2cfba17936 mfi: remove
(cherry picked from commit 6b6ffd5b21)
2017-09-07 20:34:45 +01:00
Jörg Thalheim
7ffc6db733 nixos/mfi: remove
(cherry picked from commit 6f0b538044)
2017-09-07 20:34:45 +01:00
Jörg Thalheim
dc8bd23dce v8: remove 3.14.5.10
was only used by mongodb248

(cherry picked from commit 9ee5727459)
2017-09-07 20:34:44 +01:00
Jörg Thalheim
e6bf7dfd5f mongodb248: remove
reason: build fails in hydra
Do still need this and want to maintain this @elitak?

(cherry picked from commit 382afe8c62)
2017-09-07 20:34:44 +01:00
Frederik Rietdijk
32f2eadbe4 Merge pull request #29072 from FRidh/python-fixes-3
Python: several fixes (3)
(cherry picked from commit 56c56fb414)
2017-09-07 19:27:12 +02:00
Nikolay Amiantov
4e6c92d548 python.pkgs.protobuf: fix build
(cherry picked from commit 4999aeb7b7)
2017-09-07 18:13:41 +02:00
Tim Steinbach
283d969a9c linux: 4.9.47 -> 4.9.48
(cherry picked from commit dc8b228a89)
2017-09-07 10:31:24 -04:00
Tim Steinbach
d144cabba9 linux: 4.12.10 -> 4.12.11
(cherry picked from commit a1912c9eb4)
2017-09-07 10:31:23 -04:00
Eelco Dolstra
460df30bd8 Revert "Merge pull request #28557 from obsidiansystems/binutils-wrapper"
This reverts commit 0a944b345e, reversing
changes made to 61733ed6cc.

I dislike these massive stdenv changes with unclear motivation,
especially when they involve gratuitous mass renames like NIX_CC ->
NIX_BINUTILS. The previous such rename (NIX_GCC -> NIX_CC) caused
months of pain, so let's not do that again.

(cherry picked from commit ec8d41f08c)
2017-09-07 12:53:33 +02:00
Frederik Rietdijk
2f5ee4989a python.pkgs.pybfd: mark as broken 2017-09-07 12:48:31 +02:00
Frederik Rietdijk
c51b089392 Merge pull request #29009 from FRidh/python-fixes-2
Python: several fixes (2)
(cherry picked from commit aabadda0c2)
2017-09-07 10:23:26 +02:00
Peter Hoeg
165fa89762 arc-theme: Fix build with gnome 3.24
(cherry picked from commit fefdc00c52)
2017-09-07 16:00:24 +08:00
Tim Steinbach
b50193f0ca tests: Fix hibernate
(cherry picked from commit 024b501907)
2017-09-06 22:02:41 -04:00
Daiderd Jordan
a6c29020c1 ucl: only pass -stc=c90 when using gcc
Also remove -fPIC, it's included in the hardening flags by default.

(cherry picked from commit 51eafbe028)
2017-09-06 21:55:10 +02:00
Tim Steinbach
de2697ea78 docker: 17.06.1-ce -> 17.06.2-ce
(cherry picked from commit 8bd1a220d9)
2017-09-06 15:05:10 -04:00
John Ericson
a23b5a1c8b macos-sierra-shared: Fix, after binutils-wrapper broke it
cctool's as needs to be told use to use gnu as, or else we'd need a
dependency cycle between cctools and clang for this case.

In general, this is not a problem because clang uses its own integrated
assembler where possible, and gnu as otherwise.

(cherry picked from commit eb326c9cb7)
2017-09-06 14:29:23 -04:00
Frederik Rietdijk
e1d6d735b9 python.pkgs.pytest-warnings: fix homepage, fixes eval
(cherry picked from commit dcbf59d8a7)
2017-09-06 20:18:24 +02:00
Markus Hauck
58ed8fa77a rawtherapee: 5.0-r1 -> 5.2
(cherry picked from commit 572361f396)
2017-09-06 19:42:26 +02:00
pbogdan
7b174993b9 nixos/fontconfig: fix substitutions option (#28895)
(cherry picked from commit 94a4183bda)
2017-09-06 19:23:45 +02:00
makefu
e642c7607c dnscrypt-wrapper module: fix permissions and options
When keys get refreshed a folder with the permissions of the root user
get created in the home directory of the user dnscrypt-wrapper. This
prevents the service from restarting.

In addition to that the parameters of dnscrypt-wrapper have
changed in upstream and in the newly packaged software.

(cherry picked from commit ca54a86162)
2017-09-06 19:23:43 +02:00
Orivej Desh
51cede6eab tiled: 1.0.1 -> 1.0.3
(cherry picked from commit cf6f900989)

Contains quite a few bug fixes
2017-09-06 19:23:38 +02:00
Tim Steinbach
5addd12c9b i3-gaps: Install man pages properly
(cherry picked from commit 41d9884067)
2017-09-06 10:20:04 -04:00
Frederik Rietdijk
52fa67fddd Merge pull request #28884 from FRidh/python-fixes
Python: several fixes
(cherry picked from commit 67651d80bc)
2017-09-06 15:23:07 +02:00
wisut hantanong
ea825f78d1 pythonPackages.pyshp : move to separate expression
(cherry picked from commit 489bfcfa0f)
2017-09-06 15:22:55 +02:00
wisut hantanong
63e363f374 pythonPackages.tempora : move to separate expression
(cherry picked from commit 43acfe0f49)
2017-09-06 15:20:20 +02:00
wisut hantanong
444839b310 pythonPackages.pyrr : move to separate expression
(cherry picked from commit b9eebaf8bb)
2017-09-06 15:19:30 +02:00
Joachim Fasting
20f4bfd81a tinycc: 0.9.27pre-20170710 -> 0.9.27pre-20170821
(cherry picked from commit 004463152a)
2017-09-06 07:09:04 +02:00
Joachim Fasting
9da9004062 tor-browser-bundle-bin: 7.0.4 -> 7.0.5
(cherry picked from commit 5113be54a4)
2017-09-06 07:08:57 +02:00
John Ericson
28e46e2388 mplayer: depsBuildBuild isn't (yet) a parameter, so don't use it
Thanks @dezgeg for catching my error.

(cherry picked from commit f152a5d7bb)
2017-09-06 00:37:30 -04:00
John Ericson
601e989d43 zile: disable help2man for cross builds
@dezgeg caught my error--the issue isn't building help2man, but running
it on cross-compiled binaries.

This effectively reverts 0825f30fd2 as
far as behavior is concerned, but keeps the removal of `crossAttrs`.

(cherry picked from commit 28e4975bd1)
2017-09-06 00:31:40 -04:00
Daiderd Jordan
171cc193b8 afl: use clangStdenv
Fixes #28712

(cherry picked from commit 8706664ff6)
2017-09-05 22:01:44 +02:00
Daiderd Jordan
dcaa3fdb84 clang-stdenv: use libstdcxxHook when targeting linux
(cherry picked from commit 907222098a)
2017-09-05 21:48:50 +02:00
Daiderd Jordan
356a0c8de6 libstdc++: add setup-hook
(cherry picked from commit 0ea92a3c24)
2017-09-05 21:48:49 +02:00
Samuel Leathers
1134b9e2d0 libfpx: fix build with gcc6
(cherry picked from commit 402e6ac089)
2017-09-05 21:43:11 +02:00
John Ericson
d94110403e haskell infra: Make sure packages get custom stdenv
One of the goals of 74f5fe5 was to allow passing in a custom stdenv,
which would be used for genericBuilder's `mkDerivation` call. That does
work, but if packages takes `stdenv` as an parameter for any reason,
they'll get the default one instead. This change remedies it.

(cherry picked from commit 19de1f537e)
2017-09-05 15:35:57 -04:00
Franz Pletz
6d8a5d7851 file: 5.31 -> 5.32 for CVE-2017-1000249
(cherry picked from commit 84ec7ef6c3)
2017-09-05 20:23:00 +02:00
John Ericson
ae2b248bf7 mplayer: Simplify cross, no crossAttrs or crossConfig
(cherry picked from commit 10b2bb8288)
2017-09-05 14:06:13 -04:00
John Ericson
6bb6587953 links 2: Simplify cross, no crossAttrs or crossConfig
(cherry picked from commit 5de3b11960)
2017-09-05 14:06:13 -04:00
John Ericson
40ada2dac9 elinks: Simplify cross, no crossAttrs or crossConfig
(cherry picked from commit 8babcd4d2b)
2017-09-05 14:06:13 -04:00
John Ericson
d0fc9587bd zile: help2man is no longer likely to cause problems
(cherry picked from commit 0825f30fd2)
2017-09-05 14:06:13 -04:00
Franz Pletz
a5a6cd017a postgresql92: remove last references
(cherry picked from commit 279db6966ef89bd8096634fdb5a5ec77dd06a228)
2017-09-05 18:20:05 +02:00
Franz Pletz
bc36e9184a postgresql9{1,2}: fix evaluation
(cherry picked from commit 59bed53f3c)
2017-09-05 18:20:05 +02:00
Piotr Bogdan
6ba56fe18e caps: fix build with gcc6
(cherry picked from commit 3d8d9aa1dd)
2017-09-05 18:07:42 +02:00
Franz Pletz
f24a7f6fa8 i3: install manpages
cc #28976

(cherry picked from commit 101a048f95)
2017-09-05 18:04:11 +02:00
Franz Pletz
c37b132cff postgresql96: 9.6.3 -> 9.6.5
(cherry picked from commit 4743d77e57)
2017-09-05 18:04:11 +02:00
Franz Pletz
97ab9b57a9 postgresql95: 9.5.7 -> 9.5.9
(cherry picked from commit 1b0acfed50)
2017-09-05 18:04:11 +02:00
Franz Pletz
1d2ddfe7d1 postgresql94: 9.4.12 -> 9.4.14
(cherry picked from commit df0b19aedc)
2017-09-05 18:04:10 +02:00
Franz Pletz
204a1ac4d4 postgresql93: 9.3.17 -> 9.3.19
(cherry picked from commit 8b930e716a)
2017-09-05 18:04:10 +02:00
Franz Pletz
38e18a141d postgresql9{1,2}: remove, not supported anymore
See https://www.postgresql.org/support/versioning/.

(cherry picked from commit dbf6e367e8)
2017-09-05 18:04:10 +02:00
Tim Steinbach
e53117c2c0 i3: 4.13 -> 4.14
(cherry picked from commit ce38725162)
2017-09-05 18:04:06 +02:00
Tim Steinbach
83bef527f7 py3status: 3.0 -> 3.6
(cherry picked from commit 36ee9dcf70)
2017-09-05 18:04:06 +02:00
Samuel Leathers
c296005ad0 lenmus: fixing build with gcc6
(cherry picked from commit bd540d9370)
2017-09-05 18:04:05 +02:00
Michel Kuhlmann
f451490389 saga: 2.3.1 -> 5.0.0
(cherry picked from commit 7a96ec95bf)
2017-09-05 18:04:05 +02:00
Fatih Altinok
b5e566dff9 flow: 0.49.1 -> 0.54.0
(cherry picked from commit ec39670290)
2017-09-05 18:03:32 +02:00
Gabriel Adomnicai
65f47e95bf mmake: init at 1.2.0 (#28904)
* Package for mmake

* Package for mmake - build from sources

* Package name update

* Added maintainers

(cherry picked from commit 7c08e86be9)
2017-09-05 18:03:32 +02:00
Michael Alan Dorman
53ad9a097b melpa-packages: 2017-09-04
(cherry picked from commit 12e1a2b186)
2017-09-05 18:03:31 +02:00
Michael Alan Dorman
a026fad3a4 melpa-stable-packages: 2017-09-04
(cherry picked from commit cb04086a96)
2017-09-05 18:03:31 +02:00
Michael Alan Dorman
33f5cc8de8 org-packages: 2017-09-04
(cherry picked from commit e010d2d2cb)
2017-09-05 18:03:31 +02:00
Michael Alan Dorman
e0d1da48a0 elpa-packages: 2017-09-04
(cherry picked from commit 4216546642)
2017-09-05 18:03:30 +02:00
SLNOS
20f2b1ffaa firefoxPackages: tor-browser: 6.5.2 -> 7.0.1, keep 6.5.2
(cherry picked from commit 26cf9e33fa)
2017-09-05 18:01:39 +02:00
SLNOS
58d947a4fe firefoxPackages: tor-browser: reorganize expression
(cherry picked from commit 513341434c)
2017-09-05 18:01:39 +02:00
SLNOS
f7d0f713a8 firefoxPackages: add extraMakeFlags to common builder, fix official branding handling
(cherry picked from commit a681afb8f1)
2017-09-05 18:01:39 +02:00
SLNOS
886ab96d1a firefoxPackages: add extraConfigureFlags to common builder, move --disable-loop flag to tor-browser expression
(cherry picked from commit 344fbb5ddb)
2017-09-05 18:01:38 +02:00
José Luis Lafuente
431f24ee4f hyper: 1.3.3 -> 1.4.3
(cherry picked from commit 1db53fb938)
2017-09-05 18:01:38 +02:00
Samuel Leathers
2efe24ca13 libctemplate: remove 2.2
(cherry picked from commit 896f0daa1a)
2017-09-05 16:45:08 +01:00
Samuel Leathers
b5f5583bdc stunt rally: fixing build with gcc6
(cherry picked from commit 2134b928ec)
2017-09-05 16:37:42 +01:00
Lukas Werling
eba2aed324 x2goclient: 4.0.5.1 -> 4.1.0.0
Add openssh as dependency for sftp-server. When connecting, x2goclient
crashes if it can't find that executable.

(cherry picked from commit a8aef188c8)
2017-09-05 15:25:51 +01:00
Samuel Leathers
9e50f29525 herqq: 1.0.0 -> 2.1.0
(cherry picked from commit 4151e2f579)
2017-09-05 15:27:52 +02:00
Laure Tavard
941e5f65be cdo: init at 1.7.2 (#22496)
(cherry picked from commit bf491f8794)
2017-09-05 14:43:49 +02:00
Robin Gloster
9e66acf8d1 jenkins: 2.73 -> 2.77
(cherry picked from commit 8502d94b31)
2017-09-05 14:43:42 +02:00
Robin Gloster
f307c3ed69 bwa: 0.7.15 -> 0.7.16a
(cherry picked from commit a0967948d9)
2017-09-05 14:43:42 +02:00
Jörg Thalheim
e9f8acfbeb linux_chromiumos_3_18: remove kernel due lack of maintainer/breakage
There is no maintainer for this package, probably not many users.
It requires effort to fix all third-party modules for this old kernel
versions. It might contain unpatched security holes.

For Pixel chromebooks, we have the samus-kernel.
Apart from that https://github.com/GalliumOS/linux might be a good choice.

(cherry picked from commit 44f93731d6)
2017-09-05 14:43:42 +02:00
Peter Hoeg
4fd60bf174 ktorrent: 5.0.1 -> 5.1.0
(cherry picked from commit 17f4cb4eb8)
2017-09-05 14:28:28 +02:00
Peter Hoeg
c5e2076a21 libktorrent: 2.0.1 -> 2.1
(cherry picked from commit 82e0b910e7)
2017-09-05 14:28:27 +02:00
Franz Pletz
cdd2a69447 ffmpeg_2_8: 2.8.11 -> 2.8.13
(cherry picked from commit 85cffcfce0)
2017-09-05 14:28:19 +02:00
Franz Pletz
49408358f5 libav_12: 12 -> 12.1
(cherry picked from commit b1e9eff33e)
2017-09-05 14:28:19 +02:00
Franz Pletz
32cf375642 kismet: 2013-03-R1b -> 2016-07-R1
(cherry picked from commit 95d18f3509)
2017-09-05 14:28:18 +02:00
Franz Pletz
bb5ce1654f capnproto: 0.6.0 -> 0.6.1
(cherry picked from commit 3352cfc597)
2017-09-05 14:28:18 +02:00
Franz Pletz
4fbd803a04 can-utils: 20140427 -> 20170830
(cherry picked from commit bdd7630b53)
2017-09-05 14:28:18 +02:00
Franz Pletz
ed220780be cadvisor: 0.23.8 -> 0.26.1
(cherry picked from commit 6f7f5b5c85)
2017-09-05 14:28:17 +02:00
Franz Pletz
fd51bd8501 babeltrace: 1.2.4 -> 1.5.3
(cherry picked from commit c6e5fc0b36)
2017-09-05 14:28:17 +02:00
Franz Pletz
e48446fc21 avro-cpp: 1.8.1 -> 1.8.2
(cherry picked from commit 0c08a18f19)
2017-09-05 14:28:17 +02:00
Franz Pletz
0582995d67 avidemux: 2.6.20 -> 2.7.0
(cherry picked from commit df92ed29a5)
2017-09-05 14:28:16 +02:00
Franz Pletz
7205373a87 autoconf-archive: 2016.09.16 -> 2017.03.21
(cherry picked from commit 1c4d28539f)
2017-09-05 14:28:16 +02:00
Franz Pletz
50891380f5 audio-recorder: 1.9.4 -> 1.9.7
(cherry picked from commit 69549aeee5)
2017-09-05 14:28:16 +02:00
Franz Pletz
94bfbac7b8 at: 3.1.16 -> 3.1.20
(cherry picked from commit 00a9902297)
2017-09-05 14:28:15 +02:00
Gabriel Ebner
73d472999e eprover: 1.9.1 -> 2.0
(cherry picked from commit b2eff3c60d)
2017-09-05 14:28:15 +02:00
Franz Pletz
3d83c82dbf tcpdump: fix multiple CVEs
Fixes CVE-2017-11541, CVE-2017-11542, CVE-2017-11543.

Also fixes a segfault if built with openssl 1.1.

(cherry picked from commit a46f206271)
2017-09-05 13:11:29 +02:00
Franz Pletz
c6b5b198ac aptly: 1.0.1 -> 1.1.1
(cherry picked from commit f8ff9a783f)
2017-09-05 13:11:29 +02:00
Franz Pletz
db84535738 asterisk-lts: 13.15.0 -> 13.17.1
(cherry picked from commit 9d7425052b)
2017-09-05 13:11:29 +02:00
Franz Pletz
a812bc0fde asterisk-stble: 14.6.0 -> 14.6.1
(cherry picked from commit abba0b15d8)
2017-09-05 13:11:28 +02:00
Franz Pletz
dd788df85f advancecomp: 1.23 -> 2.0
(cherry picked from commit a5e9a31fb5)
2017-09-05 13:11:28 +02:00
Franz Pletz
153b9e02d3 connman: 1.34 -> 1.35
Fixes CVE-2017-12865, see http://connmando.nri-secure.co.jp/index.html.

Fixes #28967.

(cherry picked from commit 7753daa204)
2017-09-05 12:14:56 +02:00
Kamil Chmielewski
251ec42ecc ponyc: 0.18.1 -> 0.19.0
https://github.com/ponylang/ponyc/issues/2209
(cherry picked from commit b80c3646c2)
2017-09-05 12:14:44 +02:00
catern
08728dd9eb offlineimap: add Kerberos support
(cherry picked from commit b5eb923bc7)
2017-09-05 12:14:32 +02:00
catern
bd9abb16ce mutt: add Kerberos support
(cherry picked from commit bf33bf525d)
2017-09-05 12:14:17 +02:00
Ioannis Koutras
f76a08e461 skrooge: 2.8.1 -> 2.9.0
(cherry picked from commit c256e8f398)
2017-09-05 12:13:46 +02:00
Gabriel Gonzalez
0db8f35b7d Statically link dhall-* executables
This change statically links the `dhall-*` family of executables so that
they start up more quickly on NixOS.  This also updates the `dhallToNix`
utility to use the statically linked `dhall-to-nix` executable

(cherry picked from commit fd2c8d0a00)
2017-09-05 12:13:00 +02:00
Profpatsch
24071cbc19 Revert "dhall: add a static top-level executable for dhall"
This reverts commit 11cd027b30.

There is a more extensive PR.

(cherry picked from commit ffa631dd39)
2017-09-05 12:12:53 +02:00
Peter Hoeg
531d3792ad netalyzr: init at 57861
(cherry picked from commit 62ff6cb69c)
2017-09-05 12:12:18 +02:00
Vladimír Čunát
42c68301f4 maxx: license fixups
The main thing is that I'm convinced the license can't be free when it
restricts redistribution to certain platforms.  That probably holds with
the usual definitions like from Debian, FSF or OSI.

(cherry picked from commit 8414d8386b)
2017-09-05 12:11:30 +02:00
adisbladis
dbf7ed1306 go-ethereum: 1.6.6 -> 1.6.7
(cherry picked from commit 1b709c981c)
2017-09-05 08:49:11 +01:00
Samuel Leathers
a8a33fe284 srcml: fix build with gcc6
(cherry picked from commit d93e2ccdd0)
2017-09-05 07:40:49 +01:00
Peter Hoeg
5ab8db6599 dbus-broker: meson and ninja hooks handle most things for us
(cherry picked from commit 6f6a7aae8f)
2017-09-05 09:53:48 +08:00
Vladimír Čunát
ae0babcb63 licenses: fix fullName capitalization
inspired by repology.org

(cherry picked from commit 65f6e6ccb6)
2017-09-05 00:22:26 +02:00
Jörg Thalheim
eee2d17446 mitmproxy: unicode locales, skip network test
(cherry picked from commit 73c6284c2e)
2017-09-04 22:48:21 +01:00
Michele Catalano
288d1d1780 nexus: Add module for nexus.
Add also myself as maintainer
Add simple test of the nexus service

(cherry picked from commit 4ea1d49643)
2017-09-04 23:16:41 +02:00
Michele Catalano
b922f949e2 nexus: 2.12.0-01 -> 3.5.1-02
Update Nexus to version 3.5.1-02 and fix startup stript to run in nix
environment.

(cherry picked from commit e783c2b39c)
2017-09-04 23:16:32 +02:00
Profpatsch
0ad86858e7 dhall: add a static top-level executable for dhall
cc @Gabriel439

(cherry picked from commit 11cd027b30)
2017-09-04 23:16:25 +02:00
Jaka Hudoklin
1a3596a862 tor-browser: allow to pass TOR_CONTROL_PORT and TOR_SOCKS_PORT
(cherry picked from commit 0347659542)
2017-09-04 23:16:08 +02:00
Tim Steinbach
d903f48495 alacritty: 2017-08-28 -> 2017-09-02
(cherry picked from commit 0e8875285a)
2017-09-04 23:15:45 +02:00
Michael Weiss
7861d1b0a6 glances: 2.10 -> 2.11
(cherry picked from commit d70331ca61)
2017-09-04 23:14:29 +02:00
zraexy
c44d879fec ardour: fix desktop file icon path
(cherry picked from commit 1f67b17daf)
2017-09-04 23:11:44 +02:00
Felix Singer
5c237e40c7 Update homepage link of Mumble
(cherry picked from commit f37f8c4b4b)
2017-09-04 23:11:30 +02:00
Piotr Bogdan
4c587d06fc pr template: make formatting consistent
(cherry picked from commit e221d945ad)
2017-09-04 23:11:16 +02:00
aszlig
e067351e75 xournal: 0.4.8 -> 0.4.8.2016
Upstream bug fixes:

  * pen and touchscreen input handling bugfixes
  * fix a minor bug with save file paths in Windows (D. German)
  * use GDK macros (not WIN32) to disable X11-specific code (T.
    Schoonjans)
  * export to PDF and printing: fix resolution loss on some pdf
    backgrounds
  * disable xinput during modal dialog boxes
  * avoid data corruption when exporting to overwrite a PDF
  * fix path search order for toolbar bitmaps
  * text and image tools activate on button release instead of button
    press to avoid subsequent confusion between clicks in toolbar and
    drawing area
  * fix "pen disable touch" when touchscreen sends prox events (A.
    Kittenberger)
  * fix crash when pasting text or images via xclip
  * updated Italian translation (Marco Ciampa)

New upstream features:

  * add space and shift-space bindings to page down/up (D. German)
  * add A5 paper (D. German)
  * config option to export successive layers to separate PDF pages
  * config option to create new file when trying to open non-existent
    .xoj

The full change log along with bug numbers can be found at:

https://sourceforge.net/p/xournal/code/ci/Release-0_4_8_2016/tree/ChangeLog

I've dropped gdk-quartz-backend.patch, because I believe it has been
fixed upstream.

Here are the upstream changes relevant for the patch (shortened, because
SourceForge has really long URLs):

  http://bit.ly/2vXW8n0 -> src/Makefile.am
  http://bit.ly/2gDnjl7 -> src/xo-file.c
  http://bit.ly/2xJ5K7A -> src/xo-misc.c

Tested building and using the application.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Cc: @7c6f434c, @dguibert
Cc: @johbo who has introduced the patch in #21842
(cherry picked from commit 8436e9bfcd)
2017-09-04 23:11:08 +02:00
Piotr Bogdan
7c29204edd allegro: fix sandboxed build with nixUnstable
In Nix 1.12 sandboxed builds are performed in /build/ directory which conflicts
with the regex in docs/CMakeLists.txt, and generated documentation ends up in
wrong directory -> https://hydra.nixos.org/build/53914969/nixlog/1 -> CTRL-F
abi.txt

(cherry picked from commit e22a77217d)
2017-09-04 23:10:14 +02:00
Vincent Laporte
ba1645d804 coqPackages: remove duplication in mkCoqPackages
(cherry picked from commit ebce795c5c)
2017-09-04 23:09:57 +02:00
Cray Elliott
a5fa58ef45 mwprocapture: fix build with kernels <4.13
also do some minor cleanup

(cherry picked from commit 1af75ba802)
2017-09-04 23:09:42 +02:00
Cray Elliott
9c2c4e7220 mwprocapture: 1.2.0.3269 -> 1.2.0.3589
remove linux 4.11 patch as it was included upstream, include
a new patch needed for linux 4.13

(cherry picked from commit deb50bcdc7)
2017-09-04 23:09:30 +02:00
Peter Hoeg
225f26b610 zeal: 0.3.1 -> 0.4.0
Also switch to cmake and remove the ads that are now otherwise being loaded.

(cherry picked from commit c4265cd7ee)
2017-09-04 23:05:11 +02:00
Jaka Hudoklin
4d36f29e35 tor-browser: allow to pass TOR_SKIP_LAUNCH
(cherry picked from commit ff1b18a455)
2017-09-04 23:03:55 +02:00
Jaka Hudoklin
a1415df71f nixos/xpra: allow to set extra options (#28934)
(cherry picked from commit 4521225d22)
2017-09-04 23:00:54 +02:00
Tim Steinbach
a98c19fe2c Merge pull request #28991 from copumpkin/backport-coreutils-fix-17.09
coreutils: fix on Darwin
2017-09-04 16:10:55 -04:00
John Ericson
14fbe46429 gcc-4.5: Fix typo
(cherry picked from commit 6a089581f8)
2017-09-04 15:53:31 -04:00
Dan Peebles
4951f1f01c coreutils: fix on Darwin
This patch doesn't apply because it's already applied upstream
2017-09-04 14:16:14 -04:00
Matt McHenry
cb9eb2147e pfixtools: patch to work with gcc 6
Progress on: #28643
fixes #28984

(cherry picked from commit dbf97a5afe)
2017-09-04 18:38:11 +01:00
Piotr Bogdan
4c749bd913 mps: 1.115.0 -> 1.116.0
1.115.0 doesn't build with gcc6

(cherry picked from commit fc391e7ecd)
2017-09-04 20:15:30 +03:00
Samuel Leathers
3c252dc092 libmatheval: use guile 2.0
(cherry picked from commit 6e546a514c)
2017-09-04 20:07:12 +03:00
Tuomas Tynkkynen
dd83fb4354 openlierox: Fix build
(cherry picked from commit eecf9c5bb6)
2017-09-04 20:03:53 +03:00
volth
5b3e9051a0 proggyfonts: fix output hash
See PR #28960 for details about the problem. There is some
non-determinism surrounding copies of the Speedy/Speedy11 font, so
deleting one makes it deterministic again without losing anything.

(cherry picked from commit 7d231c5435)
2017-09-04 17:55:44 +01:00
Tuomas Tynkkynen
5cb9987920 tpm-tools: 1.3.8 -> 1.3.9.1, fixes build
(cherry picked from commit 5f8e6a4fe1)
2017-09-04 19:15:47 +03:00
Tuomas Tynkkynen
4bba234334 apple-source-releases: Add some meta.platforms
Or Hydra tries to build them on Linux...

(cherry picked from commit e6a83ed89c)
2017-09-04 19:06:28 +03:00
Tuomas Tynkkynen
1b55440982 mdadm4: Fix build by including change from 7d010ab5f4
And drop `-std=gnu89` while at it.

(cherry picked from commit 19387e3123)
2017-09-04 18:57:00 +03:00
John Ericson
d07d5d4c41 top-level, linux stdenv make boootstrap tools: Fix eval
Now the NixOS tarball job succeeds again

(cherry picked from commit 9a1b7cf2ae)
2017-09-04 11:40:10 -04:00
John Ericson
b3e5bda94f binutils-wrapper: Accidentally deleted macOS Sierra reexport hack
Did this when spliting off binutils-wrapper from cc-wrapper in
40e9b2a7e6: I deleted the file instead of
moving it.

(cherry picked from commit 3601a97e3c)
2017-09-04 11:40:09 -04:00
Tim Steinbach
1d9b98fa14 linux-copperhead: 4.12.10.a -> 4.13.a
(cherry picked from commit 967077537b)
2017-09-04 11:09:48 -04:00
Robin Gloster
49cdcb3468 ruby-modules grpc: fix merge 2017-09-04 14:38:41 +02:00
Tim Steinbach
67c46eff00 linux: Add 4.13
(cherry picked from commit c1e2a0b6f4)
2017-09-03 19:42:12 -04:00
Vladimír Čunát
f09532817d Merge #28946: nixos doc: update glibc locales link
(cherry picked from commit b41d33319c)
2017-09-03 23:04:04 +02:00
Jörg Thalheim
c22764892c nestopia: fix icon theme
(cherry picked from commit 4b10de8182)
2017-09-03 17:14:16 +01:00
Samuel Leathers
b9f56a420a nestopia: 1.46.2 -> 1.47
(cherry picked from commit 7d54467ad0)
2017-09-03 17:14:12 +01:00
John Ericson
300627b46f doc: Document Binutils Wrapper
Shrunk the CC Wrapper documentation so as not to be repetative.

(cherry picked from commit 44cc709e29)
2017-09-03 11:30:38 -04:00
John Ericson
b852d2bf53 rpm: Fix to get raw binutils for headers
(cherry picked from commit b298916442)
2017-09-03 11:30:38 -04:00
John Ericson
cf9e40252b gcc_multi: Fix so binutils wrapper also has glibc_multi
(cherry picked from commit ce359d49fb)
2017-09-03 11:30:38 -04:00
John Ericson
f1c6e057e8 darwin binutils: Unwrap GNU Binutils before splicing with cctools
(cherry picked from commit b64736a8e4)
2017-09-03 11:30:38 -04:00
John Ericson
28952795b7 binutils-wrapper: Import separately from cc-wrapper
(cherry picked from commit dbf6d20d64)
2017-09-03 11:30:38 -04:00
John Ericson
89481b70ea misc pkgs: Use $NIX_BINUTILS for when needed
Certain files are now only there instead of $NIX_CC (some are in both)

(cherry picked from commit 3f30cffa55)
2017-09-03 11:30:38 -04:00
John Ericson
c2a440334e binutils-wrapper: Init
Factor a binutils wrapper out of cc-wrapper. While only LD is wrapped,
the setup hook defines environment variables on behalf of other
utilites.

(cherry picked from commit 40e9b2a7e6)
2017-09-03 11:30:38 -04:00
John Ericson
cc76444a87 cc-wrapper: Use separate mangler for "bool" variables
This avoids any `NIX_FOOBAR=1 1` not triggering conditions.

(cherry picked from commit fbb7d335db)
2017-09-03 11:30:37 -04:00
John Ericson
a1a9964c21 cc-wrapper: Pull variable mangler into utils.sh
In preparation for splitting out binutils-wrapper

(cherry picked from commit 1f5807d760)
2017-09-03 11:30:37 -04:00
John Ericson
ee7ae7b1ca cc-wrapper: Clean up dynamic linking with x86 multilib
It's better layering to do everything in ld-wrapper.

(cherry picked from commit 94c0267fc1)
2017-09-03 11:30:37 -04:00
Daiderd Jordan
2a4f41ee0f darwin: add callPackage
(cherry picked from commit 3979f48f7f)
2017-09-03 11:30:37 -04:00
Daiderd Jordan
a924f740bf darwin: move definition to separate file
(cherry picked from commit c4f18901b4)
2017-09-03 11:30:37 -04:00
Jörg Thalheim
4da94b1e50 gpaste: add adwaita-icon-theme theme
(cherry picked from commit c2881983fb)
2017-09-03 16:28:42 +01:00
Jan Tojnar
fb192f7583 gnome3.gpaste: refactor
(cherry picked from commit 4069cb2b0f)
2017-09-03 16:28:32 +01:00
Jan Tojnar
955e050ac0 nixos/gnome3.gpaste: add service
(cherry picked from commit 6ca6ea9e23)
2017-09-03 16:28:22 +01:00
Orivej Desh
12a2f532b8 stdenv-setup: list environment variables with awk
(cherry picked from commit f4044c1ccc)
2017-09-03 11:13:35 -04:00
Orivej Desh
02ad1fd89b stdenv-setup: fix substituteAll with set -eu
Environment variable filter in substituteAll was not precise and produced
undefined and invalid variable names.  Vladimír Čunát tried to fix that in [1],
but `env -0` did not work during Darwin bootstrap, so [2] reverted this change
and replaced an error due to invalid variables with a warning.  Recently in #28057
John Ericson added `set -u` to `setup.sh` and undefined variables made the setup
fail during e.g. `nix-build -A gnat` with `setup: line 519: !varName: unbound
variable`.

[1] 62fc8859c1
[2] 81df035429

(cherry picked from commit a09d9e7cd4)
2017-09-03 11:13:35 -04:00
Orivej Desh
ffb2b66c1d mkDerivation: explain "all" in hardeningDisable
https://github.com/NixOS/nixpkgs/pull/28806#discussion_r136516276
(cherry picked from commit 447240b19f)
2017-09-03 11:13:34 -04:00
John Ericson
fb1a44062a darwin-stdenv: Hack around impurity with --disable configure flag
(cherry picked from commit 8dbdc5dd51)
2017-09-03 10:58:39 -04:00
John Ericson
2a91d41a25 darwin-stdenv: Don't use nativeTools
Now, we'll actually use the wrapped ld to link

(cherry picked from commit 3b6e7fe123)
2017-09-03 10:58:15 -04:00
John Ericson
9be4014574 gettext: libiconv should be a buildInput
(cherry picked from commit 2cc7f1a731)
2017-09-03 10:53:38 -04:00
Matthieu Coudron
2eecbcc20d neovim: fix missing dependancy luajit lpeg
luajit libraries are not the same as vanilla lua ones, hence when luajit
is enabled, the build fails.
Fixes https://github.com/NixOS/nixpkgs/issues/14442

(cherry picked from commit 9889c1c661)
2017-09-03 15:40:36 +01:00
Franz Pletz
313ea79244 gitlab: 9.4.5 -> 9.5.2
(cherry picked from commit 2f48144d0e)
2017-09-03 16:00:05 +02:00
Graham Christensen
11459b001b release notes: gnupg programs are no longer suffixed
(cherry picked from commit 83043c948e)
2017-09-03 09:03:21 -04:00
Robin Gloster
b58b18d75c nginx: module fix example
Closes #28926

(cherry picked from commit 97a2cd0748)
2017-09-03 14:05:53 +02:00
Lancelot SIX
ac101a5adb libgcrypt: 1.8.0 -> 1.8.1
Fixes CVE-2017-0379

See http://lists.gnu.org/archive/html/info-gnu/2017-08/msg00014.html
for release announcement

(cherry picked from commit 095af3e63b)
2017-09-03 13:49:19 +02:00
Robin Gloster
596ac37833 ruby_2_0_0: fix eval due to nested list
(cherry picked from commit fc8fc63b67)
2017-09-03 13:49:09 +02:00
Orivej Desh
d38289a5d9 mkDerivation: fix hardening flags check
- allow "all" in hardeningDisable
- fix busybox flags
- print detailed error message

Discussed at https://github.com/NixOS/nixpkgs/pull/28555#issuecomment-326413032

(cherry picked from commit d70006c6d9)
2017-09-03 13:49:00 +02:00
John Ericson
54822bef11 cc-wrapper: Remove support for NIX_LDFLAGS_HARDEN
It has long been deprecated

(cherry picked from commit 3d3a6e0fac)
2017-09-03 13:48:47 +02:00
John Ericson
bf714257ba cc-wrapper: Remove {START,EXEC}_HOOK
These are no longer used by anything

(cherry picked from commit 46fd4bcb14)
2017-09-03 13:48:42 +02:00
John Ericson
f9a8e1d3f6 mkDerivation, cc-wrapper: Check hardening flag validity in Nix
This becomes necessary if more wrappers besides cc-wrapper start
supporting hardening flags. Also good to make the warning into an
error.

Also ensure interface is being used right: Not as a string, not just in
bash.

(cherry picked from commit 97a48835b7)
2017-09-03 13:48:00 +02:00
John Ericson
432c4f8334 cc-wrapper: Remove redundant hardening
GCC just passes `-z ...` flags to ld unaltered, and they are already
passed to LD anyways. On the other hand, `-pie` affects gcc behavior
too.

(cherry picked from commit 822a8d0148)
2017-09-03 13:47:50 +02:00
WilliButz
23c59df2a8 inkscape: 0.92.1 -> 0.92.2
(cherry picked from commit 95a4c03c7d)
2017-09-03 13:44:37 +02:00
WilliButz
a55be749fd netcat-openbsd: 1.105 -> 1.130
(cherry picked from commit a72ba661ac)
2017-09-03 13:44:36 +02:00
WilliButz
3985976214 nasm: 2.12.02 -> 2.13.01
(cherry picked from commit 164eb72403)
2017-09-03 13:44:36 +02:00
WilliButz
e17d6a95e1 freeradius: 3.0.14 -> 3.0.15
(cherry picked from commit 936fee257d)
2017-09-03 13:44:36 +02:00
Robin Gloster
3a35e6bef8 gitlab: fix merge 2017-09-03 13:42:41 +02:00
Austin Seipp
5c4602aec7 yices: now under GPLv3
This means Hydra can build it now!

Signed-off-by: Austin Seipp <aseipp@pobox.com>
(cherry picked from commit 583ebc086c)
2017-09-03 13:33:39 +02:00
Samuel Leathers
a964fd43e8 neuron: 7.4 -> 7.5
(cherry picked from commit d9cd226a6d)
2017-09-03 13:33:17 +02:00
Robert Helgesson
bead8c6048 league-of-moveable-type: fix long description
(cherry picked from commit 7889758c12)
2017-09-03 13:26:13 +02:00
Samuel Leathers
4c4a0c9f0a klick: fix build with gcc6
(cherry picked from commit 07f977572c)
2017-09-03 13:20:41 +02:00
Samuel Leathers
8fd000d529 jigdo: fix gcc build failures
(cherry picked from commit d98eb8a114)
2017-09-03 13:17:42 +02:00
Samuel Leathers
47df9a3f89 photivo: fixes build with gcc6
(cherry picked from commit 1398d5555c)
2017-09-03 13:17:17 +02:00
Vincent Laporte
2378db028d libvirt: fix build on darwin
(cherry picked from commit 4ee717d2d3)
2017-09-03 13:15:55 +02:00
Robin Gloster
d3550fb5c1 gitlab module: fix permissions and path
(cherry picked from commit eedffc5277)
2017-09-03 13:15:39 +02:00
Robin Gloster
7910480caf gitlab module: fix postgres superUser
(cherry picked from commit edd8265c36)
(cherry picked from commit aaff3fa5f3)
2017-09-03 13:15:33 +02:00
Robin Gloster
ca8fa377d7 gitlab: fix postgres calls
(cherry picked from commit 45605db3e0)
2017-09-03 13:15:19 +02:00
Philipp Steinpass
0d790f82c1 nixos/hydra postgresql: Fix #27314 and add test case
(cherry picked from commit d784b83005)
2017-09-03 13:15:08 +02:00
Tristan Helmich
cdbc5f5655 emby: 3.2.28.0 -> 3.2.30.0
(cherry picked from commit 0ca6c58d26)
2017-09-03 13:14:27 +02:00
Joachim Fasting
33725839f4 nixos/chromium-suid-sandbox: remove reference to grsecurity
(cherry picked from commit bb036a327c)
2017-09-03 13:14:11 +02:00
Joachim Fasting
b6f133101c nixos: purge remaining grsecurity bits
:(

Fixes https://github.com/NixOS/nixpkgs/issues/28859

(cherry picked from commit 268eb4adb7)
2017-09-03 13:14:05 +02:00
Joachim Fasting
90f5df6b97 nixos/release-notes: grsecurity support removed for 17.09
(cherry picked from commit 9935806894)
2017-09-03 13:13:51 +02:00
Kranium Gikos Mendoza
f020b9ae5f opal: fix gcc6 build
(cherry picked from commit 776d149c76)
2017-09-03 13:13:40 +02:00
Kranium Gikos Mendoza
dabafa684a ptlib: use fetchpatch
(cherry picked from commit 377b42a8ad)
2017-09-03 13:12:14 +02:00
Kranium Gikos Mendoza
aa97ee44f1 ptlib: fix gcc6 build
(cherry picked from commit 32d4a3dec8)
2017-09-03 13:12:07 +02:00
Samuel Leathers
fa74d9a73c freetalk: set guile version to 2.0
(cherry picked from commit 08fe8eacd9)
2017-09-03 13:11:26 +02:00
aszlig
6dae22b3f4 nixos/deluge: Fix last wrong package attribute
I missed this in 799435b7ca.

This time I used "git grep -F pythonPackages.deluge" just to be sure :-)

Thanks a lot to @roconnor for spotting this.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Reported-by: @roconnor
(cherry picked from commit 880a0409e8)
2017-09-03 13:10:46 +02:00
Kranium Gikos Mendoza
099a094883 ekiga: make debian patches use fetchpatch
(cherry picked from commit f9c2cb80a6)
2017-09-03 13:09:21 +02:00
Kranium Gikos Mendoza
c5e1d52786 ekiga: fix build
(cherry picked from commit 0604ea66c6)
2017-09-03 13:09:20 +02:00
Michael Weiss
bb76244665 android-studio-preview: 3.0.0.10 -> 3.0.0.12
(cherry picked from commit 8693cc5425)
2017-09-03 11:18:45 +02:00
Thomas Tuegel
56efb14e02 kscreenlocker: 5.10.5 -> 5.10.5.1
Fix segfault with nVidia drivers; see
https://bugs.kde.org/show_bug.cgi?id=384005

(cherry picked from commit 71d377fcb0)
2017-09-03 11:17:58 +02:00
Joachim Fasting
fd7e8832b5 libgcrypt: fix typo in meta.description
(cherry picked from commit b3f9b0d0cc)
2017-09-03 11:17:33 +02:00
Joachim Fasting
508f1c06fc kernelPatches.grsecurity_testing: remove
(cherry picked from commit 697cbbc617)
2017-09-03 11:17:22 +02:00
Joachim Fasting
317f86bf68 pkgs/top-level: remove grsec attributes
These have been throwing exceptions since grsec was deprecated, so
potential users should have had due to time to migrate their configs.

(cherry picked from commit 5125e209a9)
2017-09-03 11:17:13 +02:00
Robin Gloster
0479f227c7 bundler: 1.15.3 -> 1.14.6
bundler 1.15 breaks gitlab

(cherry picked from commit 891a1662aa)
2017-09-03 11:17:13 +02:00
Robin Gloster
3597a2e893 gitlab: unbreak
(cherry picked from commit 7c07807949)
2017-09-03 11:17:13 +02:00
roblabla
40001503c0 gitlab: 9.4.3 -> 9.4.5
(cherry picked from commit 55bc0c3836)
2017-09-03 11:17:13 +02:00
roblabla
a67e789fe2 gitlab: Fix packaging, compile gettext files before assets
(cherry picked from commit 259970d26e)
2017-09-03 11:17:13 +02:00
roblabla
47b0f2e095 gitlab: Mark as broken
(cherry picked from commit 05b8879464)
2017-09-03 11:17:12 +02:00
roblabla
7eb469246f gitlab: 9.3.4 -> 9.4.3
(cherry picked from commit 8975d153a0)
2017-09-03 11:17:12 +02:00
Vladimír Čunát
87cc891ad5 texlive: add ghostscript when containing pdfcrop
Potential disadvantage: ghostscript will become visible to user,
so there may e.g. be (new) collisions in nix-env due to this.
Fixes #28411.

(cherry picked from commit 828bc3812c)
2017-09-03 10:18:43 +02:00
Vladimír Čunát
933e02d72b lightdm: purge explicit usage of gcc6
I forgot to include the initial fix into the parent commit :-/

(cherry picked from commit 6ecf46334b)
2017-09-03 10:02:41 +02:00
Vladimír Čunát
8e9a7cc7a7 treewide: purge explicit usage of gcc6
It's now the default. /cc #19456
This makes a real build simplification, because in our current
bootstrapping+aliases, `gcc6` attribute is not the default compiler
but a derivation *built by* the default compiler.

nix-exec didn't build before this commit already

(cherry picked from commit 53998f5036)
2017-09-03 09:58:06 +02:00
Graham Christensen
c38f87d36e Include date and NixOS version in systemd-boot entries
Grub configs include the NixOS version and date they were built, now
systemd can have fun too:

    version Generation 99 NixOS 17.03.1700.51a83266d1, Linux Kernel 4.9.43, Built on 2017-08-30
    version Generation 100 NixOS 17.03.1700.51a83266d1, Linux Kernel 4.9.43, Built on 2017-08-30
    version Generation 101 NixOS 17.03.1700.51a83266d1, Linux Kernel 4.9.43, Built on 2017-08-31
    version Generation 102 NixOS 17.03.1700.51a83266d1, Linux Kernel 4.9.43, Built on 2017-09-01
    version Generation 103 NixOS 17.03.1700.51a83266d1, Linux Kernel 4.9.43, Built on 2017-09-02
    version Generation 104 NixOS 17.09beta41.1b8c7786ee, Linux Kernel 4.9.46, Built on 2017-09-02
    version Generation 105 NixOS 17.09.git.1b8c778, Linux Kernel 4.9.46, Built on 2017-09-02

(cherry picked from commit 62652be111)
2017-09-02 15:43:43 -04:00
Tim Steinbach
93d71f8afc coreutils: 8.27 -> 8.28
(cherry picked from commit 1c45fd01aa)
Fixes CVE-2017-7476.
2017-09-02 20:43:55 +02:00
Tim Steinbach
1e1b444df8 sbt: 1.0.0 -> 1.0.1
(cherry picked from commit aa59865333)
2017-09-02 12:55:20 -04:00
Tim Steinbach
b6829199c4 linux: 4.9.46 -> 4.9.47
(cherry picked from commit 27c8378c0c81aa17aef615615421aa5de3d8246b)
2017-09-02 11:17:07 -04:00
Tim Steinbach
2191b2ad21 Merge pull request #28780 from NeQuissimus/openjdk_8_144_01
openjdk: 8u152-04 -> 8u144-01
(cherry picked from commit 440bf7e06f)
2017-09-02 11:08:29 -04:00
Bjørn Forsman
b73e6289dc pythonPackages.pyrtlsdr: unbreak build
pyrtlsdr needs pandoc at build time. Fixes the build since commit
f6eb190e70
("python.pkgs.pyrtlsdr: disable tests to fix build"). (That commit
bumped the package to a new version.)

(cherry picked from commit 2cf1b94b82)
2017-09-02 16:48:49 +02:00
obadz
52dc8f227f python27Packages.smugline: fix to accomodate new behavior of makeWrapper
Ticks one box in #28643

(cherry picked from commit dd09675347)
2017-09-02 15:20:11 +01:00
obadz
c91b4fe989 pokerth: fix build error which was probably due to a changing C++ dependency (boost/g++?)
Ticks one box in #28643

(cherry picked from commit 5b943136fc)
2017-09-02 15:02:09 +01:00
Samuel Leathers
2e60bbae9d i-score: 1.0.0-a67 -> 1.0.0-b31
(cherry picked from commit d5c342c657)
2017-09-02 09:47:02 -04:00
Austin Seipp
437ca1f134 z3_opt: remove and replace with z3
Z3 has supported optimization features since the 4.4.x release, so this can be
removed.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
(cherry picked from commit 54ae0aa1b0)
2017-09-02 12:18:32 +02:00
romildo
fc18036bed theme-vertex: do not explicitly indicate the gnome version
(cherry picked from commit 7ef6d3ced9)
2017-09-02 12:18:31 +02:00
aszlig
bb9d591114 python/pyocr: 0.4.6 -> 0.4.7
Upstream changes:

  * Tesseract 4.00.00alpha:
    * Version parsing: Ignore suffix (so '4.00.00alpha' == (4, 0, 0))
    * Libtesseract: Load libtesseract.so.4 instead of libtesseract.so.3
      if available
  * Support for Tesseract 3.05.00:
    * Builders: Split field 'tess_conf' into 'tess_flags' and 'tess_conf'
    * Libtesseract: If available, use
                    TessBaseAPIDetectOrientationScript() instead of
                    TessBaseAPIDetectOS
  * Libtesseract:
    * Workaround: Prevents possible segfault in image_to_string() when
                  the target language is not available

Full upstream change log can be found at:

https://github.com/openpaperwork/pyocr/blob/b006123d1d002711b9/ChangeLog

The tesseract.patch for supporting Tesseract version 3.05.00 has been
applied upstream and we can safely drop it.

We now use substituteInPlace in conjunction with a patch to insert the
relevant store paths instead of sed, so it's less fragile whenever we
have upstream changes in handling of these paths.

I've tested this by reverting 48a941e29f and applying a build
fix patch of Cuneiform 1.1.0 from Arch Linux, because right now
Cuneiform is an experimental version that can't be fixed on behalf of
pyocr (the reason is that pyocr needs to get a list of languages, which
doesn't work in that version anymore).

In addition to that I've successfully built paperwork-backend which by
now is the one package which depends on pyocr. However, I didn't do
runtime tests of Paperwork.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Cc: @7c6f434c
(cherry picked from commit ca1ea69972)
2017-09-02 12:18:31 +02:00
aszlig
14b20f86e6 python/pyocr: Move package into python-modules
We already have a patch feeling lonely inside the python-modules
directory and to have everything at one place let's actually move pyocr
into its own dedicated directory so it's easier to patch it up (which
we're going to).

Right now, the package fails to build because of a few test failures, so
I haven't tested this apart from evaluating.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
(cherry picked from commit 3086fc7f83)
2017-09-02 12:18:31 +02:00
aszlig
6eabdf0b1b beets: Run tests for external plugins
In order to run the tests for the external plugins of beets, we need to
have beets itself as a dependency. So in order to do that, we now pass
beets without plugins and tests to the nativeBuildInputs of the plugins
so that we can run them.

As soon as the plugins are built they become part of the final beets,
which also has tests enabled, so disabling the tests for beets
derivation that is used for external plugin tests is a non-issue here
because they're going to be executed anyway.

Enabling tests for the alternatives plugin is pretty straightforward,
but in order to run tests for the copyartifacts plugin, we need to bump
the source code to the latest Git master.

The reason for this is that the version that was in use until now
required to have the beets source directory alongside of the
copyartifacts source code, but we already have beets available as a
normal dependency.

Updating copyartifacts to latest master largely consists of unit test
changes and a few Python 3 compatibility changes. However, one change
has the biggest stat, which is
sbarakat/beets-copyartifacts@1a0c281da0.

Fortunately, the last change is just moving the implementation to a
newer API from upstream beets and by the looks of the implementation it
seems to break support for moving files. However, reverting this commit
also reveals that moving files was already broken before, so it wouldn't
matter much whether we have this version bump or not.

Tested with the following command:

nix-build -E '(import ./. {}).beets.override {
  enableAlternatives = true;
  enableCopyArtifacts = true;
}'

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Cc: @domenkozar, @pjones, @Profpatsch, @michalrus
(cherry picked from commit 40b76c8809)
2017-09-02 12:18:31 +02:00
aszlig
58335739d8 beets-alternatives: Disable test suite for now
Regression introduced by 94351197cd.

Running the tests results in the following traceback:
  ...
  File ".../unittest/loader.py", line 91, in loadTestsFromName
    module = __import__('.'.join(parts_copy))
  File ".../test/regrtest.py", line 184, in <module>
    for module in sys.modules.itervalues():
RuntimeError: dictionary changed size during iteration

The reason for this is that the test directory itself is called "test"
and the package including regrtest.py is also called "test", so the
loader tries to load tests from its own implementation.

We could fix this by changing PYTHONPATH and/or making the test
directory a proper package, but we'd still have failing tests because
beets itself is required to run the tests.

However for now I'm just removing the unit_tests kwarg in setup.py so
that we have the same behaviour as before the initially mentioned
commit.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
(cherry picked from commit bd2aeb4883)
2017-09-02 12:18:31 +02:00
Daniel Fullmer
83771b8cb8 john: workaroud for build failure
(cherry picked from commit 28b1170f49)
2017-09-02 12:18:31 +02:00
Dmitry Kalinkin
3e35371789 documentation: use modern Firefox version in example
(cherry picked from commit b6a1e439e1)
2017-09-02 12:18:31 +02:00
Dmitry Kalinkin
86318964c3 documentation: fix some spelling
(cherry picked from commit 26068822d8)
2017-09-02 12:18:31 +02:00
romildo
3d9d532c64 uget: 2.0.8 -> 2.0.10
- Update to version 2.0.10
- Use wrapGAppsHook to wrap binaries
- Use gstreamer-1.0
- Add dependence on libappindicator

(cherry picked from commit 1f48ad8699)
2017-09-02 12:18:30 +02:00
aszlig
4d4e200fa9 nixos/deluge: Fix deluge package attribute
Regression introduced by fa5e343242.

The deluge package no longer resides in pythonPackages but now is a
top-level package.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Cc: @grantwwu, @fpletz
(cherry picked from commit 799435b7ca)
2017-09-02 12:18:30 +02:00
aszlig
38b7b10e8c conky: Don't enable nvidiaSupport by default
This has been introduced in 6a6fb6d31c.

Relying on non-free software by default is probably a bad idea. Apart
from the fact that (sane) people usually don't want to have it sitting
on their system even people who don't care will have to set
"allowUnfree" to true in order to install conky.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Cc: @canndrew, @Mic92
(cherry picked from commit 7f99876f50)
2017-09-02 12:18:30 +02:00
Samuel Leathers
c2284e2f7f espeakedit: fix build with gcc6
(cherry picked from commit b2fd2a8100)
2017-09-02 12:18:30 +02:00
Samuel Leathers
7ac229471a espeak-classic: fix build with gcc6
(cherry picked from commit 6c1364712a)
2017-09-02 12:18:30 +02:00
Roman Volosatovs
c5b077999f mopidy-iris: 3.2.0 -> 3.3.3
(cherry picked from commit 94649061c8)
2017-09-02 12:18:30 +02:00
Gabriel Ebner
bd6b318461 gnome3.dconf-editor: include gsettings_desktop_schemas
(cherry picked from commit 52eb0e0fbd)
2017-09-02 12:18:30 +02:00
Ignat Loskutov
7278caffa7 grml-zsh-config: generalize support to unix systems
(cherry picked from commit 9280937cd4)
2017-09-02 12:18:30 +02:00
Ricardo Ardissone
cba5d9243f openmw: 0.41 -> 0.42
(cherry picked from commit a2794ee5f6)
2017-09-02 12:18:29 +02:00
Florian Jacob
9a0e05ddec nixos/piwik: fix nginx submodule's ssl defaults
previous mkDefault did not work as expected,
as it did not overwrite the original submodule's defaults when the user
did not specify any custom options at all.

(cherry picked from commit 786e9711f5)
2017-09-02 12:18:29 +02:00
Dmitry Kalinkin
957eb785b3 sherpa: 2.2.1 -> 2.2.4
(cherry picked from commit 59b525e559)
2017-09-02 12:18:29 +02:00
Piotr Bogdan
efbaabe5a2 rethinkdb: fix build with gcc6
(cherry picked from commit 26ebbac2c4)
2017-09-02 12:18:29 +02:00
Frank
b503d8858a profanity support for unix
(cherry picked from commit cb61e27e9e)
2017-09-02 12:18:29 +02:00
Simon Lackerbauer
e3278a4dc9 rstudio: 1.1.216 -> 1.1.351
(cherry picked from commit 40cbf90861)
2017-09-02 12:18:29 +02:00
Servilio Afre Puentes
1e17186b02 gmime: updated home and description
GMime home has moved to Github as the list of commits clearly shows,
i.e.:

  b5cbc68a67

The description is updated as well to be closer to the one used there
and over at gnome.org.

(cherry picked from commit ddaa696a4e)
2017-09-02 12:18:29 +02:00
Frederik Rietdijk
005048335b Python docs: add section on tests
(cherry picked from commit b7d257a520)
2017-09-02 12:07:20 +02:00
Unai Zalakain
eb72f12c19 jrnl: support journal encryption by default
(cherry picked from commit 8a12b42361506048dd9abbec6dddcc8ac6e61a20)
2017-09-02 11:04:51 +02:00
Maximilian Güntner
39ee84f9d8 pybitmessage: add numpy + pyopencl to propagatedBuildInputs
(cherry picked from commit 235b63d96c)
2017-09-02 08:38:36 +01:00
Maximilian Güntner
8c1526e414 pytools: 2016.2.1 -> 2017.4
(cherry picked from commit 10e8214b93)
2017-09-02 08:38:36 +01:00
Samuel Leathers
75704617f9 glmark2: 2016-05-11 -> 2017-09-01
(cherry picked from commit 917a0e3e77)
2017-09-02 08:29:10 +01:00
Samuel Leathers
16bdd60576 freewheeling: UNSTABLE -> 0.6.2
(cherry picked from commit 232c6a00ce)
2017-09-02 08:29:10 +01:00
Will Dietz
0fd7ef61b2 clang_34: Disable hardening bits (#28543)
(cherry picked from commit cc45a96aea)
2017-09-01 19:41:33 +01:00
Jörg Thalheim
9c3a136667 python2Packages.jedi: fix tests
(cherry picked from commit e4bc14f6b7)
2017-09-01 19:07:11 +01:00
Jörg Thalheim
1b8c7786ee turses: fix build
(cherry picked from commit 4a6295e6fb)
2017-09-01 18:58:21 +01:00
Jörg Thalheim
cb50802127 python.pkgs.requests-oauthlib: fix source hash
Was accidentally broken during merge.

(cherry picked from commit e825cd8cf681722c9d1e610ada6e775b5230dac0)
2017-09-01 18:23:20 +01:00
Vladimír Čunát
551b4063af chromium: try to hack around Hydra problems
Discussion: https://github.com/NixOS/nixpkgs/commit/e8f1ddcbd1d
2017-09-01 18:21:14 +02:00
Maximilian Güntner
543f0f780c pybitmessage: replace find_library() calls with paths
fixes requested changes in #26616

(cherry picked from commit e9203772f2)
2017-09-01 14:16:00 +01:00
shak-mar
cbde9dae7c pybitmessage: 0.4.4 -> 0.6.2
squashed hashes:
3ee20b2de7
b9a3a3b6a2

(details -> #26616)

(cherry picked from commit e3d7c4ca19)
2017-09-01 14:16:00 +01:00
Samuel Leathers
37568fd229 crrcsim: build with gcc6
(cherry picked from commit 6bc775cdf6)
2017-09-01 14:14:17 +01:00
Samuel Leathers
39099cd9ae crda: fix build with gcc6
(cherry picked from commit e92f5b54fb)
2017-09-01 13:49:37 +01:00
Jörg Thalheim
775ec9ebe4 python.pkgs.pytest-django: fix patch hash
(cherry picked from commit d52eaf878c)
2017-09-01 08:56:49 +01:00
Jan Tojnar
b999b800ce gnome3 tests: fix by providing more memory
/cc #28053.

(cherry picked from commit 3b9f0c6a46)
2017-09-01 07:54:25 +02:00
Samuel Leathers
490b33aa9f bossa: fix build with gcc6
(cherry picked from commit 39154ab86f)
2017-09-01 06:50:42 +01:00
Ruben Maher
e312ec12cd lftp: fix build on darwin
Add `gettext` (which provides `-lintl`) and disable `format` hardening in order
to fix build.

(cherry picked from commit d908b6a1b7)
2017-09-01 06:50:36 +01:00
Samuel Leathers
7c77ba95f3 caneda: fix build with gcc6
(cherry picked from commit 04b8a85739)
2017-09-01 06:50:31 +01:00
Servilio Afre Puentes
c105d14032 gitlab: fix permission issue in build phase
The newer DEB packages have a setuid file, creating an error when
unpacking the source during the build phase.

As dpkg doesn't have a way to pass parameters to tar, dpkg is then
told to just extract the filesystem tar file and that is unpacked by
tar directly.

Fixes #28494

(cherry picked from commit fae458c5e7)
2017-08-31 17:36:52 +01:00
Servilio Afre Puentes
53b7848dcc gitlab: 8.17.6 -> 8.17.8
Latest release has important bugfixes.

(cherry picked from commit cffb1fab3e)
2017-08-31 17:36:52 +01:00
Jörg Thalheim
9ba5678c43 pythonPkgs.html5lib_0_9999999: remove
no longer needed and fails with python3

(cherry picked from commit 0b2f9d1ce1)
2017-08-31 11:24:03 -05:00
Jörg Thalheim
c6b7effa56 pythonPackages.willie: remove
was renamed by sopel, which we already have in nixpkgs

(cherry picked from commit 6fb18561e7)
2017-08-31 11:13:59 -05:00
Jörg Thalheim
cc557ec35e photoqt: 1.3 -> 1.5.1
related to #28643

(cherry picked from commit d83cadf841)
2017-08-31 15:18:59 +01:00
Eelco Dolstra
3e31d25a60 nix: 1.11.13 -> 1.11.14
(cherry picked from commit 79954b9d1f)
2017-08-31 15:12:43 +02:00
Ryan Mulligan
0f004d063e nixos/calibre-server: fix ExecStart call
calibre-server changed the way you specify the library from using
--with-library to just allowing the directory to be specified. See
https://manual.calibre-ebook.com/generated/en/calibre-server.html for
details.

(cherry picked from commit 39a982dc3e)
2017-08-31 15:05:41 +02:00
Graham Christensen
1664e69d09 configuration.nix: Document the stateVersion more
(cherry picked from commit 8efb46b609)
2017-08-31 06:47:39 -04:00
davidak
7a15de1d84 nixos/bcachefs: init module
(cherry picked from commit 8f389f3316)
2017-08-31 05:45:11 -05:00
davidak
55a59f43d0 bcachefs-tools: 2016-05-13 -> 2017-08-28
(cherry picked from commit bd79b8c9fc)
2017-08-31 05:45:11 -05:00
davidak
910d6c30e5 linux-testing-bcachefs: init at 4.11.2017.08.23
(cherry picked from commit 4134db36d0)
2017-08-31 05:45:11 -05:00
Florian Jacob
8cb6bfe6ef mysql service: Make initialDatabases.schema attribute optional
(cherry picked from commit d22c1c0719)
2017-08-31 11:52:11 +02:00
Lancelot SIX
e22826a53b mysql-workbench: fix build with gcc6
(cherry picked from commit d9ae1b408a)
2017-08-31 10:16:21 +01:00
Symphorien Gibol
dccb66d3ab grub module: assume /nix/store is a bind mount even if it is not read only
Fixes #14999

(cherry picked from commit 90ef2183f7)
2017-08-31 10:59:23 +02:00
Valentin Robert
09ce090b1f nerdfonts: 1.0.0 -> 1.1.0
(cherry picked from commit dbba364f64)
2017-08-31 10:59:23 +02:00
Samuel Leathers
324332695d sigrok-cli: 0.6.0 -> 0.7.0
(cherry picked from commit 902dc73ee2)
2017-08-31 09:42:58 +01:00
Samuel Leathers
7d7e2aba83 pulseview: 0.3.0 -> 0.4.0
(cherry picked from commit b39462d0c3)
2017-08-31 09:42:54 +01:00
Samuel Leathers
b0ec7d790b libsigrokdecode: 0.4.1 -> 0.5.0
(cherry picked from commit 3e1fa824df)
2017-08-31 09:42:49 +01:00
Samuel Leathers
e9fc124637 libsigrok: 0.4.0 -> 0.5.0
(cherry picked from commit afa5dcbd7d)
2017-08-31 09:42:43 +01:00
David Pflug
f1e0556a6b milkytracker: 0.90.85 -> 1.01
(cherry picked from commit 7d6c3e877b)
2017-08-31 10:40:30 +02:00
Profpatsch
ea5ccf6ae8 mpvScripts.convert: fix for mpv >0.26.0
See https://gist.github.com/Zehkul/25ea7ae77b30af959be0#gistcomment-2189556

(cherry picked from commit b35972b3fa)
2017-08-31 10:40:29 +02:00
Dan Peebles
bedfed9f52 terraform: manage 0.10 plugins with Nix
Also add a few starter plugins/providers

(cherry picked from commit 80319c1238)
2017-08-31 10:34:34 +02:00
Peter Hoeg
6bd53c487d ledger: fixed with older boost 2017-08-31 11:52:28 +08:00
Peter Hoeg
ce15008c1b ledger: requires an older boost 2017-08-31 11:52:24 +08:00
Graham Christensen
400b273741 Mark synaptics as deprecated
(cherry picked from commit 9d2777a5a5)
2017-08-30 20:44:30 -04:00
Graham Christensen
dc3a666572 profiles/graphical.nix: enable libinput over synaptics
(cherry picked from commit 1b68193167)
2017-08-30 20:44:27 -04:00
Graham Christensen
c2e3e228fe installer: add a comment hinting about enabling libinput for touchpads
(cherry picked from commit af51aa79d2)
2017-08-30 20:44:23 -04:00
Robin Gloster
fe9170c191 vidalia: remove
closes #28753

(cherry picked from commit b09ab584f0)
2017-08-31 00:03:15 +02:00
Franz Pletz
82c301ec40 Update channel and version for 17.09 beta 2017-08-30 23:06:08 +02:00
16496 changed files with 455670 additions and 799794 deletions

View File

@@ -13,8 +13,8 @@ charset = utf-8
# see https://nixos.org/nixpkgs/manual/#chap-conventions
# Match nix/ruby/docbook files, set indent to spaces with width of two
[*.{nix,rb,xml}]
# Match nix/ruby files, set indent to spaces with width of two
[*.{nix,rb}]
indent_style = space
indent_size = 2

16
.gitattributes vendored
View File

@@ -1,16 +0,0 @@
**/deps.nix linguist-generated
**/node-packages.nix linguist-generated
pkgs/applications/editors/emacs-modes/*-generated.nix linguist-generated
pkgs/development/r-modules/*-packages.nix linguist-generated
pkgs/development/haskell-modules/hackage-packages.nix linguist-generated
pkgs/development/beam-modules/hex-packages.nix linguist-generated
doc/** linguist-documentation
doc/default.nix linguist-documentation=false
nixos/doc/** linguist-documentation
nixos/doc/default.nix linguist-documentation=false
nixos/modules/module-list.nix merge=union
# pkgs/top-level/all-packages.nix merge=union

130
.github/CODEOWNERS vendored
View File

@@ -7,127 +7,17 @@
# For documentation on this file, see https://help.github.com/articles/about-codeowners/
# Mentioned users will get code review requests.
# This file
/.github/CODEOWNERS @edolstra
# Libraries
/lib @edolstra @nbp
/lib/systems @nbp @ericson2314 @matthewbauer
/lib/generators.nix @edolstra @nbp @Profpatsch
/lib/debug.nix @edolstra @nbp @Profpatsch
# Nixpkgs Internals
/default.nix @nbp
/pkgs/top-level/default.nix @nbp @Ericson2314
/pkgs/top-level/impure.nix @nbp @Ericson2314
/pkgs/top-level/stage.nix @nbp @Ericson2314 @matthewbauer
/pkgs/top-level/splice.nix @Ericson2314 @matthewbauer
/pkgs/top-level/release-cross.nix @Ericson2314 @matthewbauer
/pkgs/stdenv/generic @Ericson2314 @matthewbauer
/pkgs/stdenv/cross @Ericson2314 @matthewbauer
/pkgs/build-support/cc-wrapper @Ericson2314 @orivej
/pkgs/build-support/bintools-wrapper @Ericson2314 @orivej
/pkgs/build-support/setup-hooks @Ericson2314
# NixOS Internals
/nixos/default.nix @nbp
/nixos/lib/from-env.nix @nbp
/nixos/lib/eval-config.nix @nbp
/nixos/doc/manual/configuration/abstractions.xml @nbp
/nixos/doc/manual/configuration/config-file.xml @nbp
/nixos/doc/manual/configuration/config-syntax.xml @nbp
/nixos/doc/manual/configuration/modularity.xml @nbp
/nixos/doc/manual/development/assertions.xml @nbp
/nixos/doc/manual/development/meta-attributes.xml @nbp
/nixos/doc/manual/development/option-declarations.xml @nbp
/nixos/doc/manual/development/option-def.xml @nbp
/nixos/doc/manual/development/option-types.xml @nbp
/nixos/doc/manual/development/replace-modules.xml @nbp
/nixos/doc/manual/development/writing-modules.xml @nbp
/nixos/doc/manual/man-nixos-option.xml @nbp
/nixos/modules/installer/tools/nixos-option.sh @nbp
# NixOS modules
/nixos/modules @Infinisil
# Python-related code and docs
/maintainers/scripts/update-python-libraries @FRidh
/pkgs/top-level/python-packages.nix @FRidh
/pkgs/development/interpreters/python @FRidh
/pkgs/development/python-modules @FRidh
/doc/languages-frameworks/python.section.md @FRidh
pkgs/top-level/python-packages.nix @FRidh
pkgs/development/interpreters/python/* @FRidh
pkgs/development/python-modules/* @FRidh
doc/languages-frameworks/python.md @FRidh
# Haskell
/pkgs/development/compilers/ghc @peti @ryantm @basvandijk
/pkgs/development/haskell-modules @peti @ryantm @basvandijk
/pkgs/development/haskell-modules/default.nix @peti @ryantm @basvandijk
/pkgs/development/haskell-modules/generic-builder.nix @peti @ryantm @basvandijk
/pkgs/development/haskell-modules/hoogle.nix @peti @ryantm @basvandijk
# Perl
/pkgs/development/interpreters/perl @volth
/pkgs/top-level/perl-packages.nix @volth
/pkgs/development/perl-modules @volth
# R
/pkgs/applications/science/math/R @peti
/pkgs/development/r-modules @peti
# Ruby
/pkgs/development/interpreters/ruby @alyssais @zimbatm
/pkgs/development/ruby-modules @alyssais @zimbatm
# Rust
/pkgs/development/compilers/rust @Mic92 @LnL7
# Boostraping and core infra
pkgs/stdenv/ @Ericson2314
pkgs/build-support/cc-wrapper/ @Ericson2314
# Darwin-related
/pkgs/stdenv/darwin @NixOS/darwin-maintainers
/pkgs/os-specific/darwin @NixOS/darwin-maintainers
# C compilers
/pkgs/development/compilers/gcc @matthewbauer
/pkgs/development/compilers/llvm @matthewbauer
# Compatibility stuff
/pkgs/top-level/unix-tools.nix @matthewbauer
/pkgs/development/tools/xcbuild @matthewbauer
# Beam-related (Erlang, Elixir, LFE, etc)
/pkgs/development/beam-modules @gleber
/pkgs/development/interpreters/erlang @gleber
/pkgs/development/interpreters/lfe @gleber
/pkgs/development/interpreters/elixir @gleber
/pkgs/development/tools/build-managers/rebar @gleber
/pkgs/development/tools/build-managers/rebar3 @gleber
/pkgs/development/tools/erlang @gleber
# Jetbrains
/pkgs/applications/editors/jetbrains @edwtjo
# Eclipse
/pkgs/applications/editors/eclipse @rycee
# https://github.com/NixOS/nixpkgs/issues/31401
/lib/licenses.nix @ghost
# Qt / KDE
/pkgs/applications/kde @ttuegel
/pkgs/desktops/plasma-5 @ttuegel
/pkgs/development/libraries/kde-frameworks @ttuegel
/pkgs/development/libraries/qt-5 @ttuegel
# PostgreSQL and related stuff
/pkgs/servers/sql/postgresql @thoughtpolice
/nixos/modules/services/databases/postgresql.xml @thoughtpolice
/nixos/modules/services/databases/postgresql.nix @thoughtpolice
/nixos/tests/postgresql.nix @thoughtpolice
# Dhall
/pkgs/development/dhall-modules @Gabriel439 @Profpatsch
/pkgs/development/interpreters/dhall @Gabriel439 @Profpatsch
# Idris
/pkgs/development/idris-modules @Infinisil
# Bazel
/pkgs/development/tools/build-managers/bazel @mboes @Profpatsch
pkgs/stdenv/darwin/* @copumpkin @LnL7
pkgs/os-specific/darwin/* @LnL7
pkgs/os-specific/darwin/apple-source-releases/* @copumpkin

View File

@@ -12,40 +12,35 @@ under the terms of [COPYING](../COPYING), which is an MIT-like license.
## Submitting changes
* Format the commit messages in the following way:
* Format the commits in the following way:
```
(pkg-name | nixos/<module>): (from -> to | init at version | refactor | etc)
(Motivation for change. Additional information.)
```
For consistency, there should not be a period at the end of the commit message's summary line (the first line of the commit message).
Examples:
* nginx: init at 2.0.1
* firefox: 54.0.1 -> 55.0
* nixos/hydra: add bazBaz option
Dual baz behavior is needed to do foo.
* nixos/nginx: refactor config generation
The old config generation system used impure shell scripts and could break in specific circumstances (see #1234).
* `meta.description` should:
* Be capitalized.
* Not start with the package name.
* Not have a period at the end.
* `meta.license` must be set and fit the upstream license.
* If there is no upstream license, `meta.license` should default to `stdenv.lib.licenses.unfree`.
* `meta.maintainers` must be set.
* Be capitalized
* Not start with the package name
* Not have a dot at the end
See the nixpkgs manual for more details on [standard meta-attributes](https://nixos.org/nixpkgs/manual/#sec-standard-meta-attributes) and on how to [submit changes to nixpkgs](https://nixos.org/nixpkgs/manual/#chap-submitting-changes).
See the nixpkgs manual for more details on how to [Submit changes to nixpkgs](https://nixos.org/nixpkgs/manual/#chap-submitting-changes).
## Writing good commit messages
In addition to writing properly formatted commit messages, it's important to include relevant information so other developers can later understand *why* a change was made. While this information usually can be found by digging code, mailing list/Discourse archives, pull request discussions or upstream changes, it may require a lot of work.
In addition to writing properly formatted commit messages, it's important to include relevant information so other developers can later understand *why* a change was made. While this information usually can be found by digging code, mailing list archives, pull request discussions or upstream changes, it may require a lot of work.
For package version upgrades and such a one-line commit message is usually sufficient.

View File

@@ -8,5 +8,7 @@
## Technical details
Please run `nix-shell -p nix-info --run "nix-info -m"` and paste the
results.
* System: (NixOS: `nixos-version`, Ubuntu/Fedora: `lsb_release -a`, ...)
* Nix version: (run `nix-env --version`)
* Nixpkgs version: (run `nix-instantiate --eval '<nixpkgs>' -A lib.nixpkgsVersion`)
* Sandboxing enabled: (run `grep build-use-sandbox /etc/nix/nix.conf`)

View File

@@ -5,16 +5,14 @@
<!-- Please check what applies. Note that these are not hard requirements but merely serve as information for reviewers. -->
- [ ] Tested using sandboxing ([nix.useSandbox](http://nixos.org/nixos/manual/options.html#opt-nix.useSandbox) on NixOS, or option `sandbox` in [`nix.conf`](http://nixos.org/nix/manual/#sec-conf-file) on non-NixOS)
- [ ] Tested using sandboxing ([nix.useSandbox](http://nixos.org/nixos/manual/options.html#opt-nix.useSandbox) on NixOS, or option `build-use-sandbox` in [`nix.conf`](http://nixos.org/nix/manual/#sec-conf-file) on non-NixOS)
- Built on platform(s)
- [ ] NixOS
- [ ] macOS
- [ ] other Linux distributions
- [ ] Linux
- [ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))
- [ ] Tested compilation of all pkgs that depend on this change using `nix-shell -p nox --run "nox-review wip"`
- [ ] 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)
- [ ] Assured whether relevant documentation is up to date
- [ ] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md).
---

3
.gitignore vendored
View File

@@ -13,5 +13,4 @@ result-*
.DS_Store
/pkgs/development/libraries/qt-5/*/tmp/
/pkgs/desktops/kde-5/*/tmp/
/pkgs/development/mobile/androidenv/xml/*
/pkgs/desktops/kde-5/*/tmp/

35
.travis.yml Normal file
View File

@@ -0,0 +1,35 @@
language: nix
sudo: true
# 'sudo: false' == containers that start fast, but only get 4G ram;
# 'sudo: true' == VMs that start slow, but with 8G
# ..as per: https://docs.travis-ci.com/user/ci-environment/#Virtualization-environments
# Nixpkgs PR tests OOM with 4G: https://github.com/NixOS/nixpkgs/issues/24200
matrix:
include:
- os: linux
sudo: required
script:
- ./maintainers/scripts/travis-nox-review-pr.sh nixpkgs-verify nixpkgs-manual nixpkgs-tarball nixpkgs-unstable
- ./maintainers/scripts/travis-nox-review-pr.sh nixos-options nixos-manual
env:
- BUILD_TYPE="Test Nixpkgs evaluation & NixOS manual build"
- os: linux
sudo: required
dist: trusty
before_script:
- sudo mount -o remount,exec,size=2G,mode=755 /run/user
script: ./maintainers/scripts/travis-nox-review-pr.sh nox pr
env:
- BUILD_TYPE="Build affected packages (Linux)"
- os: osx
osx_image: xcode7.3
script: ./maintainers/scripts/travis-nox-review-pr.sh nox pr
env:
- BUILD_TYPE="Build affected packages (macOS)"
env:
global:
- GITHUB_TOKEN=5edaaf1017f691ed34e7f80878f8f5fbd071603f
notifications:
email: false

View File

@@ -1 +1 @@
19.03
17.09

13
COPYING
View File

@@ -1,4 +1,4 @@
Copyright (c) 2003-2018 Eelco Dolstra and the Nixpkgs/NixOS contributors
Copyright (c) 2003-2017 Eelco Dolstra and the Nixpkgs/NixOS contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -18,3 +18,14 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
======================================================================
Note: the license above does not apply to the packages built by the
Nix Packages collection, merely to the package descriptions (i.e., Nix
expressions, build scripts, etc.). Also, the license does not apply
to some of the binaries used for bootstrapping Nixpkgs (e.g.,
pkgs/stdenv/linux/tools/bash). It also might not apply to patches
included in Nixpkgs, which may be derivative works of the packages to
which they apply. The aforementioned artifacts are all covered by the
licenses of the respective packages.

View File

@@ -1,47 +1,42 @@
[<img src="https://nixos.org/logo/nixos-hires.png" width="500px" alt="logo" />](https://nixos.org/nixos)
[<img src="http://nixos.org/logo/nixos-hires.png" width="500px" alt="logo" />](https://nixos.org/nixos)
[![Build Status](https://travis-ci.org/NixOS/nixpkgs.svg?branch=master)](https://travis-ci.org/NixOS/nixpkgs)
[![Code Triagers Badge](https://www.codetriage.com/nixos/nixpkgs/badges/users.svg)](https://www.codetriage.com/nixos/nixpkgs)
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](http://hydra.nixos.org/)
build daemon as so-called channels. To get channel information via git, add
[nixpkgs-channels](https://github.com/NixOS/nixpkgs-channels.git) as a remote:
```
% git remote add channels https://github.com/NixOS/nixpkgs-channels.git
% git remote add channels git://github.com/NixOS/nixpkgs-channels.git
```
For stability and maximum binary package support, it is recommended to maintain
custom changes on top of one of the channels, e.g. `nixos-18.09` for the latest
custom changes on top of one of the channels, e.g. `nixos-17.03` for the latest
release and `nixos-unstable` for the latest successful build of master:
```
% git remote update channels
% git rebase channels/nixos-18.09
% git rebase channels/nixos-17.03
```
For pull requests, please rebase onto nixpkgs `master`.
For pull-requests, please rebase onto nixpkgs `master`.
[NixOS](https://nixos.org/nixos/) Linux distribution source code is located inside
[NixOS](https://nixos.org/nixos/) linux distribution source code is located inside
`nixos/` folder.
* [NixOS installation instructions](https://nixos.org/nixos/manual/#ch-installation)
* [Documentation (Nix Expression Language chapter)](https://nixos.org/nix/manual/#ch-expression-language)
* [Manual (How to write packages for Nix)](https://nixos.org/nixpkgs/manual/)
* [Manual (NixOS)](https://nixos.org/nixos/manual/)
* [Community maintained wiki](https://nixos.wiki/)
* [Nix Wiki](https://nixos.org/wiki/) (deprecated, see milestone ["Move the Wiki!"](https://github.com/NixOS/nixpkgs/issues?q=is%3Aopen+is%3Aissue+milestone%3A%22Move+the+wiki%21%22))
* [Continuous package builds for unstable/master](https://hydra.nixos.org/jobset/nixos/trunk-combined)
* [Continuous package builds for 18.09 release](https://hydra.nixos.org/jobset/nixos/release-18.09)
* [Continuous package builds for 17.03 release](https://hydra.nixos.org/jobset/nixos/release-17.03)
* [Tests for unstable/master](https://hydra.nixos.org/job/nixos/trunk-combined/tested#tabs-constituents)
* [Tests for 18.09 release](https://hydra.nixos.org/job/nixos/release-18.09/tested#tabs-constituents)
* [Tests for 17.03 release](https://hydra.nixos.org/job/nixos/release-17.03/tested#tabs-constituents)
Communication:
* [Discourse Forum](https://discourse.nixos.org/)
* [Mailing list](https://groups.google.com/forum/#!forum/nix-devel)
* [IRC - #nixos on freenode.net](irc://irc.freenode.net/#nixos)
Note: MIT license does not apply to the packages built by Nixpkgs, merely to
the package descriptions (Nix expressions, build scripts, and so on). It also
might not apply to patches included in Nixpkgs, which may be derivative works
of the packages to which they apply. The aforementioned artifacts are all
covered by the licenses of the respective packages.

View File

@@ -6,21 +6,12 @@ if ! builtins ? nixVersion || builtins.compareVersions requiredVersion builtins.
This version of Nixpkgs requires Nix >= ${requiredVersion}, please upgrade:
- If you are running NixOS, `nixos-rebuild' can be used to upgrade your system.
- Alternatively, with Nix > 2.0 `nix upgrade-nix' can be used to imperatively
upgrade Nix. You may use `nix-env --version' to check which version you have.
- If you are running NixOS, use `nixos-rebuild' to upgrade your system.
- If you installed Nix using the install script (https://nixos.org/nix/install),
it is safe to upgrade by running it again:
curl https://nixos.org/nix/install | sh
For more information, please see the NixOS release notes at
https://nixos.org/nixos/manual or locally at
${toString ./nixos/doc/manual/release-notes}.
If you need further help, see https://nixos.org/nixos/support.html
''
else

7
doc/.gitignore vendored
View File

@@ -1,7 +0,0 @@
*.chapter.xml
*.section.xml
.version
out
manual-full.xml
highlightjs
functions/library/locations.xml

View File

@@ -1,112 +0,0 @@
MD_TARGETS=$(addsuffix .xml, $(basename $(wildcard ./*.md ./**/*.md)))
.PHONY: all
all: validate format out/html/index.html out/epub/manual.epub
.PHONY: debug
debug:
nix-shell --run "xmloscopy --docbook5 ./manual.xml ./manual-full.xml"
.PHONY: format
format:
find . -iname '*.xml' -type f | while read f; do \
echo $$f ;\
xmlformat --config-file "$$XMLFORMAT_CONFIG" -i $$f ;\
done
.PHONY: fix-misc-xml
fix-misc-xml:
find . -iname '*.xml' -type f \
-exec ../nixos/doc/varlistentry-fixer.rb {} ';'
.PHONY: clean
clean:
rm -f ${MD_TARGETS} .version manual-full.xml functions/library/locations.xml functions/library/generated
rm -rf ./out/ ./highlightjs
.PHONY: validate
validate: manual-full.xml
jing "$$RNG" manual-full.xml
out/html/index.html: manual-full.xml style.css highlightjs
mkdir -p out/html
xsltproc ${xsltFlags} \
--nonet --xinclude \
--output $@ \
"$$XSL/docbook/xhtml/docbook.xsl" \
./manual-full.xml
mkdir -p out/html/highlightjs/
cp -r highlightjs out/html/
cp ./overrides.css out/html/
cp ./style.css out/html/style.css
mkdir -p out/html/images/callouts
cp "$$XSL/docbook/images/callouts/"*.svg out/html/images/callouts/
chmod u+w -R out/html/
out/epub/manual.epub: manual-full.xml
mkdir -p out/epub/scratch
xsltproc ${xsltFlags} --nonet \
--output out/epub/scratch/ \
"$$XSL/docbook/epub/docbook.xsl" \
./manual-full.xml
cp ./overrides.css out/epub/scratch/OEBPS
cp ./style.css out/epub/scratch/OEBPS
mkdir -p out/epub/scratch/OEBPS/images/callouts/
cp "$$XSL/docbook/images/callouts/"*.svg out/epub/scratch/OEBPS/images/callouts/
echo "application/epub+zip" > mimetype
zip -0Xq "out/epub/manual.epub" mimetype
rm mimetype
cd "out/epub/scratch/" && zip -Xr9D "../manual.epub" *
rm -rf "out/epub/scratch/"
highlightjs:
mkdir -p highlightjs
cp -r "$$HIGHLIGHTJS/highlight.pack.js" highlightjs/
cp -r "$$HIGHLIGHTJS/LICENSE" highlightjs/
cp -r "$$HIGHLIGHTJS/mono-blue.css" highlightjs/
cp -r "$$HIGHLIGHTJS/loader.js" highlightjs/
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
.version:
nix-instantiate --eval \
-E '(import ../lib).version' > .version
function_locations := $(shell nix-build --no-out-link ./lib-function-locations.nix)
functions/library/locations.xml:
ln -s $(function_locations) ./functions/library/locations.xml
functions/library/generated:
nix-build ./lib-function-docs.nix \
--arg locationsXml $(function_locations)\
--out-link ./functions/library/generated
%.section.xml: %.section.md
pandoc $^ -w docbook+smart \
-f markdown+smart \
| sed -e 's|<ulink url=|<link xlink:href=|' \
-e 's|</ulink>|</link>|' \
-e 's|<sect. id=|<section xml:id=|' \
-e 's|</sect[0-9]>|</section>|' \
-e '1s| id=| xml:id=|' \
-e '1s|\(<[^ ]* \)|\1xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" |' \
| cat > $@
%.chapter.xml: %.chapter.md
pandoc $^ -w docbook+smart \
--top-level-division=chapter \
-f markdown+smart \
| sed -e 's|<ulink url=|<link xlink:href=|' \
-e 's|</ulink>|</link>|' \
-e 's|<sect. id=|<section xml:id=|' \
-e 's|</sect[0-9]>|</section>|' \
-e '1s| id=| xml:id=|' \
-e '1s|\(<[^ ]* \)|\1|' \
| cat > $@

File diff suppressed because it is too large Load Diff

View File

@@ -1,51 +1,40 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-packageconfig">
<title>Global configuration</title>
<para>
Nix comes with certain defaults about what packages can and cannot be
installed, based on a package's metadata. By default, Nix will prevent
installation if any of the following criteria are true:
</para>
<itemizedlist>
<listitem>
<para>
The package is thought to be broken, and has had its
<literal>meta.broken</literal> set to <literal>true</literal>.
</para>
</listitem>
<listitem>
<para>
The package isn't intended to run on the given system, as none of its
<literal>meta.platforms</literal> match the given system.
</para>
</listitem>
<listitem>
<para>
The package's <literal>meta.license</literal> is set to a license which is
considered to be unfree.
</para>
</listitem>
<listitem>
<para>
The package has known security vulnerabilities but has not or can not be
updated for some reason, and a list of issues has been entered in to the
package's <literal>meta.knownVulnerabilities</literal>.
</para>
</listitem>
</itemizedlist>
<para>
Note that all this is checked during evaluation already, and the check
includes any package that is evaluated. In particular, all build-time
dependencies are checked. <literal>nix-env -qa</literal> will (attempt to)
hide any packages that would be refused.
</para>
<para>
Each of these criteria can be altered in the nixpkgs configuration.
</para>
<para>
The nixpkgs configuration for a NixOS system is set in the
<literal>configuration.nix</literal>, as in the following example:
<title>Global configuration</title>
<para>Nix comes with certain defaults about what packages can and
cannot be installed, based on a package's metadata. By default, Nix
will prevent installation if any of the following criteria are
true:</para>
<itemizedlist>
<listitem><para>The package is thought to be broken, and has had
its <literal>meta.broken</literal> set to
<literal>true</literal>.</para></listitem>
<listitem><para>The package's <literal>meta.license</literal> is set
to a license which is considered to be unfree.</para></listitem>
<listitem><para>The package has known security vulnerabilities but
has not or can not be updated for some reason, and a list of issues
has been entered in to the package's
<literal>meta.knownVulnerabilities</literal>.</para></listitem>
</itemizedlist>
<para>Note that all this is checked during evaluation already,
and the check includes any package that is evaluated.
In particular, all build-time dependencies are checked.
<literal>nix-env -qa</literal> will (attempt to) hide any packages
that would be refused.
</para>
<para>Each of these criteria can be altered in the nixpkgs
configuration.</para>
<para>The nixpkgs configuration for a NixOS system is set in the
<literal>configuration.nix</literal>, as in the following example:
<programlisting>
{
nixpkgs.config = {
@@ -53,202 +42,147 @@
};
}
</programlisting>
However, this does not allow unfree software for individual users. Their
configurations are managed separately.
</para>
<para>
A user's of nixpkgs configuration is stored in a user-specific configuration
file located at <filename>~/.config/nixpkgs/config.nix</filename>. For
example:
However, this does not allow unfree software for individual users.
Their configurations are managed separately.</para>
<para>A user's of nixpkgs configuration is stored in a user-specific
configuration file located at
<filename>~/.config/nixpkgs/config.nix</filename>. For example:
<programlisting>
{
allowUnfree = true;
}
</programlisting>
</para>
<para>
Note that we are not able to test or build unfree software on Hydra due to
policy. Most unfree licenses prohibit us from either executing or
distributing the software.
</para>
<section xml:id="sec-allow-broken">
</para>
<section xml:id="sec-allow-broken">
<title>Installing broken packages</title>
<para>
There are two ways to try compiling a package which has been marked as
broken.
</para>
<para>There are two ways to try compiling a package which has been
marked as broken.</para>
<itemizedlist>
<listitem>
<para>
For allowing the build of a broken package once, you can use an
environment variable for a single invocation of the nix tools:
<programlisting>$ export NIXPKGS_ALLOW_BROKEN=1</programlisting>
</para>
</listitem>
<listitem>
<para>
For permanently allowing broken packages to be built, you may add
<literal>allowBroken = true;</literal> to your user's configuration file,
like this:
<listitem><para>
For allowing the build of a broken package once, you can use an
environment variable for a single invocation of the nix tools:
<programlisting>$ export NIXPKGS_ALLOW_BROKEN=1</programlisting>
</para></listitem>
<listitem><para>
For permanently allowing broken packages to be built, you may
add <literal>allowBroken = true;</literal> to your user's
configuration file, like this:
<programlisting>
{
allowBroken = true;
}
</programlisting>
</para>
</listitem>
</para></listitem>
</itemizedlist>
</section>
<section xml:id="sec-allow-unsupported-system">
<title>Installing packages on unsupported systems</title>
</section>
<para>
There are also two ways to try compiling a package which has been marked as
unsuported for the given system.
</para>
<itemizedlist>
<listitem>
<para>
For allowing the build of a broken package once, you can use an
environment variable for a single invocation of the nix tools:
<programlisting>$ export NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM=1</programlisting>
</para>
</listitem>
<listitem>
<para>
For permanently allowing broken packages to be built, you may add
<literal>allowUnsupportedSystem = true;</literal> to your user's
configuration file, like this:
<programlisting>
{
allowUnsupportedSystem = true;
}
</programlisting>
</para>
</listitem>
</itemizedlist>
<para>
The difference between a package being unsupported on some system and
being broken is admittedly a bit fuzzy. If a program
<emphasis>ought</emphasis> to work on a certain platform, but doesn't, the
platform should be included in <literal>meta.platforms</literal>, but marked
as broken with e.g. <literal>meta.broken =
!hostPlatform.isWindows</literal>. Of course, this begs the question of what
"ought" means exactly. That is left to the package maintainer.
</para>
</section>
<section xml:id="sec-allow-unfree">
<section xml:id="sec-allow-unfree">
<title>Installing unfree packages</title>
<para>
There are several ways to tweak how Nix handles a package which has been
marked as unfree.
</para>
<para>There are several ways to tweak how Nix handles a package
which has been marked as unfree.</para>
<itemizedlist>
<listitem>
<para>
To temporarily allow all unfree packages, you can use an environment
variable for a single invocation of the nix tools:
<programlisting>$ export NIXPKGS_ALLOW_UNFREE=1</programlisting>
</para>
</listitem>
<listitem>
<para>
It is possible to permanently allow individual unfree packages, while
still blocking unfree packages by default using the
<literal>allowUnfreePredicate</literal> configuration option in the user
configuration file.
</para>
<para>
This option is a function which accepts a package as a parameter, and
returns a boolean. The following example configuration accepts a package
and always returns false:
<listitem><para>
To temporarily allow all unfree packages, you can use an
environment variable for a single invocation of the nix tools:
<programlisting>$ export NIXPKGS_ALLOW_UNFREE=1</programlisting>
</para></listitem>
<listitem><para>
It is possible to permanently allow individual unfree packages,
while still blocking unfree packages by default using the
<literal>allowUnfreePredicate</literal> configuration
option in the user configuration file.</para>
<para>This option is a function which accepts a package as a
parameter, and returns a boolean. The following example
configuration accepts a package and always returns false:
<programlisting>
{
allowUnfreePredicate = (pkg: false);
}
</programlisting>
</para>
<para>
For a more useful example, try the following. This configuration
only allows unfree packages named flash player and visual studio
code:
</para>
<para>A more useful example, the following configuration allows
only allows flash player and visual studio code:
<programlisting>
{
allowUnfreePredicate = (pkg: builtins.elem
(builtins.parseDrvName pkg.name).name [
"flashplayer"
"vscode"
]);
allowUnfreePredicate = (pkg: elem (builtins.parseDrvName pkg.name).name [ "flashplayer" "vscode" ]);
}
</programlisting>
</para>
</listitem>
<listitem>
<para>
It is also possible to whitelist and blacklist licenses that are
specifically acceptable or not acceptable, using
<literal>whitelistedLicenses</literal> and
<literal>blacklistedLicenses</literal>, respectively.
</para>
<para>
The following example configuration whitelists the licenses
<literal>amd</literal> and <literal>wtfpl</literal>:
</para></listitem>
<listitem>
<para>It is also possible to whitelist and blacklist licenses
that are specifically acceptable or not acceptable, using
<literal>whitelistedLicenses</literal> and
<literal>blacklistedLicenses</literal>, respectively.
</para>
<para>The following example configuration whitelists the
licenses <literal>amd</literal> and <literal>wtfpl</literal>:
<programlisting>
{
whitelistedLicenses = with stdenv.lib.licenses; [ amd wtfpl ];
}
</programlisting>
</para>
<para>
The following example configuration blacklists the <literal>gpl3</literal>
and <literal>agpl3</literal> licenses:
</para>
<para>The following example configuration blacklists the
<literal>gpl3</literal> and <literal>agpl3</literal> licenses:
<programlisting>
{
blacklistedLicenses = with stdenv.lib.licenses; [ agpl3 gpl3 ];
}
</programlisting>
</para>
</listitem>
</para>
</listitem>
</itemizedlist>
<para>
A complete list of licenses can be found in the file
<filename>lib/licenses.nix</filename> of the nixpkgs tree.
</para>
</section>
<section xml:id="sec-allow-insecure">
<title>Installing insecure packages</title>
<para>A complete list of licenses can be found in the file
<filename>lib/licenses.nix</filename> of the nixpkgs tree.</para>
</section>
<para>
There are several ways to tweak how Nix handles a package which has been
marked as insecure.
</para>
<section xml:id="sec-allow-insecure">
<title>
Installing insecure packages
</title>
<para>There are several ways to tweak how Nix handles a package
which has been marked as insecure.</para>
<itemizedlist>
<listitem>
<para>
To temporarily allow all insecure packages, you can use an environment
variable for a single invocation of the nix tools:
<programlisting>$ export NIXPKGS_ALLOW_INSECURE=1</programlisting>
</para>
</listitem>
<listitem>
<para>
It is possible to permanently allow individual insecure packages, while
still blocking other insecure packages by default using the
<literal>permittedInsecurePackages</literal> configuration option in the
user configuration file.
</para>
<para>
The following example configuration permits the installation of the
hypothetically insecure package <literal>hello</literal>, version
<literal>1.2.3</literal>:
<listitem><para>
To temporarily allow all insecure packages, you can use an
environment variable for a single invocation of the nix tools:
<programlisting>$ export NIXPKGS_ALLOW_INSECURE=1</programlisting>
</para></listitem>
<listitem><para>
It is possible to permanently allow individual insecure
packages, while still blocking other insecure packages by
default using the <literal>permittedInsecurePackages</literal>
configuration option in the user configuration file.</para>
<para>The following example configuration permits the
installation of the hypothetically insecure package
<literal>hello</literal>, version <literal>1.2.3</literal>:
<programlisting>
{
permittedInsecurePackages = [
@@ -256,44 +190,47 @@
];
}
</programlisting>
</para>
</listitem>
<listitem>
<para>
It is also possible to create a custom policy around which insecure
packages to allow and deny, by overriding the
<literal>allowInsecurePredicate</literal> configuration option.
</para>
<para>
The <literal>allowInsecurePredicate</literal> option is a function which
accepts a package and returns a boolean, much like
<literal>allowUnfreePredicate</literal>.
</para>
<para>
The following configuration example only allows insecure packages with
very short names:
</para>
</listitem>
<listitem><para>
It is also possible to create a custom policy around which
insecure packages to allow and deny, by overriding the
<literal>allowInsecurePredicate</literal> configuration
option.</para>
<para>The <literal>allowInsecurePredicate</literal> option is a
function which accepts a package and returns a boolean, much
like <literal>allowUnfreePredicate</literal>.</para>
<para>The following configuration example only allows insecure
packages with very short names:
<programlisting>
{
allowInsecurePredicate = (pkg: (builtins.stringLength (builtins.parseDrvName pkg.name).name) &lt;= 5);
}
</programlisting>
</para>
<para>
Note that <literal>permittedInsecurePackages</literal> is only checked if
<literal>allowInsecurePredicate</literal> is not specified.
</para>
</listitem>
</itemizedlist>
</section>
<!--============================================================-->
<section xml:id="sec-modify-via-packageOverrides">
<title>Modify packages via <literal>packageOverrides</literal></title>
</para>
<para>Note that <literal>permittedInsecurePackages</literal> is
only checked if <literal>allowInsecurePredicate</literal> is not
specified.
</para></listitem>
</itemizedlist>
</section>
<!--============================================================-->
<section xml:id="sec-modify-via-packageOverrides"><title>Modify
packages via <literal>packageOverrides</literal></title>
<para>You can define a function called
<varname>packageOverrides</varname> in your local
<filename>~/.config/nixpkgs/config.nix</filename> to override nix packages. It
must be a function that takes pkgs as an argument and return modified
set of packages.
<para>
You can define a function called <varname>packageOverrides</varname> in your
local <filename>~/.config/nixpkgs/config.nix</filename> to override Nix
packages. It must be a function that takes pkgs as an argument and returns a
modified set of packages.
<programlisting>
{
packageOverrides = pkgs: rec {
@@ -301,146 +238,119 @@
};
}
</programlisting>
</para>
</section>
<section xml:id="sec-declarative-package-management">
</para>
</section>
<section xml:id="sec-declarative-package-management">
<title>Declarative Package Management</title>
<section xml:id="sec-building-environment">
<title>Build an environment</title>
<title>Build an environment</title>
<para>
Using <literal>packageOverrides</literal>, it is possible to manage
packages declaratively. This means that we can list all of our desired
packages within a declarative Nix expression. For example, to have
<literal>aspell</literal>, <literal>bc</literal>,
<literal>ffmpeg</literal>, <literal>coreutils</literal>,
<literal>gdb</literal>, <literal>nixUnstable</literal>,
<literal>emscripten</literal>, <literal>jq</literal>,
<literal>nox</literal>, and <literal>silver-searcher</literal>, we could
use the following in <filename>~/.config/nixpkgs/config.nix</filename>:
</para>
<para>
Using <literal>packageOverrides</literal>, it is possible to manage
packages declaratively. This means that we can list all of our desired
packages within a declarative Nix expression. For example, to have
<literal>aspell</literal>, <literal>bc</literal>,
<literal>ffmpeg</literal>, <literal>coreutils</literal>,
<literal>gdb</literal>, <literal>nixUnstable</literal>,
<literal>emscripten</literal>, <literal>jq</literal>,
<literal>nox</literal>, and <literal>silver-searcher</literal>, we could
use the following in <filename>~/.config/nixpkgs/config.nix</filename>:
</para>
<screen>
<screen>
{
packageOverrides = pkgs: with pkgs; {
myPackages = pkgs.buildEnv {
name = "my-packages";
paths = [
aspell
bc
coreutils
gdb
ffmpeg
nixUnstable
emscripten
jq
nox
silver-searcher
];
paths = [ aspell bc coreutils gdb ffmpeg nixUnstable emscripten jq nox silver-searcher ];
};
};
}
</screen>
</screen>
<para>
To install it into our environment, you can just run <literal>nix-env -iA
nixpkgs.myPackages</literal>. If you want to load the packages to be built
from a working copy of <literal>nixpkgs</literal> you just run
<literal>nix-env -f. -iA myPackages</literal>. To explore what's been
installed, just look through <filename>~/.nix-profile/</filename>. You can
see that a lot of stuff has been installed. Some of this stuff is useful
some of it isn't. Let's tell Nixpkgs to only link the stuff that we want:
</para>
<para>
To install it into our environment, you can just run <literal>nix-env -iA
nixpkgs.myPackages</literal>. If you want to load the packages to be built
from a working copy of <literal>nixpkgs</literal> you just run
<literal>nix-env -f. -iA myPackages</literal>. To explore what's been
installed, just look through <filename>~/.nix-profile/</filename>. You can
see that a lot of stuff has been installed. Some of this stuff is useful
some of it isn't. Let's tell Nixpkgs to only link the stuff that we want:
</para>
<screen>
<screen>
{
packageOverrides = pkgs: with pkgs; {
myPackages = pkgs.buildEnv {
name = "my-packages";
paths = [
aspell
bc
coreutils
gdb
ffmpeg
nixUnstable
emscripten
jq
nox
silver-searcher
];
paths = [ aspell bc coreutils gdb ffmpeg nixUnstable emscripten jq nox silver-searcher ];
pathsToLink = [ "/share" "/bin" ];
};
};
}
</screen>
</screen>
<para>
<literal>pathsToLink</literal> tells Nixpkgs to only link the paths listed
which gets rid of the extra stuff in the profile.
<filename>/bin</filename> and <filename>/share</filename> are good
defaults for a user environment, getting rid of the clutter. If you are
running on Nix on MacOS, you may want to add another path as well,
<filename>/Applications</filename>, that makes GUI apps available.
</para>
<para>
<literal>pathsToLink</literal> tells Nixpkgs to only link the paths listed
which gets rid of the extra stuff in the profile. <filename>/bin</filename>
and <filename>/share</filename> are good defaults for a user environment,
getting rid of the clutter. If you are running on Nix on MacOS, you may
want to add another path as well, <filename>/Applications</filename>, that
makes GUI apps available.
</para>
</section>
<section xml:id="sec-getting-documentation">
<title>Getting documentation</title>
<title>Getting documentation</title>
<para>
After building that new environment, look through
<filename>~/.nix-profile</filename> to make sure everything is there that
we wanted. Discerning readers will note that some files are missing. Look
inside <filename>~/.nix-profile/share/man/man1/</filename> to verify this.
There are no man pages for any of the Nix tools! This is because some
packages like Nix have multiple outputs for things like documentation (see
section 4). Let's make Nix install those as well.
</para>
<para>
After building that new environment, look through
<filename>~/.nix-profile</filename> to make sure everything is there that
we wanted. Discerning readers will note that some files are missing. Look
inside <filename>~/.nix-profile/share/man/man1/</filename> to verify this.
There are no man pages for any of the Nix tools! This is because some
packages like Nix have multiple outputs for things like documentation (see
section 4). Let's make Nix install those as well.
</para>
<screen>
<screen>
{
packageOverrides = pkgs: with pkgs; {
myPackages = pkgs.buildEnv {
name = "my-packages";
paths = [
aspell
bc
coreutils
ffmpeg
nixUnstable
emscripten
jq
nox
silver-searcher
];
pathsToLink = [ "/share/man" "/share/doc" "/bin" ];
paths = [ aspell bc coreutils ffmpeg nixUnstable emscripten jq nox silver-searcher ];
pathsToLink = [ "/share/man" "/share/doc" /bin" ];
extraOutputsToInstall = [ "man" "doc" ];
};
};
}
</screen>
</screen>
<para>
This provides us with some useful documentation for using our packages.
However, if we actually want those manpages to be detected by man, we need
to set up our environment. This can also be managed within Nix expressions.
</para>
<para>
This provides us with some useful documentation for using our packages.
However, if we actually want those manpages to be detected by man, we need
to set up our environment. This can also be managed within Nix
expressions.
</para>
<screen>
<screen>
{
packageOverrides = pkgs: with pkgs; rec {
myProfile = writeText "my-profile" ''
export PATH=$HOME/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/sbin:/bin:/usr/sbin:/usr/bin
export MANPATH=$HOME/.nix-profile/share/man:/nix/var/nix/profiles/default/share/man:/usr/share/man
export PATH=$HOME/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/sbin:/bin:/usr/sbin:/usr/bin
export MANPATH=$HOME/.nix-profile/share/man:/nix/var/nix/profiles/default/share/man:/usr/share/man
'';
myPackages = pkgs.buildEnv {
name = "my-packages";
paths = [
(runCommand "profile" {} ''
mkdir -p $out/etc/profile.d
cp ${myProfile} $out/etc/profile.d/my-profile.sh
mkdir -p $out/etc/profile.d
cp ${myProfile} $out/etc/profile.d/my-profile.sh
'')
aspell
bc
@@ -453,20 +363,20 @@
nox
silver-searcher
];
pathsToLink = [ "/share/man" "/share/doc" "/bin" "/etc" ];
pathsToLink = [ "/share/man" "/share/doc" /bin" "/etc" ];
extraOutputsToInstall = [ "man" "doc" ];
};
};
}
</screen>
</screen>
<para>
For this to work fully, you must also have this script sourced when you are
logged in. Try adding something like this to your
<filename>~/.profile</filename> file:
</para>
<para>
For this to work fully, you must also have this script sourced when you
are logged in. Try adding something like this to your
<filename>~/.profile</filename> file:
</para>
<screen>
<screen>
#!/bin/sh
if [ -d $HOME/.nix-profile/etc/profile.d ]; then
for i in $HOME/.nix-profile/etc/profile.d/*.sh; do
@@ -475,37 +385,38 @@ if [ -d $HOME/.nix-profile/etc/profile.d ]; then
fi
done
fi
</screen>
</screen>
<para>
Now just run <literal>source $HOME/.profile</literal> and you can starting
loading man pages from your environent.
</para>
<para>
Now just run <literal>source $HOME/.profile</literal> and you can starting
loading man pages from your environent.
</para>
</section>
<section xml:id="sec-gnu-info-setup">
<title>GNU info setup</title>
<title>GNU info setup</title>
<para>
Configuring GNU info is a little bit trickier than man pages. To work
correctly, info needs a database to be generated. This can be done with
some small modifications to our environment scripts.
</para>
<para>
Configuring GNU info is a little bit trickier than man pages. To work
correctly, info needs a database to be generated. This can be done with
some small modifications to our environment scripts.
</para>
<screen>
<screen>
{
packageOverrides = pkgs: with pkgs; rec {
myProfile = writeText "my-profile" ''
export PATH=$HOME/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/sbin:/bin:/usr/sbin:/usr/bin
export MANPATH=$HOME/.nix-profile/share/man:/nix/var/nix/profiles/default/share/man:/usr/share/man
export INFOPATH=$HOME/.nix-profile/share/info:/nix/var/nix/profiles/default/share/info:/usr/share/info
export PATH=$HOME/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/sbin:/bin:/usr/sbin:/usr/bin
export MANPATH=$HOME/.nix-profile/share/man:/nix/var/nix/profiles/default/share/man:/usr/share/man
export INFOPATH=$HOME/.nix-profile/share/info:/nix/var/nix/profiles/default/share/info:/usr/share/info
'';
myPackages = pkgs.buildEnv {
name = "my-packages";
paths = [
(runCommand "profile" {} ''
mkdir -p $out/etc/profile.d
cp ${myProfile} $out/etc/profile.d/my-profile.sh
mkdir -p $out/etc/profile.d
cp ${myProfile} $out/etc/profile.d/my-profile.sh
'')
aspell
bc
@@ -522,25 +433,28 @@ fi
pathsToLink = [ "/share/man" "/share/doc" "/share/info" "/bin" "/etc" ];
extraOutputsToInstall = [ "man" "doc" "info" ];
postBuild = ''
if [ -x $out/bin/install-info -a -w $out/share/info ]; then
shopt -s nullglob
for i in $out/share/info/*.info $out/share/info/*.info.gz; do
$out/bin/install-info $i $out/share/info/dir
done
fi
if [ -x $out/bin/install-info -a -w $out/share/info ]; then
shopt -s nullglob
for i in $out/share/info/*.info $out/share/info/*.info.gz; do
$out/bin/install-info $i $out/share/info/dir
done
fi
'';
};
};
}
</screen>
</screen>
<para>
<literal>postBuild</literal> tells Nixpkgs to run a command after building
the environment. In this case, <literal>install-info</literal> adds the
installed info pages to <literal>dir</literal> which is GNU info's default
root node. Note that <literal>texinfoInteractive</literal> is added to the
environment to give the <literal>install-info</literal> command.
</para>
<para>
<literal>postBuild</literal> tells Nixpkgs to run a command after building
the environment. In this case, <literal>install-info</literal> adds the
installed info pages to <literal>dir</literal> which is GNU info's default
root node. Note that <literal>texinfoInteractive</literal> is added to the
environment to give the <literal>install-info</literal> command.
</para>
</section>
</section>
</section>
</chapter>

View File

@@ -1,35 +1,20 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-contributing">
<title>Contributing to this documentation</title>
<para>
The DocBook sources of the Nixpkgs manual are in the
<filename
<title>Contributing to this documentation</title>
<para>The DocBook sources of the Nixpkgs manual are in the <filename
xlink:href="https://github.com/NixOS/nixpkgs/tree/master/doc">doc</filename>
subdirectory of the Nixpkgs repository.
</para>
<para>
You can quickly check your edits with <command>make</command>:
</para>
subdirectory of the Nixpkgs repository. If you make modifications to
the manual, it's important to build it before committing. You can do that as follows:
<screen>
$ cd /path/to/nixpkgs/doc
$ nix-shell
[nix-shell]$ make
$ cd /path/to/nixpkgs
$ nix-build doc
</screen>
<para>
If you experience problems, run <command>make debug</command> to help
understand the docbook errors.
</para>
<para>
After making modifications to the manual, it's important to build it before
committing. You can do that as follows:
<screen>
$ cd /path/to/nixpkgs/doc
$ nix-shell
[nix-shell]$ make clean
[nix-shell]$ nix-build .
</screen>
If the build succeeds, the manual will be in
<filename>./result/share/doc/nixpkgs/manual.html</filename>.
</para>
If the build succeeds, the manual will be in
<filename>./result/share/doc/nixpkgs/manual.html</filename>.</para>
</chapter>

View File

@@ -1,468 +1,248 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-cross">
<title>Cross-compilation</title>
<section xml:id="sec-cross-intro">
<title>Cross-compilation</title>
<section xml:id="sec-cross-intro">
<title>Introduction</title>
<para>
"Cross-compilation" means compiling a program on one machine for another type
of machine. For example, a typical use of cross-compilation is to compile
programs for embedded devices. These devices often don't have the computing
power and memory to compile their own programs. One might think that
cross-compilation is a fairly niche concern. However, there are significant
advantages to rigorously distinguishing between build-time and run-time
environments! This applies even when one is developing and deploying on the
same machine. Nixpkgs is increasingly adopting the opinion that packages
should be written with cross-compilation in mind, and nixpkgs should evaluate
in a similar way (by minimizing cross-compilation-specific special cases)
whether or not one is cross-compiling.
"Cross-compilation" means compiling a program on one machine for another type of machine.
For example, a typical use of cross compilation is to compile programs for embedded devices.
These devices often don't have the computing power and memory to compile their own programs.
One might think that cross-compilation is a fairly niche concern, but there are advantages to being rigorous about distinguishing build-time vs run-time environments even when one is developing and deploying on the same machine.
Nixpkgs is increasingly adopting this opinion in that packages should be written with cross-compilation in mind, and nixpkgs should evaluate in a similar way (by minimizing cross-compilation-specific special cases) whether or not one is cross-compiling.
</para>
<para>
This chapter will be organized in three parts. First, it will describe the
basics of how to package software in a way that supports cross-compilation.
Second, it will describe how to use Nixpkgs when cross-compiling. Third, it
will describe the internal infrastructure supporting cross-compilation.
This chapter will be organized in three parts.
First, it will describe the basics of how to package software in a way that supports cross-compilation.
Second, it will describe how to use Nixpkgs when cross-compiling.
Third, it will describe the internal infrastructure supporting cross-compilation.
</para>
</section>
</section>
<!--============================================================-->
<section xml:id="sec-cross-packaging">
<section xml:id="sec-cross-packaging">
<title>Packaging in a cross-friendly manner</title>
<section xml:id="sec-cross-platform-parameters">
<title>Platform parameters</title>
<para>
Nixpkgs follows the <link
xlink:href="https://gcc.gnu.org/onlinedocs/gccint/Configure-Terms.html">conventions
of GNU autoconf</link>. We distinguish between 3 types of platforms when
building a derivation: <wordasword>build</wordasword>,
<wordasword>host</wordasword>, and <wordasword>target</wordasword>. In
summary, <wordasword>build</wordasword> is the platform on which a package
is being built, <wordasword>host</wordasword> is the platform on which it
will run. The third attribute, <wordasword>target</wordasword>, is relevant
only for certain specific compilers and build tools.
</para>
<para>
In Nixpkgs, these three platforms are defined as attribute sets under the
names <literal>buildPlatform</literal>, <literal>hostPlatform</literal>,
and <literal>targetPlatform</literal>. They are always defined as
attributes in the standard environment. That means one can access them
like:
<programlisting>{ stdenv, fooDep, barDep, .. }: ...stdenv.buildPlatform...</programlisting>
.
</para>
<variablelist>
<varlistentry>
<term>
<varname>buildPlatform</varname>
</term>
<listitem>
<para>
The "build platform" is the platform on which a package is built. Once
someone has a built package, or pre-built binary package, the build
platform should not matter and can be ignored.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>hostPlatform</varname>
</term>
<listitem>
<para>
The "host platform" is the platform on which a package will be run. This
is the simplest platform to understand, but also the one with the worst
name.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>targetPlatform</varname>
</term>
<listitem>
<para>
The "target platform" attribute is, unlike the other two attributes, not
actually fundamental to the process of building software. Instead, it is
only relevant for compatibility with building certain specific compilers
and build tools. It can be safely ignored for all other packages.
</para>
<para>
The build process of certain compilers is written in such a way that the
compiler resulting from a single build can itself only produce binaries
for a single platform. The task of specifying this single "target
platform" is thus pushed to build time of the compiler. The root cause of
this that the compiler (which will be run on the host) and the standard
library/runtime (which will be run on the target) are built by a single
build process.
</para>
<para>
There is no fundamental need to think about a single target ahead of
time like this. If the tool supports modular or pluggable backends, both
the need to specify the target at build time and the constraint of
having only a single target disappear. An example of such a tool is
LLVM.
</para>
<para>
Although the existence of a "target platfom" is arguably a historical
mistake, it is a common one: examples of tools that suffer from it are
GCC, Binutils, GHC and Autoconf. Nixpkgs tries to avoid sharing in the
mistake where possible. Still, because the concept of a target platform
is so ingrained, it is best to support it as is.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
The exact schema these fields follow is a bit ill-defined due to a long and
convoluted evolution, but this is slowly being cleaned up. You can see
examples of ones used in practice in
<literal>lib.systems.examples</literal>; note how they are not all very
consistent. For now, here are few fields can count on them containing:
</para>
<variablelist>
<varlistentry>
<term>
<varname>system</varname>
</term>
<listitem>
<para>
This is a two-component shorthand for the platform. Examples of this
would be "x86_64-darwin" and "i686-linux"; see
<literal>lib.systems.doubles</literal> for more. The first component
corresponds to the CPU architecture of the platform and the second to the
operating system of the platform (<literal>[cpu]-[os]</literal>). This
format has built-in support in Nix, such as the
<varname>builtins.currentSystem</varname> impure string.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>config</varname>
</term>
<listitem>
<para>
This is a 3- or 4- component shorthand for the platform. Examples of this
would be <literal>x86_64-unknown-linux-gnu</literal> and
<literal>aarch64-apple-darwin14</literal>. This is a standard format
called the "LLVM target triple", as they are pioneered by LLVM. In the
4-part form, this corresponds to
<literal>[cpu]-[vendor]-[os]-[abi]</literal>. This format is strictly
more informative than the "Nix host double", as the previous format could
analogously be termed. This needs a better name than
<varname>config</varname>!
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>parsed</varname>
</term>
<listitem>
<para>
This is a Nix representation of a parsed LLVM target triple
with white-listed components. This can be specified directly,
or actually parsed from the <varname>config</varname>. See
<literal>lib.systems.parse</literal> for the exact
representation.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>libc</varname>
</term>
<listitem>
<para>
This is a string identifying the standard C library used. Valid
identifiers include "glibc" for GNU libc, "libSystem" for Darwin's
Libsystem, and "uclibc" for µClibc. It should probably be refactored to
use the module system, like <varname>parse</varname>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>is*</varname>
</term>
<listitem>
<para>
These predicates are defined in <literal>lib.systems.inspect</literal>,
and slapped onto every platform. They are superior to the ones in
<varname>stdenv</varname> as they force the user to be explicit about
which platform they are inspecting. Please use these instead of those.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>platform</varname>
</term>
<listitem>
<para>
This is, quite frankly, a dumping ground of ad-hoc settings (it's an
attribute set). See <literal>lib.systems.platforms</literal> for
examples—there's hopefully one in there that will work verbatim for
each platform that is working. Please help us triage these flags and
give them better homes!
</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section xml:id="sec-cross-specifying-dependencies">
<title>Specifying Dependencies</title>
<para>
In this section we explore the relationship between both runtime and
build-time dependencies and the 3 Autoconf platforms.
</para>
<para>
A runtime dependency between 2 packages implies that between them both the
host and target platforms match. This is directly implied by the meaning of
"host platform" and "runtime dependency": The package dependency exists
while both packages are running on a single host platform.
</para>
<para>
A build time dependency, however, implies a shift in platforms between the
depending package and the depended-on package. The meaning of a build time
dependency is that to build the depending package we need to be able to run
the depended-on's package. The depending package's build platform is
therefore equal to the depended-on package's host platform. Analogously,
the depending package's host platform is equal to the depended-on package's
target platform.
</para>
<para>
In this manner, given the 3 platforms for one package, we can determine the
three platforms for all its transitive dependencies. This is the most
important guiding principle behind cross-compilation with Nixpkgs, and will
be called the <wordasword>sliding window principle</wordasword>.
</para>
<para>
Some examples will make this clearer. If a package is being built with a
<literal>(build, host, target)</literal> platform triple of <literal>(foo,
bar, bar)</literal>, then its build-time dependencies would have a triple of
<literal>(foo, foo, bar)</literal>, and <emphasis>those packages'</emphasis>
build-time dependencies would have a triple of <literal>(foo, foo,
foo)</literal>. In other words, it should take two "rounds" of following
build-time dependency edges before one reaches a fixed point where, by the
sliding window principle, the platform triple no longer changes. Indeed,
this happens with cross-compilation, where only rounds of native
dependencies starting with the second necessarily coincide with native
packages.
</para>
<note>
<section>
<title>Platform parameters</title>
<para>
The depending package's target platform is unconstrained by the sliding
window principle, which makes sense in that one can in principle build
cross compilers targeting arbitrary platforms.
The three GNU Autoconf platforms, <wordasword>build</wordasword>, <wordasword>host</wordasword>, and <wordasword>target</wordasword>, are historically the result of much confusion.
<link xlink:href="https://gcc.gnu.org/onlinedocs/gccint/Configure-Terms.html" /> clears this up somewhat but there is more to be said.
An important advice to get out the way is, unless you are packaging a compiler or other build tool, just worry about the build and host platforms.
Dealing with just two platforms usually better matches people's preconceptions, and in this case is completely correct.
</para>
</note>
<para>
How does this work in practice? Nixpkgs is now structured so that build-time
dependencies are taken from <varname>buildPackages</varname>, whereas
run-time dependencies are taken from the top level attribute set. For
example, <varname>buildPackages.gcc</varname> should be used at build-time,
while <varname>gcc</varname> should be used at run-time. Now, for most of
Nixpkgs's history, there was no <varname>buildPackages</varname>, and most
packages have not been refactored to use it explicitly. Instead, one can use
the six (<emphasis>gasp</emphasis>) attributes used for specifying
dependencies as documented in <xref linkend="ssec-stdenv-dependencies"/>. We
"splice" together the run-time and build-time package sets with
<varname>callPackage</varname>, and then <varname>mkDerivation</varname> for
each of four attributes pulls the right derivation out. This splicing can be
skipped when not cross-compiling as the package sets are the same, but is a
bit slow for cross-compiling. Because of this, a best-of-both-worlds
solution is in the works with no splicing or explicit access of
<varname>buildPackages</varname> needed. For now, feel free to use either
method.
</para>
<note>
<para>
There is also a "backlink" <varname>targetPackages</varname>, yielding a
package set whose <varname>buildPackages</varname> is the current package
set. This is a hack, though, to accommodate compilers with lousy build
systems. Please do not use this unless you are absolutely sure you are
packaging such a compiler and there is no other way.
In Nixpkgs, these three platforms are defined as attribute sets under the names <literal>buildPlatform</literal>, <literal>hostPlatform</literal>, and <literal>targetPlatform</literal>.
All three are always defined as attributes in the standard environment, and at the top level. That means one can get at them just like a dependency in a function that is imported with <literal>callPackage</literal>:
<programlisting>{ stdenv, buildPlatform, hostPlatform, fooDep, barDep, .. }: ...buildPlatform...</programlisting>, or just off <varname>stdenv</varname>:
<programlisting>{ stdenv, fooDep, barDep, .. }: ...stdenv.buildPlatform...</programlisting>.
</para>
</note>
<variablelist>
<varlistentry>
<term><varname>buildPlatform</varname></term>
<listitem><para>
The "build platform" is the platform on which a package is built.
Once someone has a built package, or pre-built binary package, the build platform should not matter and be safe to ignore.
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>hostPlatform</varname></term>
<listitem><para>
The "host platform" is the platform on which a package is run.
This is the simplest platform to understand, but also the one with the worst name.
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>targetPlatform</varname></term>
<listitem>
<para>
The "target platform" is black sheep.
The other two intrinsically apply to all compiled software—or any build process with a notion of "build-time" followed by "run-time".
The target platform only applies to programming tools, and even then only is a good for for some of them.
Briefly, GCC, Binutils, GHC, and certain other tools are written in such a way such that a single build can only compile code for a single platform.
Thus, when building them, one must think ahead about which platforms they wish to use the tool to produce machine code for, and build binaries for each.
</para>
<para>
There is no fundamental need to think about the target ahead of time like this.
LLVM, for example, was designed from the beginning with cross-compilation in mind, and so a normal LLVM binary will support every architecture that LLVM supports.
If the tool supports modular or pluggable backends, one might imagine specifying a <emphasis>set</emphasis> of target platforms / backends one wishes to support, rather than a single one.
</para>
<para>
The biggest reason for mess, if there is one, is that many compilers have the bad habit a build process that builds the compiler and standard library/runtime together.
Then the specifying target platform is essential, because it determines the host platform of the standard library/runtime.
Nixpkgs tries to avoid this where possible too, but still, because the concept of a target platform is so ingrained now in Autoconf and other tools, it is best to support it as is.
Tools like LLVM that don't need up-front target platforms can safely ignore it like normal packages, and it will do no harm.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
The exact schema these fields follow is a bit ill-defined due to a long and convoluted evolution, but this is slowly being cleaned up.
You can see examples of ones used in practice in <literal>lib.systems.examples</literal>; note how they are not all very consistent.
For now, here are few fields can count on them containing:
</para>
<variablelist>
<varlistentry>
<term><varname>system</varname></term>
<listitem>
<para>
This is a two-component shorthand for the platform.
Examples of this would be "x86_64-darwin" and "i686-linux"; see <literal>lib.systems.doubles</literal> for more.
This format isn't very standard, but has built-in support in Nix, such as the <varname>builtins.currentSystem</varname> impure string.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>config</varname></term>
<listitem>
<para>
This is a 3- or 4- component shorthand for the platform.
Examples of this would be "x86_64-unknown-linux-gnu" and "aarch64-apple-darwin14".
This is a standard format called the "LLVM target triple", as they are pioneered by LLVM and traditionally just used for the <varname>targetPlatform</varname>.
This format is strictly more informative than the "Nix host double", as the previous format could analogously be termed.
This needs a better name than <varname>config</varname>!
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>parsed</varname></term>
<listitem>
<para>
This is a nix representation of a parsed LLVM target triple with white-listed components.
This can be specified directly, or actually parsed from the <varname>config</varname>.
[Technically, only one need be specified and the others can be inferred, though the precision of inference may not be very good.]
See <literal>lib.systems.parse</literal> for the exact representation.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>libc</varname></term>
<listitem>
<para>
This is a string identifying the standard C library used.
Valid identifiers include "glibc" for GNU libc, "libSystem" for Darwin's Libsystem, and "uclibc" for µClibc.
It should probably be refactored to use the module system, like <varname>parse</varname>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>is*</varname></term>
<listitem>
<para>
These predicates are defined in <literal>lib.systems.inspect</literal>, and slapped on every platform.
They are superior to the ones in <varname>stdenv</varname> as they force the user to be explicit about which platform they are inspecting.
Please use these instead of those.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>platform</varname></term>
<listitem>
<para>
This is, quite frankly, a dumping ground of ad-hoc settings (it's an attribute set).
See <literal>lib.systems.platforms</literal> for examples—there's hopefully one in there that will work verbatim for each platform that is working.
Please help us triage these flags and give them better homes!
</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section xml:id="sec-cross-cookbook">
<title>Cross packaging cookbook</title>
<para>
Some frequently encountered problems when packaging for cross-compilation
should be answered here. Ideally, the information above is exhaustive, so
this section cannot provide any new information, but it is ludicrous and
cruel to expect everyone to spend effort working through the interaction of
many features just to figure out the same answer to the same common problem.
Feel free to add to this list!
</para>
<qandaset>
<qandaentry xml:id="cross-qa-build-c-program-in-build-environment">
<question>
<para>
What if my package's build system needs to build a C program to be run
under the build environment?
</para>
</question>
<answer>
<para>
<programlisting>depsBuildBuild = [ buildPackages.stdenv.cc ];</programlisting>
Add it to your <function>mkDerivation</function> invocation.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="cross-qa-fails-to-find-ar">
<question>
<para>
My package fails to find <command>ar</command>.
</para>
</question>
<answer>
<para>
Many packages assume that an unprefixed <command>ar</command> is
available, but Nix doesn't provide one. It only provides a prefixed one,
just as it only does for all the other binutils programs. It may be
necessary to patch the package to fix the build system to use a prefixed
`ar`.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="cross-testsuite-runs-host-code">
<question>
<para>
My package's testsuite needs to run host platform code.
</para>
</question>
<answer>
<para>
<programlisting>doCheck = stdenv.hostPlatform != stdenv.buildPlatfrom;</programlisting>
Add it to your <function>mkDerivation</function> invocation.
</para>
</answer>
</qandaentry>
</qandaset>
<section>
<title>Specifying Dependencies</title>
<para>
As mentioned in the introduction to this chapter, one can think about a build time vs run time distinction whether cross-compiling or not.
In the case of cross-compilation, this corresponds with whether a derivation running on the native or foreign platform is produced.
An interesting thing to think about is how this corresponds with the three Autoconf platforms.
In the run-time case, the depending and depended-on package simply have matching build, host, and target platforms.
But in the build-time case, one can imagine "sliding" the platforms one over.
The depended-on package's host and target platforms (respectively) become the depending package's build and host platforms.
This is the most important guiding principle behind cross-compilation with Nixpkgs, and will be called the <wordasword>sliding window principle</wordasword>.
In this manner, given the 3 platforms for one package, we can determine the three platforms for all its transitive dependencies.
</para>
<para>
Some examples will probably make this clearer.
If a package is being built with a <literal>(build, host, target)</literal> platform triple of <literal>(foo, bar, bar)</literal>, then its build-time dependencies would have a triple of <literal>(foo, foo, bar)</literal>, and <emphasis>those packages'</emphasis> build-time dependencies would have triple of <literal>(foo, foo, foo)</literal>.
In other words, it should take two "rounds" of following build-time dependency edges before one reaches a fixed point where, by the sliding window principle, the platform triple no longer changes.
Indeed, this happens with cross compilation, where only rounds of native dependencies starting with the second necessarily coincide with native packages.
</para>
<note><para>
The depending package's target platform is unconstrained by the sliding window principle, which makes sense in that one can in principle build cross compilers targeting arbitrary platforms.
</para></note>
<para>
How does this work in practice? Nixpkgs is now structured so that build-time dependencies are taken from <varname>buildPackages</varname>, whereas run-time dependencies are taken from the top level attribute set.
For example, <varname>buildPackages.gcc</varname> should be used at build time, while <varname>gcc</varname> should be used at run time.
Now, for most of Nixpkgs's history, there was no <varname>buildPackages</varname>, and most packages have not been refactored to use it explicitly.
Instead, one can use the four attributes used for specifying dependencies as documented in <xref linkend="ssec-stdenv-attributes"/>.
We "splice" together the run-time and build-time package sets with <varname>callPackage</varname>, and then <varname>mkDerivation</varname> for each of four attributes pulls the right derivation out.
This splicing can be skipped when not cross compiling as the package sets are the same, but is a bit slow for cross compiling.
Because of this, a best-of-both-worlds solution is in the works with no splicing or explicit access of <varname>buildPackages</varname> needed.
For now, feel free to use either method.
</para>
<note><para>
There is also a "backlink" <varname>__targetPackages</varname>, yielding a package set whose <varname>buildPackages</varname> is the current package set.
This is a hack, though, to accommodate compilers with lousy build systems.
Please do not use this unless you are absolutely sure you are packaging such a compiler and there is no other way.
</para></note>
</section>
</section>
</section>
<!--============================================================-->
<section xml:id="sec-cross-usage">
<section xml:id="sec-cross-usage">
<title>Cross-building packages</title>
<note><para>
More information needs to moved from the old wiki, especially <link xlink:href="https://nixos.org/wiki/CrossCompiling" />, for this section.
</para></note>
<para>
Nixpkgs can be instantiated with <varname>localSystem</varname> alone, in
which case there is no cross-compiling and everything is built by and for
that system, or also with <varname>crossSystem</varname>, in which case
packages run on the latter, but all building happens on the former. Both
parameters take the same schema as the 3 (build, host, and target) platforms
defined in the previous section. As mentioned above,
<literal>lib.systems.examples</literal> has some platforms which are used as
arguments for these parameters in practice. You can use them
programmatically, or on the command line:
<programlisting>
nix-build &lt;nixpkgs&gt; --arg crossSystem '(import &lt;nixpkgs/lib&gt;).systems.examples.fooBarBaz' -A whatever</programlisting>
Nixpkgs can be instantiated with <varname>localSystem</varname> alone, in which case there is no cross compiling and everything is built by and for that system,
or also with <varname>crossSystem</varname>, in which case packages run on the latter, but all building happens on the former.
Both parameters take the same schema as the 3 (build, host, and target) platforms defined in the previous section.
As mentioned above, <literal>lib.systems.examples</literal> has some platforms which are used as arguments for these parameters in practice.
You can use them programmatically, or on the command line like <command>nix-build &lt;nixpkgs&gt; --arg crossSystem '(import &lt;nixpkgs/lib&gt;).systems.examples.fooBarBaz'</command>.
</para>
<para>
While one is free to pass both parameters in full, there's a lot of logic to fill in missing fields.
As discussed in the previous section, only one of <varname>system</varname>, <varname>config</varname>, and <varname>parsed</varname> is needed to infer the other two.
Additionally, <varname>libc</varname> will be inferred from <varname>parse</varname>.
Finally, <literal>localSystem.system</literal> is also <emphasis>impurely</emphasis> inferred based on the platform evaluation occurs.
This means it is often not necessary to pass <varname>localSystem</varname> at all, as in the command-line example in the previous paragraph.
</para>
<note>
<para>
Eventually we would like to make these platform examples an unnecessary
convenience so that
<programlisting>
nix-build &lt;nixpkgs&gt; --arg crossSystem '{ config = "&lt;arch&gt;-&lt;os&gt;-&lt;vendor&gt;-&lt;abi&gt;"; }' -A whatever</programlisting>
works in the vast majority of cases. The problem today is dependencies on
other sorts of configuration which aren't given proper defaults. We rely on
the examples to crudely to set those configuration parameters in some
vaguely sane manner on the users behalf. Issue
<link xlink:href="https://github.com/NixOS/nixpkgs/issues/34274">#34274</link>
tracks this inconvenience along with its root cause in crufty configuration
options.
</para>
<para>
Many sources (manual, wiki, etc) probably mention passing <varname>system</varname>, <varname>platform</varname>, along with the optional <varname>crossSystem</varname> to nixpkgs:
<literal>import &lt;nixpkgs&gt; { system = ..; platform = ..; crossSystem = ..; }</literal>.
Passing those two instead of <varname>localSystem</varname> is still supported for compatibility, but is discouraged.
Indeed, much of the inference we do for these parameters is motivated by compatibility as much as convenience.
</para>
</note>
<para>
While one is free to pass both parameters in full, there's a lot of logic to
fill in missing fields. As discussed in the previous section, only one of
<varname>system</varname>, <varname>config</varname>, and
<varname>parsed</varname> is needed to infer the other two. Additionally,
<varname>libc</varname> will be inferred from <varname>parse</varname>.
Finally, <literal>localSystem.system</literal> is also
<emphasis>impurely</emphasis> inferred based on the platform evaluation
occurs. This means it is often not necessary to pass
<varname>localSystem</varname> at all, as in the command-line example in the
previous paragraph.
One would think that <varname>localSystem</varname> and <varname>crossSystem</varname> overlap horribly with the three <varname>*Platforms</varname> (<varname>buildPlatform</varname>, <varname>hostPlatform,</varname> and <varname>targetPlatform</varname>; see <varname>stage.nix</varname> or the manual).
Actually, those identifiers are purposefully not used here to draw a subtle but important distinction:
While the granularity of having 3 platforms is necessary to properly *build* packages, it is overkill for specifying the user's *intent* when making a build plan or package set.
A simple "build vs deploy" dichotomy is adequate: the sliding window principle described in the previous section shows how to interpolate between the these two "end points" to get the 3 platform triple for each bootstrapping stage.
That means for any package a given package set, even those not bound on the top level but only reachable via dependencies or <varname>buildPackages</varname>, the three platforms will be defined as one of <varname>localSystem</varname> or <varname>crossSystem</varname>, with the former replacing the latter as one traverses build-time dependencies.
A last simple difference then is <varname>crossSystem</varname> should be null when one doesn't want to cross-compile, while the <varname>*Platform</varname>s are always non-null.
<varname>localSystem</varname> is always non-null.
</para>
</section>
<note>
<para>
Many sources (manual, wiki, etc) probably mention passing
<varname>system</varname>, <varname>platform</varname>, along with the
optional <varname>crossSystem</varname> to nixpkgs: <literal>import
&lt;nixpkgs&gt; { system = ..; platform = ..; crossSystem = ..;
}</literal>. Passing those two instead of <varname>localSystem</varname> is
still supported for compatibility, but is discouraged. Indeed, much of the
inference we do for these parameters is motivated by compatibility as much
as convenience.
</para>
</note>
<para>
One would think that <varname>localSystem</varname> and
<varname>crossSystem</varname> overlap horribly with the three
<varname>*Platforms</varname> (<varname>buildPlatform</varname>,
<varname>hostPlatform,</varname> and <varname>targetPlatform</varname>; see
<varname>stage.nix</varname> or the manual). Actually, those identifiers are
purposefully not used here to draw a subtle but important distinction: While
the granularity of having 3 platforms is necessary to properly *build*
packages, it is overkill for specifying the user's *intent* when making a
build plan or package set. A simple "build vs deploy" dichotomy is adequate:
the sliding window principle described in the previous section shows how to
interpolate between the these two "end points" to get the 3 platform triple
for each bootstrapping stage. That means for any package a given package set,
even those not bound on the top level but only reachable via dependencies or
<varname>buildPackages</varname>, the three platforms will be defined as one
of <varname>localSystem</varname> or <varname>crossSystem</varname>, with the
former replacing the latter as one traverses build-time dependencies. A last
simple difference is that <varname>crossSystem</varname> should be null when
one doesn't want to cross-compile, while the <varname>*Platform</varname>s
are always non-null. <varname>localSystem</varname> is always non-null.
</para>
</section>
<!--============================================================-->
<section xml:id="sec-cross-infra">
<section xml:id="sec-cross-infra">
<title>Cross-compilation infrastructure</title>
<para>
To be written.
</para>
<note>
<para>
If one explores Nixpkgs, they will see derivations with names like
<literal>gccCross</literal>. Such <literal>*Cross</literal> derivations is a
holdover from before we properly distinguished between the host and target
platforms—the derivation with "Cross" in the name covered the <literal>build
= host != target</literal> case, while the other covered the <literal>host =
target</literal>, with build platform the same or not based on whether one
was using its <literal>.nativeDrv</literal> or <literal>.crossDrv</literal>.
<para>To be written.</para>
<note><para>
If one explores nixpkgs, they will see derivations with names like <literal>gccCross</literal>.
Such <literal>*Cross</literal> derivations is a holdover from before we properly distinguished between the host and target platforms
—the derivation with "Cross" in the name covered the <literal>build = host != target</literal> case, while the other covered the <literal>host = target</literal>, with build platform the same or not based on whether one was using its <literal>.nativeDrv</literal> or <literal>.crossDrv</literal>.
This ugliness will disappear soon.
</para>
</note>
</section>
</para></note>
</section>
</chapter>

View File

@@ -1,51 +1,113 @@
{ pkgs ? (import ./.. { }), nixpkgs ? { }}:
let
pkgs = import ./.. { };
lib = pkgs.lib;
locationsXml = import ./lib-function-locations.nix { inherit pkgs nixpkgs; };
functionDocs = import ./lib-function-docs.nix { inherit locationsXml pkgs; };
in pkgs.stdenv.mkDerivation {
sources = lib.sourceFilesBySuffices ./. [".xml"];
sources-langs = ./languages-frameworks;
in
pkgs.stdenv.mkDerivation {
name = "nixpkgs-manual";
buildInputs = with pkgs; [ pandoc libxml2 libxslt zip jing xmlformat ];
src = ./.;
buildInputs = with pkgs; [ pandoc libxml2 libxslt zip ];
# 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 = ''
rm -rf ./functions/library/locations.xml
ln -s ${locationsXml} ./functions/library/locations.xml
ln -s ${functionDocs} ./functions/library/generated
echo ${lib.version} > .version
xsltFlags = ''
--param section.autolabel 1
--param section.label.includes.component.label 1
--param html.stylesheet 'style.css'
--param xref.with.number.and.title 1
--param toc.section.depth 3
--param admon.style '''
--param callout.graphics.extension '.gif'
'';
installPhase = ''
dest="$out/share/doc/nixpkgs"
mkdir -p "$(dirname "$dest")"
mv out/html "$dest"
mv "$dest/index.html" "$dest/manual.html"
mv out/epub/manual.epub "$dest/nixpkgs-manual.epub"
buildCommand = let toDocbook = { useChapters ? false, inputFile, outputFile }:
let
extraHeader = ''xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" '';
in ''
{
pandoc '${inputFile}' -w docbook ${lib.optionalString useChapters "--top-level-division=chapter"} \
--smart \
| sed -e 's|<ulink url=|<link xlink:href=|' \
-e 's|</ulink>|</link>|' \
-e 's|<sect. id=|<section xml:id=|' \
-e 's|</sect[0-9]>|</section>|' \
-e '1s| id=| xml:id=|' \
-e '1s|\(<[^ ]* \)|\1${extraHeader}|'
} > '${outputFile}'
'';
in
mkdir -p $out/nix-support/
echo "doc manual $dest manual.html" >> $out/nix-support/hydra-build-products
echo "doc manual $dest nixpkgs-manual.epub" >> $out/nix-support/hydra-build-products
''
ln -s '${sources}/'*.xml .
mkdir ./languages-frameworks
cp -s '${sources-langs}'/* ./languages-frameworks
''
+ toDocbook {
inputFile = ./introduction.md;
outputFile = "introduction.xml";
useChapters = true;
}
+ toDocbook {
inputFile = ./languages-frameworks/python.md;
outputFile = "./languages-frameworks/python.xml";
}
+ toDocbook {
inputFile = ./languages-frameworks/haskell.md;
outputFile = "./languages-frameworks/haskell.xml";
}
+ toDocbook {
inputFile = ../pkgs/development/idris-modules/README.md;
outputFile = "languages-frameworks/idris.xml";
}
+ toDocbook {
inputFile = ../pkgs/development/node-packages/README.md;
outputFile = "languages-frameworks/node.xml";
}
+ toDocbook {
inputFile = ../pkgs/development/r-modules/README.md;
outputFile = "languages-frameworks/r.xml";
}
+ toDocbook {
inputFile = ./languages-frameworks/rust.md;
outputFile = "./languages-frameworks/rust.xml";
}
+ toDocbook {
inputFile = ./languages-frameworks/vim.md;
outputFile = "./languages-frameworks/vim.xml";
}
+ ''
echo ${lib.nixpkgsVersion} > .version
# validate against relaxng schema
xmllint --nonet --xinclude --noxincludenode manual.xml --output manual-full.xml
${pkgs.jing}/bin/jing ${pkgs.docbook5}/xml/rng/docbook/docbook.rng manual-full.xml
dst=$out/share/doc/nixpkgs
mkdir -p $dst
xsltproc $xsltFlags --nonet --xinclude \
--output $dst/manual.html \
${pkgs.docbook5_xsl}/xml/xsl/docbook/xhtml/docbook.xsl \
./manual.xml
cp ${./style.css} $dst/style.css
mkdir -p $dst/images/callouts
cp "${pkgs.docbook5_xsl}/xml/xsl/docbook/images/callouts/"*.gif $dst/images/callouts/
mkdir -p $out/nix-support
echo "doc manual $dst manual.html" >> $out/nix-support/hydra-build-products
xsltproc $xsltFlags --nonet --xinclude \
--output $dst/epub/ \
${pkgs.docbook5_xsl}/xml/xsl/docbook/epub/docbook.xsl \
./manual.xml
cp -r $dst/images $dst/epub/OEBPS
echo "application/epub+zip" > mimetype
manual="$dst/nixpkgs-manual.epub"
zip -0Xq "$manual" mimetype
cd $dst/epub && zip -Xr9D "$manual" *
rm -rf $dst/epub
'';
}

View File

@@ -1,22 +1,706 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
xml:id="chap-functions">
<title>Functions reference</title>
<para>
The nixpkgs repository has several utility functions to manipulate Nix
expressions.
</para>
<xi:include href="functions/library.xml" />
<xi:include href="functions/overrides.xml" />
<xi:include href="functions/generators.xml" />
<xi:include href="functions/debug.xml" />
<xi:include href="functions/fetchers.xml" />
<xi:include href="functions/trivial-builders.xml" />
<xi:include href="functions/fhs-environments.xml" />
<xi:include href="functions/shell.xml" />
<xi:include href="functions/dockertools.xml" />
<xi:include href="functions/appimagetools.xml" />
<xi:include href="functions/prefer-remote-fetch.xml" />
<xi:include href="functions/nix-gitignore.xml" />
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-functions">
<title>Functions reference</title>
<para>
The nixpkgs repository has several utility functions to manipulate Nix expressions.
</para>
<section xml:id="sec-overrides">
<title>Overriding</title>
<para>
Sometimes one wants to override parts of
<literal>nixpkgs</literal>, e.g. derivation attributes, the results of
derivations or even the whole package set.
</para>
<section xml:id="sec-pkg-override">
<title>&lt;pkg&gt;.override</title>
<para>
The function <varname>override</varname> is usually available for all the
derivations in the nixpkgs expression (<varname>pkgs</varname>).
</para>
<para>
It is used to override the arguments passed to a function.
</para>
<para>
Example usages:
<programlisting>pkgs.foo.override { arg1 = val1; arg2 = val2; ... }</programlisting>
<programlisting>import pkgs.path { overlays = [ (self: super: {
foo = super.foo.override { barSupport = true ; };
})]};</programlisting>
<programlisting>mypkg = pkgs.callPackage ./mypkg.nix {
mydep = pkgs.mydep.override { ... };
}</programlisting>
</para>
<para>
In the first example, <varname>pkgs.foo</varname> is the result of a function call
with some default arguments, usually a derivation.
Using <varname>pkgs.foo.override</varname> will call the same function with
the given new arguments.
</para>
</section>
<section xml:id="sec-pkg-overrideAttrs">
<title>&lt;pkg&gt;.overrideAttrs</title>
<para>
The function <varname>overrideAttrs</varname> allows overriding the
attribute set passed to a <varname>stdenv.mkDerivation</varname> call,
producing a new derivation based on the original one.
This function is available on all derivations produced by the
<varname>stdenv.mkDerivation</varname> function, which is most packages
in the nixpkgs expression <varname>pkgs</varname>.
</para>
<para>
Example usage:
<programlisting>helloWithDebug = pkgs.hello.overrideAttrs (oldAttrs: rec {
separateDebugInfo = true;
});</programlisting>
</para>
<para>
In the above example, the <varname>separateDebugInfo</varname> attribute is
overridden to be true, thus building debug info for
<varname>helloWithDebug</varname>, while all other attributes will be
retained from the original <varname>hello</varname> package.
</para>
<para>
The argument <varname>oldAttrs</varname> is conventionally used to refer to
the attr set originally passed to <varname>stdenv.mkDerivation</varname>.
</para>
<note>
<para>
Note that <varname>separateDebugInfo</varname> is processed only by the
<varname>stdenv.mkDerivation</varname> function, not the generated, raw
Nix derivation. Thus, using <varname>overrideDerivation</varname> will
not work in this case, as it overrides only the attributes of the final
derivation. It is for this reason that <varname>overrideAttrs</varname>
should be preferred in (almost) all cases to
<varname>overrideDerivation</varname>, i.e. to allow using
<varname>sdenv.mkDerivation</varname> to process input arguments, as well
as the fact that it is easier to use (you can use the same attribute
names you see in your Nix code, instead of the ones generated (e.g.
<varname>buildInputs</varname> vs <varname>nativeBuildInputs</varname>,
and involves less typing.
</para>
</note>
</section>
<section xml:id="sec-pkg-overrideDerivation">
<title>&lt;pkg&gt;.overrideDerivation</title>
<warning>
<para>You should prefer <varname>overrideAttrs</varname> in almost all
cases, see its documentation for the reasons why.
<varname>overrideDerivation</varname> is not deprecated and will continue
to work, but is less nice to use and does not have as many abilities as
<varname>overrideAttrs</varname>.
</para>
</warning>
<warning>
<para>Do not use this function in Nixpkgs as it evaluates a Derivation
before modifying it, which breaks package abstraction and removes
error-checking of function arguments. In addition, this
evaluation-per-function application incurs a performance penalty,
which can become a problem if many overrides are used.
It is only intended for ad-hoc customisation, such as in
<filename>~/.config/nixpkgs/config.nix</filename>.
</para>
</warning>
<para>
The function <varname>overrideDerivation</varname> creates a new derivation
based on an existing one by overriding the original's attributes with
the attribute set produced by the specified function.
This function is available on all
derivations defined using the <varname>makeOverridable</varname> function.
Most standard derivation-producing functions, such as
<varname>stdenv.mkDerivation</varname>, are defined using this
function, which means most packages in the nixpkgs expression,
<varname>pkgs</varname>, have this function.
</para>
<para>
Example usage:
<programlisting>mySed = pkgs.gnused.overrideDerivation (oldAttrs: {
name = "sed-4.2.2-pre";
src = fetchurl {
url = ftp://alpha.gnu.org/gnu/sed/sed-4.2.2-pre.tar.bz2;
sha256 = "11nq06d131y4wmf3drm0yk502d2xc6n5qy82cg88rb9nqd2lj41k";
};
patches = [];
});</programlisting>
</para>
<para>
In the above example, the <varname>name</varname>, <varname>src</varname>,
and <varname>patches</varname> of the derivation will be overridden, while
all other attributes will be retained from the original derivation.
</para>
<para>
The argument <varname>oldAttrs</varname> is used to refer to the attribute set of
the original derivation.
</para>
<note>
<para>
A package's attributes are evaluated *before* being modified by
the <varname>overrideDerivation</varname> function.
For example, the <varname>name</varname> attribute reference
in <varname>url = "mirror://gnu/hello/${name}.tar.gz";</varname>
is filled-in *before* the <varname>overrideDerivation</varname> function
modifies the attribute set. This means that overriding the
<varname>name</varname> attribute, in this example, *will not* change the
value of the <varname>url</varname> attribute. Instead, we need to override
both the <varname>name</varname> *and* <varname>url</varname> attributes.
</para>
</note>
</section>
<section xml:id="sec-lib-makeOverridable">
<title>lib.makeOverridable</title>
<para>
The function <varname>lib.makeOverridable</varname> is used to make the result
of a function easily customizable. This utility only makes sense for functions
that accept an argument set and return an attribute set.
</para>
<para>
Example usage:
<programlisting>f = { a, b }: { result = a+b; }
c = lib.makeOverridable f { a = 1; b = 2; }</programlisting>
</para>
<para>
The variable <varname>c</varname> is the value of the <varname>f</varname> function
applied with some default arguments. Hence the value of <varname>c.result</varname>
is <literal>3</literal>, in this example.
</para>
<para>
The variable <varname>c</varname> however also has some additional functions, like
<link linkend="sec-pkg-override">c.override</link> which can be used to
override the default arguments. In this example the value of
<varname>(c.override { a = 4; }).result</varname> is 6.
</para>
</section>
</section>
<section xml:id="sec-generators">
<title>Generators</title>
<para>
Generators are functions that create file formats from nix
data structures, e.g. for configuration files.
There are generators available for: <literal>INI</literal>,
<literal>JSON</literal> and <literal>YAML</literal>
</para>
<para>
All generators follow a similar call interface: <code>generatorName
configFunctions data</code>, where <literal>configFunctions</literal> is a
set of user-defined functions that format variable parts of the content.
They each have common defaults, so often they do not need to be set
manually. An example is <code>mkSectionName ? (name: libStr.escape [ "[" "]"
] name)</code> from the <literal>INI</literal> generator. It gets the name
of a section and returns a sanitized name. The default
<literal>mkSectionName</literal> escapes <literal>[</literal> and
<literal>]</literal> with a backslash.
</para>
<note><para>Nix store paths can be converted to strings by enclosing a
derivation attribute like so: <code>"${drv}"</code>.</para></note>
<para>
Detailed documentation for each generator can be found in
<literal>lib/generators.nix</literal>.
</para>
</section>
<section xml:id="sec-fhs-environments">
<title>buildFHSUserEnv</title>
<para>
<function>buildFHSUserEnv</function> provides a way to build and run
FHS-compatible lightweight sandboxes. It creates an isolated root with
bound <filename>/nix/store</filename>, so its footprint in terms of disk
space needed is quite small. This allows one to run software which is hard or
unfeasible to patch for NixOS -- 3rd-party source trees with FHS assumptions,
games distributed as tarballs, software with integrity checking and/or external
self-updated binaries. It uses Linux namespaces feature to create
temporary lightweight environments which are destroyed after all child
processes exit, without root user rights requirement. Accepted arguments are:
</para>
<variablelist>
<varlistentry>
<term><literal>name</literal></term>
<listitem><para>Environment name.</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>targetPkgs</literal></term>
<listitem><para>Packages to be installed for the main host's architecture
(i.e. x86_64 on x86_64 installations). Along with libraries binaries are also
installed.</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>multiPkgs</literal></term>
<listitem><para>Packages to be installed for all architectures supported by
a host (i.e. i686 and x86_64 on x86_64 installations). Only libraries are
installed by default.</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>extraBuildCommands</literal></term>
<listitem><para>Additional commands to be executed for finalizing the
directory structure.</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>extraBuildCommandsMulti</literal></term>
<listitem><para>Like <literal>extraBuildCommands</literal>, but
executed only on multilib architectures.</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>extraOutputsToInstall</literal></term>
<listitem><para>Additional derivation outputs to be linked for both
target and multi-architecture packages.</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>extraInstallCommands</literal></term>
<listitem><para>Additional commands to be executed for finalizing the
derivation with runner script.</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>runScript</literal></term>
<listitem><para>A command that would be executed inside the sandbox and
passed all the command line arguments. It defaults to
<literal>bash</literal>.</para></listitem>
</varlistentry>
</variablelist>
<para>
One can create a simple environment using a <literal>shell.nix</literal>
like that:
</para>
<programlisting><![CDATA[
{ pkgs ? import <nixpkgs> {} }:
(pkgs.buildFHSUserEnv {
name = "simple-x11-env";
targetPkgs = pkgs: (with pkgs;
[ udev
alsaLib
]) ++ (with pkgs.xorg;
[ libX11
libXcursor
libXrandr
]);
multiPkgs = pkgs: (with pkgs;
[ udev
alsaLib
]);
runScript = "bash";
}).env
]]></programlisting>
<para>
Running <literal>nix-shell</literal> would then drop you into a shell with
these libraries and binaries available. You can use this to run
closed-source applications which expect FHS structure without hassles:
simply change <literal>runScript</literal> to the application path,
e.g. <filename>./bin/start.sh</filename> -- relative paths are supported.
</para>
</section>
<section xml:id="sec-pkgs-dockerTools">
<title>pkgs.dockerTools</title>
<para>
<varname>pkgs.dockerTools</varname> is a set of functions for creating and
manipulating Docker images according to the
<link xlink:href="https://github.com/moby/moby/blob/master/image/spec/v1.2.md#docker-image-specification-v120">
Docker Image Specification v1.2.0
</link>. Docker itself is not used to perform any of the operations done by these
functions.
</para>
<warning>
<para>
The <varname>dockerTools</varname> API is unstable and may be subject to
backwards-incompatible changes in the future.
</para>
</warning>
<section xml:id="ssec-pkgs-dockerTools-buildImage">
<title>buildImage</title>
<para>
This function is analogous to the <command>docker build</command> command,
in that can used to build a Docker-compatible repository tarball containing
a single image with one or multiple layers. As such, the result
is suitable for being loaded in Docker with <command>docker load</command>.
</para>
<para>
The parameters of <varname>buildImage</varname> with relative example values are
described below:
</para>
<example xml:id='ex-dockerTools-buildImage'><title>Docker build</title>
<programlisting>
buildImage {
name = "redis"; <co xml:id='ex-dockerTools-buildImage-1' />
tag = "latest"; <co xml:id='ex-dockerTools-buildImage-2' />
fromImage = someBaseImage; <co xml:id='ex-dockerTools-buildImage-3' />
fromImageName = null; <co xml:id='ex-dockerTools-buildImage-4' />
fromImageTag = "latest"; <co xml:id='ex-dockerTools-buildImage-5' />
contents = pkgs.redis; <co xml:id='ex-dockerTools-buildImage-6' />
runAsRoot = '' <co xml:id='ex-dockerTools-buildImage-runAsRoot' />
#!${stdenv.shell}
mkdir -p /data
'';
config = { <co xml:id='ex-dockerTools-buildImage-8' />
Cmd = [ "/bin/redis-server" ];
WorkingDir = "/data";
Volumes = {
"/data" = {};
};
};
}
</programlisting>
</example>
<para>The above example will build a Docker image <literal>redis/latest</literal>
from the given base image. Loading and running this image in Docker results in
<literal>redis-server</literal> being started automatically.
</para>
<calloutlist>
<callout arearefs='ex-dockerTools-buildImage-1'>
<para>
<varname>name</varname> specifies the name of the resulting image.
This is the only required argument for <varname>buildImage</varname>.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-2'>
<para>
<varname>tag</varname> specifies the tag of the resulting image.
By default it's <literal>latest</literal>.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-3'>
<para>
<varname>fromImage</varname> is the repository tarball containing the base image.
It must be a valid Docker image, such as exported by <command>docker save</command>.
By default it's <literal>null</literal>, which can be seen as equivalent
to <literal>FROM scratch</literal> of a <filename>Dockerfile</filename>.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-4'>
<para>
<varname>fromImageName</varname> can be used to further specify
the base image within the repository, in case it contains multiple images.
By default it's <literal>null</literal>, in which case
<varname>buildImage</varname> will peek the first image available
in the repository.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-5'>
<para>
<varname>fromImageTag</varname> can be used to further specify the tag
of the base image within the repository, in case an image contains multiple tags.
By default it's <literal>null</literal>, in which case
<varname>buildImage</varname> will peek the first tag available for the base image.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-6'>
<para>
<varname>contents</varname> is a derivation that will be copied in the new
layer of the resulting image. This can be similarly seen as
<command>ADD contents/ /</command> in a <filename>Dockerfile</filename>.
By default it's <literal>null</literal>.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-runAsRoot'>
<para>
<varname>runAsRoot</varname> is a bash script that will run as root
in an environment that overlays the existing layers of the base image with
the new resulting layer, including the previously copied
<varname>contents</varname> derivation.
This can be similarly seen as
<command>RUN ...</command> in a <filename>Dockerfile</filename>.
<note>
<para>
Using this parameter requires the <literal>kvm</literal>
device to be available.
</para>
</note>
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-8'>
<para>
<varname>config</varname> is used to specify the configuration of the
containers that will be started off the built image in Docker.
The available options are listed in the
<link xlink:href="https://github.com/moby/moby/blob/master/image/spec/v1.2.md#image-json-field-descriptions">
Docker Image Specification v1.2.0
</link>.
</para>
</callout>
</calloutlist>
<para>
After the new layer has been created, its closure
(to which <varname>contents</varname>, <varname>config</varname> and
<varname>runAsRoot</varname> contribute) will be copied in the layer itself.
Only new dependencies that are not already in the existing layers will be copied.
</para>
<para>
At the end of the process, only one new single layer will be produced and
added to the resulting image.
</para>
<para>
The resulting repository will only list the single image
<varname>image/tag</varname>. In the case of <xref linkend='ex-dockerTools-buildImage'/>
it would be <varname>redis/latest</varname>.
</para>
<para>
It is possible to inspect the arguments with which an image was built
using its <varname>buildArgs</varname> attribute.
</para>
<note>
<para>
If you see errors similar to <literal>getProtocolByName: does not exist (no such protocol name: tcp)</literal>
you may need to add <literal>pkgs.iana-etc</literal> to <varname>contents</varname>.
</para>
</note>
<note>
<para>
If you see errors similar to <literal>Error_Protocol ("certificate has unknown CA",True,UnknownCa)</literal>
you may need to add <literal>pkgs.cacert</literal> to <varname>contents</varname>.
</para>
</note>
</section>
<section xml:id="ssec-pkgs-dockerTools-fetchFromRegistry">
<title>pullImage</title>
<para>
This function is analogous to the <command>docker pull</command> command,
in that can be used to fetch a Docker image from a Docker registry.
Currently only registry <literal>v1</literal> is supported.
By default <link xlink:href="https://hub.docker.com/">Docker Hub</link>
is used to pull images.
</para>
<para>
Its parameters are described in the example below:
</para>
<example xml:id='ex-dockerTools-pullImage'><title>Docker pull</title>
<programlisting>
pullImage {
imageName = "debian"; <co xml:id='ex-dockerTools-pullImage-1' />
imageTag = "jessie"; <co xml:id='ex-dockerTools-pullImage-2' />
imageId = null; <co xml:id='ex-dockerTools-pullImage-3' />
sha256 = "1bhw5hkz6chrnrih0ymjbmn69hyfriza2lr550xyvpdrnbzr4gk2"; <co xml:id='ex-dockerTools-pullImage-4' />
indexUrl = "https://index.docker.io"; <co xml:id='ex-dockerTools-pullImage-5' />
registryVersion = "v1";
}
</programlisting>
</example>
<calloutlist>
<callout arearefs='ex-dockerTools-pullImage-1'>
<para>
<varname>imageName</varname> specifies the name of the image to be downloaded,
which can also include the registry namespace (e.g. <literal>library/debian</literal>).
This argument is required.
</para>
</callout>
<callout arearefs='ex-dockerTools-pullImage-2'>
<para>
<varname>imageTag</varname> specifies the tag of the image to be downloaded.
By default it's <literal>latest</literal>.
</para>
</callout>
<callout arearefs='ex-dockerTools-pullImage-3'>
<para>
<varname>imageId</varname>, if specified this exact image will be fetched, instead
of <varname>imageName/imageTag</varname>. However, the resulting repository
will still be named <varname>imageName/imageTag</varname>.
By default it's <literal>null</literal>.
</para>
</callout>
<callout arearefs='ex-dockerTools-pullImage-4'>
<para>
<varname>sha256</varname> is the checksum of the whole fetched image.
This argument is required.
</para>
<note>
<para>The checksum is computed on the unpacked directory, not on the final tarball.</para>
</note>
</callout>
<callout arearefs='ex-dockerTools-pullImage-5'>
<para>
In the above example the default values are shown for the variables
<varname>indexUrl</varname> and <varname>registryVersion</varname>.
Hence by default the Docker.io registry is used to pull the images.
</para>
</callout>
</calloutlist>
</section>
<section xml:id="ssec-pkgs-dockerTools-exportImage">
<title>exportImage</title>
<para>
This function is analogous to the <command>docker export</command> command,
in that can used to flatten a Docker image that contains multiple layers.
It is in fact the result of the merge of all the layers of the image.
As such, the result is suitable for being imported in Docker
with <command>docker import</command>.
</para>
<note>
<para>
Using this function requires the <literal>kvm</literal>
device to be available.
</para>
</note>
<para>
The parameters of <varname>exportImage</varname> are the following:
</para>
<example xml:id='ex-dockerTools-exportImage'><title>Docker export</title>
<programlisting>
exportImage {
fromImage = someLayeredImage;
fromImageName = null;
fromImageTag = null;
name = someLayeredImage.name;
}
</programlisting>
</example>
<para>
The parameters relative to the base image have the same synopsis as
described in <xref linkend='ssec-pkgs-dockerTools-buildImage'/>, except that
<varname>fromImage</varname> is the only required argument in this case.
</para>
<para>
The <varname>name</varname> argument is the name of the derivation output,
which defaults to <varname>fromImage.name</varname>.
</para>
</section>
<section xml:id="ssec-pkgs-dockerTools-shadowSetup">
<title>shadowSetup</title>
<para>
This constant string is a helper for setting up the base files for managing
users and groups, only if such files don't exist already.
It is suitable for being used in a
<varname>runAsRoot</varname> <xref linkend='ex-dockerTools-buildImage-runAsRoot'/> script for cases like
in the example below:
</para>
<example xml:id='ex-dockerTools-shadowSetup'><title>Shadow base files</title>
<programlisting>
buildImage {
name = "shadow-basic";
runAsRoot = ''
#!${stdenv.shell}
${shadowSetup}
groupadd -r redis
useradd -r -g redis redis
mkdir /data
chown redis:redis /data
'';
}
</programlisting>
</example>
<para>
Creating base files like <literal>/etc/passwd</literal> or
<literal>/etc/login.defs</literal> are necessary for shadow-utils to
manipulate users and groups.
</para>
</section>
</section>
</chapter>

View File

@@ -1,121 +0,0 @@
<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-appimageTools">
<title>pkgs.appimageTools</title>
<para>
<varname>pkgs.appimageTools</varname> is a set of functions for extracting and wrapping
<link xlink:href="https://appimage.org/">AppImage</link> files.
They are meant to be used if traditional packaging from source is infeasible, or it would take too long.
To quickly run an AppImage file, <literal>pkgs.appimage-run</literal> can be used as well.
</para>
<warning>
<para>
The <varname>appimageTools</varname> API is unstable and may be subject to
backwards-incompatible changes in the future.
</para>
</warning>
<section xml:id="ssec-pkgs-appimageTools-formats">
<title>AppImage formats</title>
<para>
There are different formats for AppImages, see
<link xlink:href="https://github.com/AppImage/AppImageSpec/blob/74ad9ca2f94bf864a4a0dac1f369dd4f00bd1c28/draft.md#image-format">the specification</link> for details.
</para>
<itemizedlist>
<listitem>
<para>
Type 1 images are ISO 9660 files that are also ELF executables.
</para>
</listitem>
<listitem>
<para>
Type 2 images are ELF executables with an appended filesystem.
</para>
</listitem>
</itemizedlist>
<para>
They can be told apart with <command>file -k</command>:
</para>
<screen>
<prompt>$ </prompt>file -k type1.AppImage
type1.AppImage: ELF 64-bit LSB executable, x86-64, version 1 (SYSV) ISO 9660 CD-ROM filesystem data 'AppImage' (Lepton 3.x), scale 0-0,
spot sensor temperature 0.000000, unit celsius, color scheme 0, calibration: offset 0.000000, slope 0.000000, dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=d629f6099d2344ad82818172add1d38c5e11bc6d, stripped\012- data
<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
</screen>
<para>
Note how the type 1 AppImage is described as an <literal>ISO 9660 CD-ROM filesystem</literal>, and the type 2 AppImage is not.
</para>
</section>
<section xml:id="ssec-pkgs-appimageTools-wrapping">
<title>Wrapping</title>
<para>
Depending on the type of AppImage you're wrapping, you'll have to use
<varname>wrapType1</varname> or <varname>wrapType2</varname>.
</para>
<programlisting>
appimageTools.wrapType2 { # or wrapType1
name = "patchwork"; <co xml:id='ex-appimageTools-wrapping-1' />
src = fetchurl { <co xml:id='ex-appimageTools-wrapping-2' />
url = https://github.com/ssbc/patchwork/releases/download/v3.11.4/Patchwork-3.11.4-linux-x86_64.AppImage;
sha256 = "1blsprpkvm0ws9b96gb36f0rbf8f5jgmw4x6dsb1kswr4ysf591s";
};
extraPkgs = pkgs: with pkgs; [ ]; <co xml:id='ex-appimageTools-wrapping-3' />
}</programlisting>
<calloutlist>
<callout arearefs='ex-appimageTools-wrapping-1'>
<para>
<varname>name</varname> specifies the name of the resulting image.
</para>
</callout>
<callout arearefs='ex-appimageTools-wrapping-2'>
<para>
<varname>src</varname> specifies the AppImage file to extract.
</para>
</callout>
<callout arearefs='ex-appimageTools-wrapping-2'>
<para>
<varname>extraPkgs</varname> allows you to pass a function to include additional packages
inside the FHS environment your AppImage is going to run in.
There are a few ways to learn which dependencies an application needs:
<itemizedlist>
<listitem>
<para>
Looking through the extracted AppImage files, reading its scripts and running <command>patchelf</command> and <command>ldd</command> on its executables.
This can also be done in <command>appimage-run</command>, by setting <command>APPIMAGE_DEBUG_EXEC=bash</command>.
</para>
</listitem>
<listitem>
<para>
Running <command>strace -vfefile</command> on the wrapped executable, looking for libraries that can't be found.
</para>
</listitem>
</itemizedlist>
</para>
</callout>
</calloutlist>
</section>
</section>

View File

@@ -1,21 +0,0 @@
<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-debug">
<title>Debugging Nix Expressions</title>
<para>
Nix is a unityped, dynamic language, this means every value can potentially
appear anywhere. Since it is also non-strict, evaluation order and what
ultimately is evaluated might surprise you. Therefore it is important to be
able to debug nix expressions.
</para>
<para>
In the <literal>lib/debug.nix</literal> file you will find a number of
functions that help (pretty-)printing values while evaluation is runnnig. You
can even specify how deep these values should be printed recursively, and
transform them on the fly. Please consult the docstrings in
<literal>lib/debug.nix</literal> for usage information.
</para>
</section>

View File

@@ -1,564 +0,0 @@
<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-dockerTools">
<title>pkgs.dockerTools</title>
<para>
<varname>pkgs.dockerTools</varname> is a set of functions for creating and
manipulating Docker images according to the
<link xlink:href="https://github.com/moby/moby/blob/master/image/spec/v1.2.md#docker-image-specification-v120">
Docker Image Specification v1.2.0 </link>. Docker itself is not used to
perform any of the operations done by these functions.
</para>
<warning>
<para>
The <varname>dockerTools</varname> API is unstable and may be subject to
backwards-incompatible changes in the future.
</para>
</warning>
<section xml:id="ssec-pkgs-dockerTools-buildImage">
<title>buildImage</title>
<para>
This function is analogous to the <command>docker build</command> command,
in that it can be used to build a Docker-compatible repository tarball containing
a single image with one or multiple layers. As such, the result is suitable
for being loaded in Docker with <command>docker load</command>.
</para>
<para>
The parameters of <varname>buildImage</varname> with relative example values
are described below:
</para>
<example xml:id='ex-dockerTools-buildImage'>
<title>Docker build</title>
<programlisting>
buildImage {
name = "redis"; <co xml:id='ex-dockerTools-buildImage-1' />
tag = "latest"; <co xml:id='ex-dockerTools-buildImage-2' />
fromImage = someBaseImage; <co xml:id='ex-dockerTools-buildImage-3' />
fromImageName = null; <co xml:id='ex-dockerTools-buildImage-4' />
fromImageTag = "latest"; <co xml:id='ex-dockerTools-buildImage-5' />
contents = pkgs.redis; <co xml:id='ex-dockerTools-buildImage-6' />
runAsRoot = '' <co xml:id='ex-dockerTools-buildImage-runAsRoot' />
#!${stdenv.shell}
mkdir -p /data
'';
config = { <co xml:id='ex-dockerTools-buildImage-8' />
Cmd = [ "/bin/redis-server" ];
WorkingDir = "/data";
Volumes = {
"/data" = {};
};
};
}
</programlisting>
</example>
<para>
The above example will build a Docker image <literal>redis/latest</literal>
from the given base image. Loading and running this image in Docker results
in <literal>redis-server</literal> being started automatically.
</para>
<calloutlist>
<callout arearefs='ex-dockerTools-buildImage-1'>
<para>
<varname>name</varname> specifies the name of the resulting image. This is
the only required argument for <varname>buildImage</varname>.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-2'>
<para>
<varname>tag</varname> specifies the tag of the resulting image. By
default it's <literal>null</literal>, which indicates that the nix output
hash will be used as tag.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-3'>
<para>
<varname>fromImage</varname> is the repository tarball containing the base
image. It must be a valid Docker image, such as exported by
<command>docker save</command>. By default it's <literal>null</literal>,
which can be seen as equivalent to <literal>FROM scratch</literal> of a
<filename>Dockerfile</filename>.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-4'>
<para>
<varname>fromImageName</varname> can be used to further specify the base
image within the repository, in case it contains multiple images. By
default it's <literal>null</literal>, in which case
<varname>buildImage</varname> will peek the first image available in the
repository.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-5'>
<para>
<varname>fromImageTag</varname> can be used to further specify the tag of
the base image within the repository, in case an image contains multiple
tags. By default it's <literal>null</literal>, in which case
<varname>buildImage</varname> will peek the first tag available for the
base image.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-6'>
<para>
<varname>contents</varname> is a derivation that will be copied in the new
layer of the resulting image. This can be similarly seen as <command>ADD
contents/ /</command> in a <filename>Dockerfile</filename>. By default
it's <literal>null</literal>.
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-runAsRoot'>
<para>
<varname>runAsRoot</varname> is a bash script that will run as root in an
environment that overlays the existing layers of the base image with the
new resulting layer, including the previously copied
<varname>contents</varname> derivation. This can be similarly seen as
<command>RUN ...</command> in a <filename>Dockerfile</filename>.
<note>
<para>
Using this parameter requires the <literal>kvm</literal> device to be
available.
</para>
</note>
</para>
</callout>
<callout arearefs='ex-dockerTools-buildImage-8'>
<para>
<varname>config</varname> is used to specify the configuration of the
containers that will be started off the built image in Docker. The
available options are listed in the
<link xlink:href="https://github.com/moby/moby/blob/master/image/spec/v1.2.md#image-json-field-descriptions">
Docker Image Specification v1.2.0 </link>.
</para>
</callout>
</calloutlist>
<para>
After the new layer has been created, its closure (to which
<varname>contents</varname>, <varname>config</varname> and
<varname>runAsRoot</varname> contribute) will be copied in the layer itself.
Only new dependencies that are not already in the existing layers will be
copied.
</para>
<para>
At the end of the process, only one new single layer will be produced and
added to the resulting image.
</para>
<para>
The resulting repository will only list the single image
<varname>image/tag</varname>. In the case of
<xref linkend='ex-dockerTools-buildImage'/> it would be
<varname>redis/latest</varname>.
</para>
<para>
It is possible to inspect the arguments with which an image was built using
its <varname>buildArgs</varname> attribute.
</para>
<note>
<para>
If you see errors similar to <literal>getProtocolByName: does not exist (no
such protocol name: tcp)</literal> you may need to add
<literal>pkgs.iana-etc</literal> to <varname>contents</varname>.
</para>
</note>
<note>
<para>
If you see errors similar to <literal>Error_Protocol ("certificate has
unknown CA",True,UnknownCa)</literal> you may need to add
<literal>pkgs.cacert</literal> to <varname>contents</varname>.
</para>
</note>
<example xml:id="example-pkgs-dockerTools-buildImage-creation-date">
<title>Impurely Defining a Docker Layer's Creation Date</title>
<para>
By default <function>buildImage</function> will use a static date of one
second past the UNIX Epoch. This allows <function>buildImage</function> to
produce binary reproducible images. When listing images with
<command>docker images</command>, the newly created images will be
listed like this:
</para>
<screen><![CDATA[
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello latest 08c791c7846e 48 years ago 25.2MB
]]></screen>
<para>
You can break binary reproducibility but have a sorted, meaningful
<literal>CREATED</literal> column by setting <literal>created</literal> to
<literal>now</literal>.
</para>
<programlisting><![CDATA[
pkgs.dockerTools.buildImage {
name = "hello";
tag = "latest";
created = "now";
contents = pkgs.hello;
config.Cmd = [ "/bin/hello" ];
}
]]></programlisting>
<para>
and now the Docker CLI will display a reasonable date and sort the images
as expected:
<screen><![CDATA[
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello latest de2bf4786de6 About a minute ago 25.2MB
]]></screen>
however, the produced images will not be binary reproducible.
</para>
</example>
</section>
<section xml:id="ssec-pkgs-dockerTools-buildLayeredImage">
<title>buildLayeredImage</title>
<para>
Create a Docker image with many of the store paths being on their own layer
to improve sharing between images.
</para>
<variablelist>
<varlistentry>
<term>
<varname>name</varname>
</term>
<listitem>
<para>
The name of the resulting image.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>tag</varname> <emphasis>optional</emphasis>
</term>
<listitem>
<para>
Tag of the generated image.
</para>
<para>
<emphasis>Default:</emphasis> the output path's hash
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>contents</varname> <emphasis>optional</emphasis>
</term>
<listitem>
<para>
Top level paths in the container. Either a single derivation, or a list
of derivations.
</para>
<para>
<emphasis>Default:</emphasis> <literal>[]</literal>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>config</varname> <emphasis>optional</emphasis>
</term>
<listitem>
<para>
Run-time configuration of the container. A full list of the options are
available at in the
<link xlink:href="https://github.com/moby/moby/blob/master/image/spec/v1.2.md#image-json-field-descriptions">
Docker Image Specification v1.2.0 </link>.
</para>
<para>
<emphasis>Default:</emphasis> <literal>{}</literal>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>created</varname> <emphasis>optional</emphasis>
</term>
<listitem>
<para>
Date and time the layers were created. Follows the same
<literal>now</literal> exception supported by
<literal>buildImage</literal>.
</para>
<para>
<emphasis>Default:</emphasis> <literal>1970-01-01T00:00:01Z</literal>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>maxLayers</varname> <emphasis>optional</emphasis>
</term>
<listitem>
<para>
Maximum number of layers to create.
</para>
<para>
<emphasis>Default:</emphasis> <literal>24</literal>
</para>
</listitem>
</varlistentry>
</variablelist>
<section xml:id="dockerTools-buildLayeredImage-arg-contents">
<title>Behavior of <varname>contents</varname> in the final image</title>
<para>
Each path directly listed in <varname>contents</varname> will have a
symlink in the root of the image.
</para>
<para>
For example:
<programlisting><![CDATA[
pkgs.dockerTools.buildLayeredImage {
name = "hello";
contents = [ pkgs.hello ];
}
]]></programlisting>
will create symlinks for all the paths in the <literal>hello</literal>
package:
<screen><![CDATA[
/bin/hello -> /nix/store/h1zb1padqbbb7jicsvkmrym3r6snphxg-hello-2.10/bin/hello
/share/info/hello.info -> /nix/store/h1zb1padqbbb7jicsvkmrym3r6snphxg-hello-2.10/share/info/hello.info
/share/locale/bg/LC_MESSAGES/hello.mo -> /nix/store/h1zb1padqbbb7jicsvkmrym3r6snphxg-hello-2.10/share/locale/bg/LC_MESSAGES/hello.mo
]]></screen>
</para>
</section>
<section xml:id="dockerTools-buildLayeredImage-arg-config">
<title>Automatic inclusion of <varname>config</varname> references</title>
<para>
The closure of <varname>config</varname> is automatically included in the
closure of the final image.
</para>
<para>
This allows you to make very simple Docker images with very little code.
This container will start up and run <command>hello</command>:
<programlisting><![CDATA[
pkgs.dockerTools.buildLayeredImage {
name = "hello";
config.Cmd = [ "${pkgs.hello}/bin/hello" ];
}
]]></programlisting>
</para>
</section>
<section xml:id="dockerTools-buildLayeredImage-arg-maxLayers">
<title>Adjusting <varname>maxLayers</varname></title>
<para>
Increasing the <varname>maxLayers</varname> increases the number of layers
which have a chance to be shared between different images.
</para>
<para>
Modern Docker installations support up to 128 layers, however older
versions support as few as 42.
</para>
<para>
If the produced image will not be extended by other Docker builds, it is
safe to set <varname>maxLayers</varname> to <literal>128</literal>. However
it will be impossible to extend the image further.
</para>
<para>
The first (<literal>maxLayers-2</literal>) most "popular" paths will have
their own individual layers, then layer #<literal>maxLayers-1</literal>
will contain all the remaining "unpopular" paths, and finally layer
#<literal>maxLayers</literal> will contain the Image configuration.
</para>
<para>
Docker's Layers are not inherently ordered, they are content-addressable
and are not explicitly layered until they are composed in to an Image.
</para>
</section>
</section>
<section xml:id="ssec-pkgs-dockerTools-fetchFromRegistry">
<title>pullImage</title>
<para>
This function is analogous to the <command>docker pull</command> command, in
that it can be used to pull a Docker image from a Docker registry. By default
<link xlink:href="https://hub.docker.com/">Docker Hub</link> is used to pull
images.
</para>
<para>
Its parameters are described in the example below:
</para>
<example xml:id='ex-dockerTools-pullImage'>
<title>Docker pull</title>
<programlisting>
pullImage {
imageName = "nixos/nix"; <co xml:id='ex-dockerTools-pullImage-1' />
imageDigest = "sha256:20d9485b25ecfd89204e843a962c1bd70e9cc6858d65d7f5fadc340246e2116b"; <co xml:id='ex-dockerTools-pullImage-2' />
finalImageTag = "1.11"; <co xml:id='ex-dockerTools-pullImage-3' />
sha256 = "0mqjy3zq2v6rrhizgb9nvhczl87lcfphq9601wcprdika2jz7qh8"; <co xml:id='ex-dockerTools-pullImage-4' />
os = "linux"; <co xml:id='ex-dockerTools-pullImage-5' />
arch = "x86_64"; <co xml:id='ex-dockerTools-pullImage-6' />
}
</programlisting>
</example>
<calloutlist>
<callout arearefs='ex-dockerTools-pullImage-1'>
<para>
<varname>imageName</varname> specifies the name of the image to be
downloaded, which can also include the registry namespace (e.g.
<literal>nixos</literal>). This argument is required.
</para>
</callout>
<callout arearefs='ex-dockerTools-pullImage-2'>
<para>
<varname>imageDigest</varname> specifies the digest of the image to be
downloaded. Skopeo can be used to get the digest of an image, with its
<varname>inspect</varname> subcommand. Since a given
<varname>imageName</varname> may transparently refer to a manifest list of
images which support multiple architectures and/or operating systems,
supply the `--override-os` and `--override-arch` arguments to specify
exactly which image you want. By default it will match the OS and
architecture of the host the command is run on.
<programlisting>
$ nix-shell --packages skopeo jq --command "skopeo --override-os linux --override-arch x86_64 inspect docker://docker.io/nixos/nix:1.11 | jq -r '.Digest'"
sha256:20d9485b25ecfd89204e843a962c1bd70e9cc6858d65d7f5fadc340246e2116b
</programlisting>
This argument is required.
</para>
</callout>
<callout arearefs='ex-dockerTools-pullImage-3'>
<para>
<varname>finalImageTag</varname>, if specified, this is the tag of the
image to be created. Note it is never used to fetch the image since we
prefer to rely on the immutable digest ID. By default it's
<literal>latest</literal>.
</para>
</callout>
<callout arearefs='ex-dockerTools-pullImage-4'>
<para>
<varname>sha256</varname> is the checksum of the whole fetched image. This
argument is required.
</para>
</callout>
<callout arearefs='ex-dockerTools-pullImage-5'>
<para>
<varname>os</varname>, if specified, is the operating system of the
fetched image. By default it's <literal>linux</literal>.
</para>
</callout>
<callout arearefs='ex-dockerTools-pullImage-6'>
<para>
<varname>arch</varname>, if specified, is the cpu architecture of the
fetched image. By default it's <literal>x86_64</literal>.
</para>
</callout>
</calloutlist>
</section>
<section xml:id="ssec-pkgs-dockerTools-exportImage">
<title>exportImage</title>
<para>
This function is analogous to the <command>docker export</command> command,
in that it can be used to flatten a Docker image that contains multiple layers. It
is in fact the result of the merge of all the layers of the image. As such,
the result is suitable for being imported in Docker with <command>docker
import</command>.
</para>
<note>
<para>
Using this function requires the <literal>kvm</literal> device to be
available.
</para>
</note>
<para>
The parameters of <varname>exportImage</varname> are the following:
</para>
<example xml:id='ex-dockerTools-exportImage'>
<title>Docker export</title>
<programlisting>
exportImage {
fromImage = someLayeredImage;
fromImageName = null;
fromImageTag = null;
name = someLayeredImage.name;
}
</programlisting>
</example>
<para>
The parameters relative to the base image have the same synopsis as
described in <xref linkend='ssec-pkgs-dockerTools-buildImage'/>, except that
<varname>fromImage</varname> is the only required argument in this case.
</para>
<para>
The <varname>name</varname> argument is the name of the derivation output,
which defaults to <varname>fromImage.name</varname>.
</para>
</section>
<section xml:id="ssec-pkgs-dockerTools-shadowSetup">
<title>shadowSetup</title>
<para>
This constant string is a helper for setting up the base files for managing
users and groups, only if such files don't exist already. It is suitable for
being used in a <varname>runAsRoot</varname>
<xref linkend='ex-dockerTools-buildImage-runAsRoot'/> script for cases like
in the example below:
</para>
<example xml:id='ex-dockerTools-shadowSetup'>
<title>Shadow base files</title>
<programlisting>
buildImage {
name = "shadow-basic";
runAsRoot = ''
#!${stdenv.shell}
${shadowSetup}
groupadd -r redis
useradd -r -g redis redis
mkdir /data
chown redis:redis /data
'';
}
</programlisting>
</example>
<para>
Creating base files like <literal>/etc/passwd</literal> or
<literal>/etc/login.defs</literal> is necessary for shadow-utils to
manipulate users and groups.
</para>
</section>
</section>

View File

@@ -1,206 +0,0 @@
<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-fetchers">
<title>Fetcher functions</title>
<para>
When using Nix, you will frequently need to download source code
and other files from the internet. Nixpkgs comes with a few helper
functions that allow you to fetch fixed-output derivations in a
structured way.
</para>
<para>
The two fetcher primitives are <function>fetchurl</function> and
<function>fetchzip</function>. Both of these have two required
arguments, a URL and a hash. The hash is typically
<literal>sha256</literal>, although many more hash algorithms are
supported. Nixpkgs contributors are currently recommended to use
<literal>sha256</literal>. This hash will be used by Nix to
identify your source. A typical usage of fetchurl is provided
below.
</para>
<programlisting><![CDATA[
{ stdenv, fetchurl }:
stdenv.mkDerivation {
name = "hello";
src = fetchurl {
url = "http://www.example.org/hello.tar.gz";
sha256 = "1111111111111111111111111111111111111111111111111111";
};
}
]]></programlisting>
<para>
The main difference between <function>fetchurl</function> and
<function>fetchzip</function> is in how they store the contents.
<function>fetchurl</function> will store the unaltered contents of
the URL within the Nix store. <function>fetchzip</function> on the
other hand will decompress the archive for you, making files and
directories directly accessible in the future.
<function>fetchzip</function> can only be used with archives.
Despite the name, <function>fetchzip</function> is not limited to
.zip files and can also be used with any tarball.
</para>
<para>
<function>fetchpatch</function> works very similarly to
<function>fetchurl</function> with the same arguments expected. It
expects patch files as a source and and performs normalization on
them before computing the checksum. For example it will remove
comments or other unstable parts that are sometimes added by
version control systems and can change over time.
</para>
<para>
Other fetcher functions allow you to add source code directly from
a VCS such as subversion or git. These are mostly straightforward
names based on the name of the command used with the VCS system.
Because they give you a working repository, they act most like
<function>fetchzip</function>.
</para>
<variablelist>
<varlistentry>
<term>
<literal>fetchsvn</literal>
</term>
<listitem>
<para>
Used with Subversion. Expects <literal>url</literal> to a
Subversion directory, <literal>rev</literal>, and
<literal>sha256</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>fetchgit</literal>
</term>
<listitem>
<para>
Used with Git. Expects <literal>url</literal> to a Git repo,
<literal>rev</literal>, and <literal>sha256</literal>.
<literal>rev</literal> in this case can be full the git commit
id (SHA1 hash) or a tag name like
<literal>refs/tags/v1.0</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>fetchfossil</literal>
</term>
<listitem>
<para>
Used with Fossil. Expects <literal>url</literal> to a Fossil
archive, <literal>rev</literal>, and <literal>sha256</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>fetchcvs</literal>
</term>
<listitem>
<para>
Used with CVS. Expects <literal>cvsRoot</literal>,
<literal>tag</literal>, and <literal>sha256</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>fetchhg</literal>
</term>
<listitem>
<para>
Used with Mercurial. Expects <literal>url</literal>,
<literal>rev</literal>, and <literal>sha256</literal>.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
A number of fetcher functions wrap part of
<function>fetchurl</function> and <function>fetchzip</function>.
They are mainly convenience functions intended for commonly used
destinations of source code in Nixpkgs. These wrapper fetchers are
listed below.
</para>
<variablelist>
<varlistentry>
<term>
<literal>fetchFromGitHub</literal>
</term>
<listitem>
<para>
<function>fetchFromGitHub</function> expects four arguments.
<literal>owner</literal> is a string corresponding to the
GitHub user or organization that controls this repository.
<literal>repo</literal> corresponds to the name of the
software repository. These are located at the top of every
GitHub HTML page as
<literal>owner</literal>/<literal>repo</literal>.
<literal>rev</literal> corresponds to the Git commit hash or
tag (e.g <literal>v1.0</literal>) that will be downloaded from
Git. Finally, <literal>sha256</literal> corresponds to the
hash of the extracted directory. Again, other hash algorithms
are also available but <literal>sha256</literal> is currently
preferred.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>fetchFromGitLab</literal>
</term>
<listitem>
<para>
This is used with GitLab repositories. The arguments expected
are very similar to fetchFromGitHub above.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>fetchFromBitbucket</literal>
</term>
<listitem>
<para>
This is used with BitBucket repositories. The arguments expected
are very similar to fetchFromGitHub above.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>fetchFromSavannah</literal>
</term>
<listitem>
<para>
This is used with Savannah repositories. The arguments expected
are very similar to fetchFromGitHub above.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>fetchFromRepoOrCz</literal>
</term>
<listitem>
<para>
This is used with repo.or.cz repositories. The arguments
expected are very similar to fetchFromGitHub above.
</para>
</listitem>
</varlistentry>
</variablelist>
</section>

View File

@@ -1,142 +0,0 @@
<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-fhs-environments">
<title>buildFHSUserEnv</title>
<para>
<function>buildFHSUserEnv</function> provides a way to build and run
FHS-compatible lightweight sandboxes. It creates an isolated root with bound
<filename>/nix/store</filename>, so its footprint in terms of disk space
needed is quite small. This allows one to run software which is hard or
unfeasible to patch for NixOS -- 3rd-party source trees with FHS assumptions,
games distributed as tarballs, software with integrity checking and/or
external self-updated binaries. It uses Linux namespaces feature to create
temporary lightweight environments which are destroyed after all child
processes exit, without root user rights requirement. Accepted arguments are:
</para>
<variablelist>
<varlistentry>
<term>
<literal>name</literal>
</term>
<listitem>
<para>
Environment name.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>targetPkgs</literal>
</term>
<listitem>
<para>
Packages to be installed for the main host's architecture (i.e. x86_64 on
x86_64 installations). Along with libraries binaries are also installed.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>multiPkgs</literal>
</term>
<listitem>
<para>
Packages to be installed for all architectures supported by a host (i.e.
i686 and x86_64 on x86_64 installations). Only libraries are installed by
default.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>extraBuildCommands</literal>
</term>
<listitem>
<para>
Additional commands to be executed for finalizing the directory structure.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>extraBuildCommandsMulti</literal>
</term>
<listitem>
<para>
Like <literal>extraBuildCommands</literal>, but executed only on multilib
architectures.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>extraOutputsToInstall</literal>
</term>
<listitem>
<para>
Additional derivation outputs to be linked for both target and
multi-architecture packages.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>extraInstallCommands</literal>
</term>
<listitem>
<para>
Additional commands to be executed for finalizing the derivation with
runner script.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>runScript</literal>
</term>
<listitem>
<para>
A command that would be executed inside the sandbox and passed all the
command line arguments. It defaults to <literal>bash</literal>.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
One can create a simple environment using a <literal>shell.nix</literal> like
that:
</para>
<programlisting><![CDATA[
{ pkgs ? import <nixpkgs> {} }:
(pkgs.buildFHSUserEnv {
name = "simple-x11-env";
targetPkgs = pkgs: (with pkgs;
[ udev
alsaLib
]) ++ (with pkgs.xorg;
[ libX11
libXcursor
libXrandr
]);
multiPkgs = pkgs: (with pkgs;
[ udev
alsaLib
]);
runScript = "bash";
}).env
]]></programlisting>
<para>
Running <literal>nix-shell</literal> would then drop you into a shell with
these libraries and binaries available. You can use this to run closed-source
applications which expect FHS structure without hassles: simply change
<literal>runScript</literal> to the application path, e.g.
<filename>./bin/start.sh</filename> -- relative paths are supported.
</para>
</section>

View File

@@ -1,89 +0,0 @@
<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-generators">
<title>Generators</title>
<para>
Generators are functions that create file formats from nix data structures,
e.g. for configuration files. There are generators available for:
<literal>INI</literal>, <literal>JSON</literal> and <literal>YAML</literal>
</para>
<para>
All generators follow a similar call interface: <code>generatorName
configFunctions data</code>, where <literal>configFunctions</literal> is an
attrset of user-defined functions that format nested parts of the content.
They each have common defaults, so often they do not need to be set manually.
An example is <code>mkSectionName ? (name: libStr.escape [ "[" "]" ]
name)</code> from the <literal>INI</literal> generator. It receives the name
of a section and sanitizes it. The default <literal>mkSectionName</literal>
escapes <literal>[</literal> and <literal>]</literal> with a backslash.
</para>
<para>
Generators can be fine-tuned to produce exactly the file format required by
your application/service. One example is an INI-file format which uses
<literal>: </literal> as separator, the strings
<literal>"yes"</literal>/<literal>"no"</literal> as boolean values and
requires all string values to be quoted:
</para>
<programlisting>
with lib;
let
customToINI = generators.toINI {
# specifies how to format a key/value pair
mkKeyValue = generators.mkKeyValueDefault {
# specifies the generated string for a subset of nix values
mkValueString = v:
if v == true then ''"yes"''
else if v == false then ''"no"''
else if isString v then ''"${v}"''
# and delegats all other values to the default generator
else generators.mkValueStringDefault {} v;
} ":";
};
# the INI file can now be given as plain old nix values
in customToINI {
main = {
pushinfo = true;
autopush = false;
host = "localhost";
port = 42;
};
mergetool = {
merge = "diff3";
};
}
</programlisting>
<para>
This will produce the following INI file as nix string:
</para>
<programlisting>
[main]
autopush:"no"
host:"localhost"
port:42
pushinfo:"yes"
str\:ange:"very::strange"
[mergetool]
merge:"diff3"
</programlisting>
<note>
<para>
Nix store paths can be converted to strings by enclosing a derivation
attribute like so: <code>"${drv}"</code>.
</para>
</note>
<para>
Detailed documentation for each generator can be found in
<literal>lib/generators.nix</literal>.
</para>
</section>

View File

@@ -1,24 +0,0 @@
<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-functions-library">
<title>Nixpkgs Library Functions</title>
<para>
Nixpkgs provides a standard library at <varname>pkgs.lib</varname>, or
through <code>import &lt;nixpkgs/lib&gt;</code>.
</para>
<xi:include href="./library/asserts.xml" />
<xi:include href="./library/attrsets.xml" />
<!-- These docs are generated via nixdoc. To add another generated
library function file to this list, the file
`lib-function-docs.nix` must also be updated. -->
<xi:include href="./library/generated/strings.xml" />
<xi:include href="./library/generated/trivial.xml" />
<xi:include href="./library/generated/lists.xml" />
<xi:include href="./library/generated/debug.xml" />
<xi:include href="./library/generated/options.xml" />
</section>

View File

@@ -1,117 +0,0 @@
<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-functions-library-asserts">
<title>Assert functions</title>
<section xml:id="function-library-lib.asserts.assertMsg">
<title><function>lib.asserts.assertMsg</function></title>
<subtitle><literal>assertMsg :: Bool -> String -> Bool</literal>
</subtitle>
<xi:include href="./locations.xml" xpointer="lib.asserts.assertMsg" />
<para>
Print a trace message if <literal>pred</literal> is false.
</para>
<para>
Intended to be used to augment asserts with helpful error messages.
</para>
<variablelist>
<varlistentry>
<term>
<varname>pred</varname>
</term>
<listitem>
<para>
Condition under which the <varname>msg</varname> should
<emphasis>not</emphasis> be printed.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>msg</varname>
</term>
<listitem>
<para>
Message to print.
</para>
</listitem>
</varlistentry>
</variablelist>
<example xml:id="function-library-lib.asserts.assertMsg-example-false">
<title>Printing when the predicate is false</title>
<programlisting><![CDATA[
assert lib.asserts.assertMsg ("foo" == "bar") "foo is not bar, silly"
stderr> trace: foo is not bar, silly
stderr> assert failed
]]></programlisting>
</example>
</section>
<section xml:id="function-library-lib.asserts.assertOneOf">
<title><function>lib.asserts.assertOneOf</function></title>
<subtitle><literal>assertOneOf :: String -> String ->
StringList -> Bool</literal>
</subtitle>
<xi:include href="./locations.xml" xpointer="lib.asserts.assertOneOf" />
<para>
Specialized <function>asserts.assertMsg</function> for checking if
<varname>val</varname> is one of the elements of <varname>xs</varname>.
Useful for checking enums.
</para>
<variablelist>
<varlistentry>
<term>
<varname>name</varname>
</term>
<listitem>
<para>
The name of the variable the user entered <varname>val</varname> into,
for inclusion in the error message.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>val</varname>
</term>
<listitem>
<para>
The value of what the user provided, to be compared against the values in
<varname>xs</varname>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>xs</varname>
</term>
<listitem>
<para>
The list of valid values.
</para>
</listitem>
</varlistentry>
</variablelist>
<example xml:id="function-library-lib.asserts.assertOneOf-example">
<title>Ensuring a user provided a possible value</title>
<programlisting><![CDATA[
let sslLibrary = "bearssl";
in lib.asserts.assertOneOf "sslLibrary" sslLibrary [ "openssl" "bearssl" ];
=> false
stderr> trace: sslLibrary must be one of "openssl", "libressl", but is: "bearssl"
]]></programlisting>
</example>
</section>
</section>

File diff suppressed because it is too large Load Diff

View File

@@ -1,78 +0,0 @@
<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-nix-gitignore">
<title>pkgs.nix-gitignore</title>
<para>
<function>pkgs.nix-gitignore</function> is a function that acts similarly to
<literal>builtins.filterSource</literal> but also allows filtering with the
help of the gitignore format.
</para>
<section xml:id="sec-pkgs-nix-gitignore-usage">
<title>Usage</title>
<para>
<literal>pkgs.nix-gitignore</literal> exports a number of functions, but
you'll most likely need either <literal>gitignoreSource</literal> or
<literal>gitignoreSourcePure</literal>. As their first argument, they both
accept either 1. a file with gitignore lines or 2. a string
with gitignore lines, or 3. a list of either of the two. They will be
concatenated into a single big string.
</para>
<programlisting><![CDATA[
{ pkgs ? import <nixpkgs> {} }:
nix-gitignore.gitignoreSource [] ./source
# Simplest version
nix-gitignore.gitignoreSource "supplemental-ignores\n" ./source
# This one reads the ./source/.gitignore and concats the auxiliary ignores
nix-gitignore.gitignoreSourcePure "ignore-this\nignore-that\n" ./source
# Use this string as gitignore, don't read ./source/.gitignore.
nix-gitignore.gitignoreSourcePure ["ignore-this\nignore-that\n", ~/.gitignore] ./source
# It also accepts a list (of strings and paths) that will be concatenated
# once the paths are turned to strings via readFile.
]]></programlisting>
<para>
These functions are derived from the <literal>Filter</literal> functions
by setting the first filter argument to <literal>(_: _: true)</literal>:
</para>
<programlisting><![CDATA[
gitignoreSourcePure = gitignoreFilterSourcePure (_: _: true);
gitignoreSource = gitignoreFilterSource (_: _: true);
]]></programlisting>
<para>
Those filter functions accept the same arguments the <literal>builtins.filterSource</literal> function would pass to its filters, thus <literal>fn: gitignoreFilterSourcePure fn ""</literal> should be extensionally equivalent to <literal>filterSource</literal>. The file is blacklisted iff it's blacklisted by either your filter or the gitignoreFilter.
</para>
<para>
If you want to make your own filter from scratch, you may use
</para>
<programlisting><![CDATA[
gitignoreFilter = ign: root: filterPattern (gitignoreToPatterns ign) root;
]]></programlisting>
</section>
<section xml:id="sec-pkgs-nix-gitignore-usage-recursive">
<title>gitignore files in subdirectories</title>
<para>
If you wish to use a filter that would search for .gitignore files in subdirectories, just like git does by default, use this function:
</para>
<programlisting><![CDATA[
gitignoreFilterRecursiveSource = filter: patterns: root:
# OR
gitignoreRecursiveSource = gitignoreFilterSourcePure (_: _: true);
]]></programlisting>
</section>
</section>

View File

@@ -1,212 +0,0 @@
<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-overrides">
<title>Overriding</title>
<para>
Sometimes one wants to override parts of <literal>nixpkgs</literal>, e.g.
derivation attributes, the results of derivations.
</para>
<para>
These functions are used to make changes to packages, returning only single
packages. <link xlink:href="#chap-overlays">Overlays</link>, on the other
hand, can be used to combine the overridden packages across the entire
package set of Nixpkgs.
</para>
<section xml:id="sec-pkg-override">
<title>&lt;pkg&gt;.override</title>
<para>
The function <varname>override</varname> is usually available for all the
derivations in the nixpkgs expression (<varname>pkgs</varname>).
</para>
<para>
It is used to override the arguments passed to a function.
</para>
<para>
Example usages:
<programlisting>pkgs.foo.override { arg1 = val1; arg2 = val2; ... }</programlisting>
<!-- TODO: move below programlisting to a new section about extending and overlays
and reference it
-->
<programlisting>
import pkgs.path { overlays = [ (self: super: {
foo = super.foo.override { barSupport = true ; };
})]};
</programlisting>
<programlisting>
mypkg = pkgs.callPackage ./mypkg.nix {
mydep = pkgs.mydep.override { ... };
}
</programlisting>
</para>
<para>
In the first example, <varname>pkgs.foo</varname> is the result of a
function call with some default arguments, usually a derivation. Using
<varname>pkgs.foo.override</varname> will call the same function with the
given new arguments.
</para>
</section>
<section xml:id="sec-pkg-overrideAttrs">
<title>&lt;pkg&gt;.overrideAttrs</title>
<para>
The function <varname>overrideAttrs</varname> allows overriding the
attribute set passed to a <varname>stdenv.mkDerivation</varname> call,
producing a new derivation based on the original one. This function is
available on all derivations produced by the
<varname>stdenv.mkDerivation</varname> function, which is most packages in
the nixpkgs expression <varname>pkgs</varname>.
</para>
<para>
Example usage:
<programlisting>
helloWithDebug = pkgs.hello.overrideAttrs (oldAttrs: rec {
separateDebugInfo = true;
});
</programlisting>
</para>
<para>
In the above example, the <varname>separateDebugInfo</varname> attribute is
overridden to be true, thus building debug info for
<varname>helloWithDebug</varname>, while all other attributes will be
retained from the original <varname>hello</varname> package.
</para>
<para>
The argument <varname>oldAttrs</varname> is conventionally used to refer to
the attr set originally passed to <varname>stdenv.mkDerivation</varname>.
</para>
<note>
<para>
Note that <varname>separateDebugInfo</varname> is processed only by the
<varname>stdenv.mkDerivation</varname> function, not the generated, raw Nix
derivation. Thus, using <varname>overrideDerivation</varname> will not work
in this case, as it overrides only the attributes of the final derivation.
It is for this reason that <varname>overrideAttrs</varname> should be
preferred in (almost) all cases to <varname>overrideDerivation</varname>,
i.e. to allow using <varname>stdenv.mkDerivation</varname> to process input
arguments, as well as the fact that it is easier to use (you can use the
same attribute names you see in your Nix code, instead of the ones
generated (e.g. <varname>buildInputs</varname> vs
<varname>nativeBuildInputs</varname>), and it involves less typing).
</para>
</note>
</section>
<section xml:id="sec-pkg-overrideDerivation">
<title>&lt;pkg&gt;.overrideDerivation</title>
<warning>
<para>
You should prefer <varname>overrideAttrs</varname> in almost all cases, see
its documentation for the reasons why.
<varname>overrideDerivation</varname> is not deprecated and will continue
to work, but is less nice to use and does not have as many abilities as
<varname>overrideAttrs</varname>.
</para>
</warning>
<warning>
<para>
Do not use this function in Nixpkgs as it evaluates a Derivation before
modifying it, which breaks package abstraction and removes error-checking
of function arguments. In addition, this evaluation-per-function
application incurs a performance penalty, which can become a problem if
many overrides are used. It is only intended for ad-hoc customisation, such
as in <filename>~/.config/nixpkgs/config.nix</filename>.
</para>
</warning>
<para>
The function <varname>overrideDerivation</varname> creates a new derivation
based on an existing one by overriding the original's attributes with the
attribute set produced by the specified function. This function is available
on all derivations defined using the <varname>makeOverridable</varname>
function. Most standard derivation-producing functions, such as
<varname>stdenv.mkDerivation</varname>, are defined using this function,
which means most packages in the nixpkgs expression,
<varname>pkgs</varname>, have this function.
</para>
<para>
Example usage:
<programlisting>
mySed = pkgs.gnused.overrideDerivation (oldAttrs: {
name = "sed-4.2.2-pre";
src = fetchurl {
url = ftp://alpha.gnu.org/gnu/sed/sed-4.2.2-pre.tar.bz2;
sha256 = "11nq06d131y4wmf3drm0yk502d2xc6n5qy82cg88rb9nqd2lj41k";
};
patches = [];
});
</programlisting>
</para>
<para>
In the above example, the <varname>name</varname>, <varname>src</varname>,
and <varname>patches</varname> of the derivation will be overridden, while
all other attributes will be retained from the original derivation.
</para>
<para>
The argument <varname>oldAttrs</varname> is used to refer to the attribute
set of the original derivation.
</para>
<note>
<para>
A package's attributes are evaluated *before* being modified by the
<varname>overrideDerivation</varname> function. For example, the
<varname>name</varname> attribute reference in <varname>url =
"mirror://gnu/hello/${name}.tar.gz";</varname> is filled-in *before* the
<varname>overrideDerivation</varname> function modifies the attribute set.
This means that overriding the <varname>name</varname> attribute, in this
example, *will not* change the value of the <varname>url</varname>
attribute. Instead, we need to override both the <varname>name</varname>
*and* <varname>url</varname> attributes.
</para>
</note>
</section>
<section xml:id="sec-lib-makeOverridable">
<title>lib.makeOverridable</title>
<para>
The function <varname>lib.makeOverridable</varname> is used to make the
result of a function easily customizable. This utility only makes sense for
functions that accept an argument set and return an attribute set.
</para>
<para>
Example usage:
<programlisting>
f = { a, b }: { result = a+b; };
c = lib.makeOverridable f { a = 1; b = 2; };
</programlisting>
</para>
<para>
The variable <varname>c</varname> is the value of the <varname>f</varname>
function applied with some default arguments. Hence the value of
<varname>c.result</varname> is <literal>3</literal>, in this example.
</para>
<para>
The variable <varname>c</varname> however also has some additional
functions, like <link linkend="sec-pkg-override">c.override</link> which can
be used to override the default arguments. In this example the value of
<varname>(c.override { a = 4; }).result</varname> is 6.
</para>
</section>
</section>

View File

@@ -1,27 +0,0 @@
<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-prefer-remote-fetch">
<title>prefer-remote-fetch overlay</title>
<para>
<function>prefer-remote-fetch</function> is an overlay that download sources
on remote builder. This is useful when the evaluating machine has a slow
upload while the builder can fetch faster directly from the source.
To use it, put the following snippet as a new overlay:
<programlisting>
self: super:
(super.prefer-remote-fetch self super)
</programlisting>
A full configuration example for that sets the overlay up for your own account,
could look like this
<programlisting>
$ mkdir ~/.config/nixpkgs/overlays/
$ cat &gt; ~/.config/nixpkgs/overlays/prefer-remote-fetch.nix &lt;&lt;EOF
self: super: super.prefer-remote-fetch self super
EOF
</programlisting>
</para>
</section>

View File

@@ -1,26 +0,0 @@
<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-mkShell">
<title>pkgs.mkShell</title>
<para>
<function>pkgs.mkShell</function> is a special kind of derivation that is
only useful when using it combined with <command>nix-shell</command>. It will
in fact fail to instantiate when invoked with <command>nix-build</command>.
</para>
<section xml:id="sec-pkgs-mkShell-usage">
<title>Usage</title>
<programlisting><![CDATA[
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
# this will make all the build inputs from hello and gnutar
# available to the shell environment
inputsFrom = with pkgs; [ hello gnutar ];
buildInputs = [ pkgs.gnumake ];
}
]]></programlisting>
</section>
</section>

View File

@@ -1,124 +0,0 @@
<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-trivial-builders">
<title>Trivial builders</title>
<para>
Nixpkgs provides a couple of functions that help with building
derivations. The most important one,
<function>stdenv.mkDerivation</function>, has already been
documented above. The following functions wrap
<function>stdenv.mkDerivation</function>, making it easier to use
in certain cases.
</para>
<variablelist>
<varlistentry>
<term>
<literal>runCommand</literal>
</term>
<listitem>
<para>
This takes three arguments, <literal>name</literal>,
<literal>env</literal>, and <literal>buildCommand</literal>.
<literal>name</literal> is just the name that Nix will append
to the store path in the same way that
<literal>stdenv.mkDerivation</literal> uses its
<literal>name</literal> attribute. <literal>env</literal> is an
attribute set specifying environment variables that will be set
for this derivation. These attributes are then passed to the
wrapped <literal>stdenv.mkDerivation</literal>.
<literal>buildCommand</literal> specifies the commands that
will be run to create this derivation. Note that you will need
to create <literal>$out</literal> for Nix to register the
command as successful.
</para>
<para>
An example of using <literal>runCommand</literal> is provided
below.
</para>
<programlisting>
(import &lt;nixpkgs&gt; {}).runCommand "my-example" {} ''
echo My example command is running
mkdir $out
echo I can write data to the Nix store > $out/message
echo I can also run basic commands like:
echo ls
ls
echo whoami
whoami
echo date
date
''
</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>runCommandCC</literal>
</term>
<listitem>
<para>
This works just like <literal>runCommand</literal>. The only
difference is that it also provides a C compiler in
<literal>buildCommand</literal>s environment. To minimize your
dependencies, you should only use this if you are sure you will
need a C compiler as part of running your command.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>writeTextFile</literal>, <literal>writeText</literal>,
<literal>writeTextDir</literal>, <literal>writeScript</literal>,
<literal>writeScriptBin</literal>
</term>
<listitem>
<para>
These functions write <literal>text</literal> to the Nix store.
This is useful for creating scripts from Nix expressions.
<literal>writeTextFile</literal> takes an attribute set and
expects two arguments, <literal>name</literal> and
<literal>text</literal>. <literal>name</literal> corresponds to
the name used in the Nix store path. <literal>text</literal>
will be the contents of the file. You can also set
<literal>executable</literal> to true to make this file have
the executable bit set.
</para>
<para>
Many more commands wrap <literal>writeTextFile</literal>
including <literal>writeText</literal>,
<literal>writeTextDir</literal>,
<literal>writeScript</literal>, and
<literal>writeScriptBin</literal>. These are convenience
functions over <literal>writeTextFile</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>symlinkJoin</literal>
</term>
<listitem>
<para>
This can be used to put many derivations into the same directory
structure. It works by creating a new derivation and adding
symlinks to each of the paths listed. It expects two arguments,
<literal>name</literal>, and <literal>paths</literal>.
<literal>name</literal> is the name used in the Nix store path
for the created derivation. <literal>paths</literal> is a list of
paths that will be symlinked. These paths can be to Nix store
derivations or any other subdirectory contained within.
</para>
</listitem>
</varlistentry>
</variablelist>
</section>

View File

@@ -1,51 +0,0 @@
---
title: Introduction
author: Frederik Rietdijk
date: 2015-11-25
---
# Introduction
The Nix Packages collection (Nixpkgs) is a set of thousands of packages for the
[Nix package manager](http://nixos.org/nix/), released under a
[permissive MIT/X11 license](https://github.com/NixOS/nixpkgs/blob/master/COPYING).
Packages are available for several platforms, and can be used with the Nix
package manager on most GNU/Linux distributions as well as NixOS.
This manual primarily describes how to write packages for the Nix Packages collection
(Nixpkgs). Thus its mainly for packagers and developers who want to add packages to
Nixpkgs. If you like to learn more about the Nix package manager and the Nix
expression language, then you are kindly referred to the [Nix manual](http://nixos.org/nix/manual/).
## Overview of Nixpkgs
Nix expressions describe how to build packages from source and are collected in
the [nixpkgs repository](https://github.com/NixOS/nixpkgs). Also included in the
collection are Nix expressions for
[NixOS modules](http://nixos.org/nixos/manual/index.html#sec-writing-modules).
With these expressions the Nix package manager can build binary packages.
Packages, including the Nix packages collection, are distributed through
[channels](http://nixos.org/nix/manual/#sec-channels). The collection is
distributed for users of Nix on non-NixOS distributions through the channel
`nixpkgs`. Users of NixOS generally use one of the `nixos-*` channels, e.g.
`nixos-16.03`, which includes all packages and modules for the stable NixOS
16.03. Stable NixOS releases are generally only given
security updates. More up to date packages and modules are available via the
`nixos-unstable` channel.
Both `nixos-unstable` and `nixpkgs` follow the `master` branch of the Nixpkgs
repository, although both do lag the `master` branch by generally
[a couple of days](http://howoldis.herokuapp.com/). Updates to a channel are
distributed as soon as all tests for that channel pass, e.g.
[this table](http://hydra.nixos.org/job/nixpkgs/trunk/unstable#tabs-constituents)
shows the status of tests for the `nixpkgs` channel.
The tests are conducted by a cluster called [Hydra](http://nixos.org/hydra/),
which also builds binary packages from the Nix expressions in Nixpkgs for
`x86_64-linux`, `i686-linux` and `x86_64-darwin`.
The binaries are made available via a [binary cache](https://cache.nixos.org).
The current Nix expressions of the channels are available in the
[`nixpkgs-channels`](https://github.com/NixOS/nixpkgs-channels) repository,
which has branches corresponding to the available channels.

53
doc/introduction.md Normal file
View File

@@ -0,0 +1,53 @@
---
title: Introduction
author: Frederik Rietdijk
date: 2015-11-25
---
# Introduction
The Nix Packages collection (Nixpkgs) is a set of thousands of packages for the
[Nix package manager](http://nixos.org/nix/), released under a
[permissive MIT/X11 license](https://github.com/NixOS/nixpkgs/blob/master/COPYING).
Packages are available for several platforms, and can be used with the Nix
package manager on most GNU/Linux distributions as well as NixOS.
This manual primarily describes how to write packages for the Nix Packages collection
(Nixpkgs). Thus its mainly for packagers and developers who want to add packages to
Nixpkgs. If you like to learn more about the Nix package manager and the Nix
expression language, then you are kindly referred to the [Nix manual](http://nixos.org/nix/manual/).
## Overview of Nixpkgs
Nix expressions describe how to build packages from source and are collected in
the [nixpkgs repository](https://github.com/NixOS/nixpkgs). Also included in the
collection are Nix expressions for
[NixOS modules](http://nixos.org/nixos/manual/index.html#sec-writing-modules).
With these expressions the Nix package manager can build binary packages.
Packages, including the Nix packages collection, are distributed through
[channels](http://nixos.org/nix/manual/#sec-channels). The collection is
distributed for users of Nix on non-NixOS distributions through the channel
`nixpkgs`. Users of NixOS generally use one of the `nixos-*` channels, e.g.
`nixos-16.03`, which includes all packages and modules for the stable NixOS
16.03. The purpose of stable NixOS releases are generally only given
security updates. More up to date packages and modules are available via the
`nixos-unstable` channel.
Both `nixos-unstable` and `nixpkgs` follow the `master` branch of the Nixpkgs
repository, although both do lag the `master` branch by generally
[a couple of days](http://howoldis.herokuapp.com/). Updates to a channel are
distributed as soon as all tests for that channel pass, e.g.
[this table](http://hydra.nixos.org/job/nixpkgs/trunk/unstable#tabs-constituents)
shows the status of tests for the `nixpkgs` channel.
The tests are conducted by a cluster called [Hydra](http://nixos.org/hydra/),
which also builds binary packages from the Nix expressions in Nixpkgs for
`x86_64-linux`, `i686-linux` and `x86_64-darwin`.
The binaries are made available via a [binary cache](https://cache.nixos.org).
The current Nix expressions of the channels are available in the
[`nixpkgs-channels`](https://github.com/NixOS/nixpkgs-channels) repository,
which has branches corresponding to the available channels. There is also the
[Nixpkgs Monitor](http://monitor.nixos.org) which keeps track of updates
and security vulnerabilities.

View File

@@ -1,240 +0,0 @@
---
title: Android
author: Sander van der Burg
date: 2018-11-18
---
# Android
The Android build environment provides three major features and a number of
supporting features.
Deploying an Android SDK installation with plugins
--------------------------------------------------
The first use case is deploying the SDK with a desired set of plugins or subsets
of an SDK.
```nix
with import <nixpkgs> {};
let
androidComposition = androidenv.composeAndroidPackages {
toolsVersion = "25.2.5";
platformToolsVersion = "27.0.1";
buildToolsVersions = [ "27.0.3" ];
includeEmulator = false;
emulatorVersion = "27.2.0";
platformVersions = [ "24" ];
includeSources = false;
includeDocs = false;
includeSystemImages = false;
systemImageTypes = [ "default" ];
abiVersions = [ "armeabi-v7a" ];
lldbVersions = [ "2.0.2558144" ];
cmakeVersions = [ "3.6.4111459" ];
includeNDK = false;
ndkVersion = "16.1.4479499";
useGoogleAPIs = false;
useGoogleTVAddOns = false;
includeExtras = [
"extras;google;gcm"
];
};
in
androidComposition.androidsdk
```
The above function invocation states that we want an Android SDK with the above
specified plugin versions. By default, most plugins are disabled. Notable
exceptions are the tools, platform-tools and build-tools sub packages.
The following parameters are supported:
* `toolsVersion`, specifies the version of the tools package to use
* `platformsToolsVersion` specifies the version of the `platform-tools` plugin
* `buildToolsVersion` specifies the versions of the `build-tools` plugins to
use.
* `includeEmulator` specifies whether to deploy the emulator package (`false`
by default). When enabled, the version of the emulator to deploy can be
specified by setting the `emulatorVersion` parameter.
* `includeDocs` specifies whether the documentation catalog should be included.
* `lldbVersions` specifies what LLDB versions should be deployed.
* `cmakeVersions` specifies which CMake versions should be deployed.
* `includeNDK` specifies that the Android NDK bundle should be included.
Defaults to: `false`.
* `ndkVersion` specifies the NDK version that we want to use.
* `includeExtras` is an array of identifier strings referring to arbitrary
add-on packages that should be installed.
* `platformVersions` specifies which platform SDK versions should be included.
For each platform version that has been specified, we can apply the following
options:
* `includeSystemImages` specifies whether a system image for each platform SDK
should be included.
* `includeSources` specifies whether the sources for each SDK version should be
included.
* `useGoogleAPIs` specifies that for each selected platform version the
Google API should be included.
* `useGoogleTVAddOns` specifies that for each selected platform version the
Google TV add-on should be included.
For each requested system image we can specify the following options:
* `systemImageTypes` specifies what kind of system images should be included.
Defaults to: `default`.
* `abiVersions` specifies what kind of ABI version of each system image should
be included. Defaults to: `armeabi-v7a`.
Most of the function arguments have reasonable default settings.
When building the above expression with:
```bash
$ nix-build
```
The Android SDK gets deployed with all desired plugin versions.
We can also deploy subsets of the Android SDK. For example, to only the the
`platform-tools` package, you can evaluate the following expression:
```nix
with import <nixpkgs> {};
let
androidComposition = androidenv.composeAndroidPackages {
# ...
};
in
androidComposition.platform-tools
```
Using predefine Android package compositions
--------------------------------------------
In addition to composing an Android package set manually, it is also possible
to use a predefined composition that contains all basic packages for a specific
Android version, such as version 9.0 (API-level 28).
The following Nix expression can be used to deploy the entire SDK with all basic
plugins:
```nix
with import <nixpkgs> {};
androidenv.androidPkgs_9_0.androidsdk
```
It is also possible to use one plugin only:
```nix
with import <nixpkgs> {};
androidenv.androidPkgs_9_0.platform-tools
```
Building an Android application
-------------------------------
In addition to the SDK, it is also possible to build an Ant-based Android
project and automatically deploy all the Android plugins that a project
requires.
```nix
with import <nixpkgs> {};
androidenv.buildApp {
name = "MyAndroidApp";
src = ./myappsources;
release = true;
# If release is set to true, you need to specify the following parameters
keyStore = ./keystore;
keyAlias = "myfirstapp";
keyStorePassword = "mykeystore";
keyAliasPassword = "myfirstapp";
# Any Android SDK parameters that install all the relevant plugins that a
# build requires
platformVersions = [ "24" ];
# When we include the NDK, then ndk-build is invoked before Ant gets invoked
includeNDK = true;
}
```
Aside from the app-specific build parameters (`name`, `src`, `release` and
keystore parameters), the `buildApp {}` function supports all the function
parameters that the SDK composition function (the function shown in the
previous section) supports.
This build function is particularly useful when it is desired to use
[Hydra](http://nixos.org/hydra): the Nix-based continuous integration solution
to build Android apps. An Android APK gets exposed as a build product and can be
installed on any Android device with a web browser by navigating to the build
result page.
Spawning emulator instances
---------------------------
For testing purposes, it can also be quite convenient to automatically generate
scripts that spawn emulator instances with all desired configuration settings.
An emulator spawn script can be configured by invoking the `emulateApp {}`
function:
```nix
with import <nixpkgs> {};
androidenv.emulateApp {
name = "emulate-MyAndroidApp";
platformVersion = "24";
abiVersion = "armeabi-v7a"; # mips, x86 or x86_64
systemImageType = "default";
useGoogleAPIs = false;
}
```
It is also possible to specify an APK to deploy inside the emulator
and the package and activity names to launch it:
```nix
with import <nixpkgs> {};
androidenv.emulateApp {
name = "emulate-MyAndroidApp";
platformVersion = "24";
abiVersion = "armeabi-v7a"; # mips, x86 or x86_64
systemImageType = "default";
useGoogleAPIs = false;
app = ./MyApp.apk;
package = "MyApp";
activity = "MainActivity";
}
```
In addition to prebuilt APKs, you can also bind the APK parameter to a
`buildApp {}` function invocation shown in the previous example.
Querying the available versions of each plugin
----------------------------------------------
When using any of the previously shown functions, it may be a bit inconvenient
to find out what options are supported, since the Android SDK provides many
plugins.
A shell script in the `pkgs/development/mobile/androidenv/` sub directory can be used to retrieve all
possible options:
```bash
sh ./querypackages.sh packages build-tools
```
The above command-line instruction queries all build-tools versions in the
generated `packages.nix` expression.
Updating the generated expressions
----------------------------------
Most of the Nix expressions are generated from XML files that the Android
package manager uses. To update the expressions run the `generate.sh` script
that is stored in the `pkgs/development/mobile/androidenv/` sub directory:
```bash
sh ./generate.sh
```

View File

@@ -1,137 +1,124 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-beam">
<title>BEAM Languages (Erlang, Elixir &amp; LFE)</title>
<section xml:id="beam-introduction">
<title>Introduction</title>
<para>
In this document and related Nix expressions, we use the term,
<emphasis>BEAM</emphasis>, to describe the environment. BEAM is the name of
the Erlang Virtual Machine and, as far as we're concerned, from a packaging
perspective, all languages that run on the BEAM are interchangeable. That
which varies, like the build system, is transparent to users of any given
BEAM package, so we make no distinction.
</para>
</section>
<section xml:id="beam-structure">
<title>Structure</title>
<para>
All BEAM-related expressions are available via the top-level
<literal>beam</literal> attribute, which includes:
</para>
<itemizedlist>
<listitem>
<title>BEAM Languages (Erlang, Elixir &amp; LFE)</title>
<section xml:id="beam-introduction">
<title>Introduction</title>
<para>
<literal>interpreters</literal>: a set of compilers running on the BEAM,
including multiple Erlang/OTP versions
(<literal>beam.interpreters.erlangR19</literal>, etc), Elixir
(<literal>beam.interpreters.elixir</literal>) and LFE
(<literal>beam.interpreters.lfe</literal>).
In this document and related Nix expressions, we use the term,
<emphasis>BEAM</emphasis>, to describe the environment. BEAM is the name
of the Erlang Virtual Machine and, as far as we're concerned, from a
packaging perspective, all languages that run on the BEAM are
interchangeable. That which varies, like the build system, is transparent
to users of any given BEAM package, so we make no distinction.
</para>
</listitem>
<listitem>
</section>
<section xml:id="beam-structure">
<title>Structure</title>
<para>
<literal>packages</literal>: a set of package sets, each compiled with a
specific Erlang/OTP version, e.g.
<literal>beam.packages.erlangR19</literal>.
All BEAM-related expressions are available via the top-level
<literal>beam</literal> attribute, which includes:
</para>
</listitem>
</itemizedlist>
<para>
The default Erlang compiler, defined by
<literal>beam.interpreters.erlang</literal>, is aliased as
<literal>erlang</literal>. The default BEAM package set is defined by
<literal>beam.packages.erlang</literal> and aliased at the top level as
<literal>beamPackages</literal>.
</para>
<para>
To create a package set built with a custom Erlang version, use the lambda,
<literal>beam.packagesWith</literal>, which accepts an Erlang/OTP derivation
and produces a package set similar to
<literal>beam.packages.erlang</literal>.
</para>
<para>
Many Erlang/OTP distributions available in
<literal>beam.interpreters</literal> have versions with ODBC and/or Java
enabled. For example, there's
<literal>beam.interpreters.erlangR19_odbc_javac</literal>, which corresponds
to <literal>beam.interpreters.erlangR19</literal>.
</para>
<para xml:id="erlang-call-package">
We also provide the lambda,
<literal>beam.packages.erlang.callPackage</literal>, which simplifies
writing BEAM package definitions by injecting all packages from
<literal>beam.packages.erlang</literal> into the top-level context.
</para>
</section>
<section xml:id="build-tools">
<title>Build Tools</title>
<section xml:id="build-tools-rebar3">
<title>Rebar3</title>
<para>
By default, Rebar3 wants to manage its own dependencies. This is perfectly
acceptable in the normal, non-Nix setup, but in the Nix world, it is not.
To rectify this, we provide two versions of Rebar3:
<itemizedlist>
<listitem>
<para>
<literal>rebar3</literal>: patched to remove the ability to download
anything. When not running it via <literal>nix-shell</literal> or
<literal>nix-build</literal>, it's probably not going to work as
desired.
</para>
</listitem>
<listitem>
<para>
<literal>rebar3-open</literal>: the normal, unmodified Rebar3. It should
work exactly as would any other version of Rebar3. Any Erlang package
should rely on <literal>rebar3</literal> instead. See
<xref
linkend="rebar3-packages"/>.
</para>
</listitem>
<listitem>
<para>
<literal>interpreters</literal>: a set of compilers running on the
BEAM, including multiple Erlang/OTP versions
(<literal>beam.interpreters.erlangR19</literal>, etc), Elixir
(<literal>beam.interpreters.elixir</literal>) and LFE
(<literal>beam.interpreters.lfe</literal>).
</para>
</listitem>
<listitem>
<para>
<literal>packages</literal>: a set of package sets, each compiled with
a specific Erlang/OTP version, e.g.
<literal>beam.packages.erlangR19</literal>.
</para>
</listitem>
</itemizedlist>
</para>
<para>
The default Erlang compiler, defined by
<literal>beam.interpreters.erlang</literal>, is aliased as
<literal>erlang</literal>. The default BEAM package set is defined by
<literal>beam.packages.erlang</literal> and aliased at the top level as
<literal>beamPackages</literal>.
</para>
<para>
To create a package set built with a custom Erlang version, use the
lambda, <literal>beam.packagesWith</literal>, which accepts an Erlang/OTP
derivation and produces a package set similar to
<literal>beam.packages.erlang</literal>.
</para>
<para>
Many Erlang/OTP distributions available in
<literal>beam.interpreters</literal> have versions with ODBC and/or Java
enabled. For example, there's
<literal>beam.interpreters.erlangR19_odbc_javac</literal>, which
corresponds to <literal>beam.interpreters.erlangR19</literal>.
</para>
<para xml:id="erlang-call-package">
We also provide the lambda,
<literal>beam.packages.erlang.callPackage</literal>, which simplifies
writing BEAM package definitions by injecting all packages from
<literal>beam.packages.erlang</literal> into the top-level context.
</para>
</section>
<section xml:id="build-tools">
<title>Build Tools</title>
<section xml:id="build-tools-rebar3">
<title>Rebar3</title>
<para>
By default, Rebar3 wants to manage its own dependencies. This is perfectly
acceptable in the normal, non-Nix setup, but in the Nix world, it is not.
To rectify this, we provide two versions of Rebar3:
<itemizedlist>
<listitem>
<para>
<literal>rebar3</literal>: patched to remove the ability to download
anything. When not running it via <literal>nix-shell</literal> or
<literal>nix-build</literal>, it's probably not going to work as
desired.
</para>
</listitem>
<listitem>
<para>
<literal>rebar3-open</literal>: the normal, unmodified Rebar3. It
should work exactly as would any other version of Rebar3. Any Erlang
package should rely on <literal>rebar3</literal> instead. See <xref
linkend="rebar3-packages"/>.
</para>
</listitem>
</itemizedlist>
</para>
</section>
<section xml:id="build-tools-other">
<title>Mix &amp; Erlang.mk</title>
<para>
Both Mix and Erlang.mk work exactly as expected. There is a bootstrap
process that needs to be run for both, however, which is supported by the
<literal>buildMix</literal> and <literal>buildErlangMk</literal>
derivations, respectively.
</para>
<title>Mix &amp; Erlang.mk</title>
<para>
Both Mix and Erlang.mk work exactly as expected. There is a bootstrap
process that needs to be run for both, however, which is supported by the
<literal>buildMix</literal> and <literal>buildErlangMk</literal>
derivations, respectively.
</para>
</section>
</section>
</section>
<section xml:id="how-to-install-beam-packages">
<section xml:id="how-to-install-beam-packages">
<title>How to Install BEAM Packages</title>
<para>
BEAM packages are not registered at the top level, simply because they are
not relevant to the vast majority of Nix users. They are installable using
the <literal>beam.packages.erlang</literal> attribute set (aliased as
<literal>beamPackages</literal>), which points to packages built by the
default Erlang/OTP version in Nixpkgs, as defined by
<literal>beam.interpreters.erlang</literal>. To list the available packages
in <literal>beamPackages</literal>, use the following command:
BEAM packages are not registered at the top level, simply because they are
not relevant to the vast majority of Nix users. They are installable using
the <literal>beam.packages.erlang</literal> attribute set (aliased as
<literal>beamPackages</literal>), which points to packages built by the
default Erlang/OTP version in Nixpkgs, as defined by
<literal>beam.interpreters.erlang</literal>.
To list the available packages in
<literal>beamPackages</literal>, use the following command:
</para>
<programlisting>
<programlisting>
$ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -qaP -A beamPackages
beamPackages.esqlite esqlite-0.2.1
beamPackages.goldrush goldrush-0.1.7
@@ -141,43 +128,34 @@ beamPackages.lager lager-3.0.2
beamPackages.meck meck-0.8.3
beamPackages.rebar3-pc pc-1.1.0
</programlisting>
<para>
To install any of those packages into your profile, refer to them by their
attribute path (first column):
To install any of those packages into your profile, refer to them by their
attribute path (first column):
</para>
<programlisting>
<programlisting>
$ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
</programlisting>
<para>
The attribute path of any BEAM package corresponds to the name of that
particular package in <link xlink:href="https://hex.pm">Hex</link> or its
OTP Application/Release name.
The attribute path of any BEAM package corresponds to the name of that
particular package in <link xlink:href="https://hex.pm">Hex</link> or its
OTP Application/Release name.
</para>
</section>
<section xml:id="packaging-beam-applications">
</section>
<section xml:id="packaging-beam-applications">
<title>Packaging BEAM Applications</title>
<section xml:id="packaging-erlang-applications">
<title>Erlang Applications</title>
<section xml:id="rebar3-packages">
<title>Rebar3 Packages</title>
<para>
The Nix function, <literal>buildRebar3</literal>, defined in
<literal>beam.packages.erlang.buildRebar3</literal> and aliased at the top
level, can be used to build a derivation that understands how to build a
Rebar3 project. For example, we can build
<link
xlink:href="https://github.com/erlang-nix/hex2nix">hex2nix</link>
as follows:
</para>
<programlisting>
<title>Erlang Applications</title>
<section xml:id="rebar3-packages">
<title>Rebar3 Packages</title>
<para>
The Nix function, <literal>buildRebar3</literal>, defined in
<literal>beam.packages.erlang.buildRebar3</literal> and aliased at the
top level, can be used to build a derivation that understands how to
build a Rebar3 project. For example, we can build <link
xlink:href="https://github.com/erlang-nix/hex2nix">hex2nix</link> as
follows:
</para>
<programlisting>
{ stdenv, fetchFromGitHub, buildRebar3, ibrowse, jsx, erlware_commons }:
buildRebar3 rec {
@@ -194,40 +172,33 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
beamDeps = [ ibrowse jsx erlware_commons ];
}
</programlisting>
<para>
Such derivations are callable with
<literal>beam.packages.erlang.callPackage</literal> (see
<xref
linkend="erlang-call-package"/>). To call this package using
the normal <literal>callPackage</literal>, refer to dependency packages
via <literal>beamPackages</literal>, e.g.
<literal>beamPackages.ibrowse</literal>.
</para>
<para>
Notably, <literal>buildRebar3</literal> includes
<literal>beamDeps</literal>, while <literal>stdenv.mkDerivation</literal>
does not. BEAM dependencies added there will be correctly handled by the
system.
</para>
<para>
If a package needs to compile native code via Rebar3's port compilation
mechanism, add <literal>compilePort = true;</literal> to the derivation.
</para>
</section>
<section xml:id="erlang-mk-packages">
<title>Erlang.mk Packages</title>
<para>
Erlang.mk functions similarly to Rebar3, except we use
<literal>buildErlangMk</literal> instead of
<literal>buildRebar3</literal>.
</para>
<programlisting>
<para>
Such derivations are callable with
<literal>beam.packages.erlang.callPackage</literal> (see <xref
linkend="erlang-call-package"/>). To call this package using the normal
<literal>callPackage</literal>, refer to dependency packages via
<literal>beamPackages</literal>, e.g.
<literal>beamPackages.ibrowse</literal>.
</para>
<para>
Notably, <literal>buildRebar3</literal> includes
<literal>beamDeps</literal>, while
<literal>stdenv.mkDerivation</literal> does not. BEAM dependencies added
there will be correctly handled by the system.
</para>
<para>
If a package needs to compile native code via Rebar3's port compilation
mechanism, add <literal>compilePort = true;</literal> to the derivation.
</para>
</section>
<section xml:id="erlang-mk-packages">
<title>Erlang.mk Packages</title>
<para>
Erlang.mk functions similarly to Rebar3, except we use
<literal>buildErlangMk</literal> instead of
<literal>buildRebar3</literal>.
</para>
<programlisting>
{ buildErlangMk, fetchHex, cowlib, ranch }:
buildErlangMk {
@@ -251,17 +222,14 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
};
}
</programlisting>
</section>
<section xml:id="mix-packages">
<title>Mix Packages</title>
<para>
Mix functions similarly to Rebar3, except we use
<literal>buildMix</literal> instead of <literal>buildRebar3</literal>.
</para>
<programlisting>
</section>
<section xml:id="mix-packages">
<title>Mix Packages</title>
<para>
Mix functions similarly to Rebar3, except we use
<literal>buildMix</literal> instead of <literal>buildRebar3</literal>.
</para>
<programlisting>
{ buildMix, fetchHex, plug, absinthe }:
buildMix {
@@ -285,12 +253,10 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
};
}
</programlisting>
<para>
Alternatively, we can use <literal>buildHex</literal> as a shortcut:
</para>
<programlisting>
<para>
Alternatively, we can use <literal>buildHex</literal> as a shortcut:
</para>
<programlisting>
{ buildHex, buildMix, plug, absinthe }:
buildHex {
@@ -312,25 +278,21 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
};
}
</programlisting>
</section>
</section>
</section>
</section>
<section xml:id="how-to-develop">
</section>
<section xml:id="how-to-develop">
<title>How to Develop</title>
<section xml:id="accessing-an-environment">
<title>Accessing an Environment</title>
<para>
Often, we simply want to access a valid environment that contains a
specific package and its dependencies. We can accomplish that with the
<literal>env</literal> attribute of a derivation. For example, let's say we
want to access an Erlang REPL with <literal>ibrowse</literal> loaded up. We
could do the following:
</para>
<programlisting>
<title>Accessing an Environment</title>
<para>
Often, we simply want to access a valid environment that contains a
specific package and its dependencies. We can accomplish that with the
<literal>env</literal> attribute of a derivation. For example, let's say
we want to access an Erlang REPL with <literal>ibrowse</literal> loaded
up. We could do the following:
</para>
<programlisting>
$ nix-shell -A beamPackages.ibrowse.env --run "erl"
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
@@ -371,25 +333,22 @@ $ nix-env -f &quot;&lt;nixpkgs&gt;&quot; -iA beamPackages.ibrowse
ok
2>
</programlisting>
<para>
Notice the <literal>-A beamPackages.ibrowse.env</literal>. That is the key
to this functionality.
</para>
<para>
Notice the <literal>-A beamPackages.ibrowse.env</literal>. That is the key
to this functionality.
</para>
</section>
<section xml:id="creating-a-shell">
<title>Creating a Shell</title>
<para>
Getting access to an environment often isn't enough to do real development.
Usually, we need to create a <literal>shell.nix</literal> file and do our
development inside of the environment specified therein. This file looks a
lot like the packaging described above, except that <literal>src</literal>
points to the project root and we call the package directly.
</para>
<programlisting>
<title>Creating a Shell</title>
<para>
Getting access to an environment often isn't enough to do real
development. Usually, we need to create a <literal>shell.nix</literal>
file and do our development inside of the environment specified therein.
This file looks a lot like the packaging described above, except that
<literal>src</literal> points to the project root and we call the package
directly.
</para>
<programlisting>
{ pkgs ? import &quot;&lt;nixpkgs&quot;&gt; {} }:
with pkgs;
@@ -409,16 +368,13 @@ in
drv
</programlisting>
<section xml:id="building-in-a-shell">
<section xml:id="building-in-a-shell">
<title>Building in a Shell (for Mix Projects)</title>
<para>
We can leverage the support of the derivation, irrespective of the build
derivation, by calling the commands themselves.
We can leverage the support of the derivation, irrespective of the build
derivation, by calling the commands themselves.
</para>
<programlisting>
<programlisting>
# =============================================================================
# Variables
# =============================================================================
@@ -475,54 +431,44 @@ analyze: build plt
$(NIX_SHELL) --run "mix dialyzer --no-compile"
</programlisting>
<para>
Using a <literal>shell.nix</literal> as described (see
<xref
Using a <literal>shell.nix</literal> as described (see <xref
linkend="creating-a-shell"/>) should just work. Aside from
<literal>test</literal>, <literal>plt</literal>, and
<literal>analyze</literal>, the Make targets work just fine for all of the
build derivations.
<literal>test</literal>, <literal>plt</literal>, and
<literal>analyze</literal>, the Make targets work just fine for all of the
build derivations.
</para>
</section>
</section>
</section>
<section xml:id="generating-packages-from-hex-with-hex2nix">
</section>
</section>
<section xml:id="generating-packages-from-hex-with-hex2nix">
<title>Generating Packages from Hex with <literal>hex2nix</literal></title>
<para>
Updating the <link xlink:href="https://hex.pm">Hex</link> package set
requires
<link
xlink:href="https://github.com/erlang-nix/hex2nix">hex2nix</link>.
Given the path to the Erlang modules (usually
<literal>pkgs/development/erlang-modules</literal>), it will dump a file
called <literal>hex-packages.nix</literal>, containing all the packages that
use a recognized build system in
<link
xlink:href="https://hex.pm">Hex</link>. It can't be determined,
however, whether every package is buildable.
</para>
<para>
To make life easier for our users, try to build every
<link
xlink:href="https://hex.pm">Hex</link> package and remove those
that fail. To do that, simply run the following command in the root of your
<literal>nixpkgs</literal> repository:
</para>
<programlisting>
Updating the <link xlink:href="https://hex.pm">Hex</link> package set
requires <link
xlink:href="https://github.com/erlang-nix/hex2nix">hex2nix</link>. Given the
path to the Erlang modules (usually
<literal>pkgs/development/erlang-modules</literal>), it will dump a file
called <literal>hex-packages.nix</literal>, containing all the packages that
use a recognized build system in <link
xlink:href="https://hex.pm">Hex</link>. It can't be determined, however,
whether every package is buildable.
</para>
<para>
To make life easier for our users, try to build every <link
xlink:href="https://hex.pm">Hex</link> package and remove those that fail.
To do that, simply run the following command in the root of your
<literal>nixpkgs</literal> repository:
</para>
<programlisting>
$ nix-build -A beamPackages
</programlisting>
<para>
That will attempt to build every package in <literal>beamPackages</literal>.
Then manually remove those that fail. Hopefully, someone will improve
<link
xlink:href="https://github.com/erlang-nix/hex2nix">hex2nix</link>
in the future to automate the process.
</para>
</section>
<para>
That will attempt to build every package in
<literal>beamPackages</literal>. Then manually remove those that fail.
Hopefully, someone will improve <link
xlink:href="https://github.com/erlang-nix/hex2nix">hex2nix</link> in the
future to automate the process.
</para>
</section>
</section>

View File

@@ -1,37 +1,40 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-bower">
<title>Bower</title>
<para>
<link xlink:href="http://bower.io">Bower</link> is a package manager for web
site front-end components. Bower packages (comprising of build artefacts and
sometimes sources) are stored in <command>git</command> repositories,
typically on Github. The package registry is run by the Bower team with
package metadata coming from the <filename>bower.json</filename> file within
each package.
</para>
<title>Bower</title>
<para>
The end result of running Bower is a <filename>bower_components</filename>
directory which can be included in the web app's build process.
</para>
<para>
<link xlink:href="http://bower.io">Bower</link> is a package manager
for web site front-end components. Bower packages (comprising of
build artefacts and sometimes sources) are stored in
<command>git</command> repositories, typically on Github. The
package registry is run by the Bower team with package metadata
coming from the <filename>bower.json</filename> file within each
package.
</para>
<para>
<para>
The end result of running Bower is a
<filename>bower_components</filename> directory which can be included
in the web app's build process.
</para>
<para>
Bower can be run interactively, by installing
<varname>nodePackages.bower</varname>. More interestingly, the Bower
components can be declared in a Nix derivation, with the help of
<varname>nodePackages.bower2nix</varname>.
</para>
</para>
<section xml:id="ssec-bower2nix-usage">
<section xml:id="ssec-bower2nix-usage">
<title><command>bower2nix</command> usage</title>
<para>
Suppose you have a <filename>bower.json</filename> with the following
contents:
<example xml:id="ex-bowerJson">
<title><filename>bower.json</filename></title>
<para>
Suppose you have a <filename>bower.json</filename> with the following contents:
<example xml:id="ex-bowerJson"><title><filename>bower.json</filename></title>
<programlisting language="json">
<![CDATA[{
"name": "my-web-app",
@@ -41,12 +44,14 @@
}
}]]>
</programlisting>
</example>
</para>
</example>
</para>
<para>
Running <command>bower2nix</command> will produce something like the
following output:
<para>
Running <command>bower2nix</command> will produce something like the
following output:
<programlisting language="nix">
<![CDATA[{ fetchbower, buildEnv }:
buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
@@ -55,31 +60,31 @@ buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
(fetchbower "jquery" "2.2.2" "1.9.1 - 2" "10sp5h98sqwk90y4k6hbdviwqzvzwqf47r3r51pakch5ii2y7js1")
]; }]]>
</programlisting>
</para>
</para>
<para>
Using the <command>bower2nix</command> command line arguments, the
output can be redirected to a file. A name like
<filename>bower-packages.nix</filename> would be fine.
</para>
<para>
The resulting derivation is a union of all the downloaded Bower
packages (and their dependencies). To use it, they still need to be
linked together by Bower, which is where
<varname>buildBowerComponents</varname> is useful.
</para>
</section>
<section xml:id="ssec-build-bower-components"><title><varname>buildBowerComponents</varname> function</title>
<para>
Using the <command>bower2nix</command> command line arguments, the output
can be redirected to a file. A name like
<filename>bower-packages.nix</filename> would be fine.
</para>
The function is implemented in <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/bower-modules/generic/default.nix">
<filename>pkgs/development/bower-modules/generic/default.nix</filename></link>.
Example usage:
<para>
The resulting derivation is a union of all the downloaded Bower packages
(and their dependencies). To use it, they still need to be linked together
by Bower, which is where <varname>buildBowerComponents</varname> is useful.
</para>
</section>
<section xml:id="ssec-build-bower-components">
<title><varname>buildBowerComponents</varname> function</title>
<para>
The function is implemented in
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/bower-modules/generic/default.nix">
<filename>pkgs/development/bower-modules/generic/default.nix</filename></link>.
Example usage:
<example xml:id="ex-buildBowerComponents">
<title>buildBowerComponents</title>
<example xml:id="ex-buildBowerComponents"><title>buildBowerComponents</title>
<programlisting language="nix">
bowerComponents = buildBowerComponents {
name = "my-web-app";
@@ -87,42 +92,42 @@ bowerComponents = buildBowerComponents {
src = myWebApp; <co xml:id="ex-buildBowerComponents-2" />
};
</programlisting>
</example>
</example>
</para>
<para>
In <xref linkend="ex-buildBowerComponents" />, the following arguments are
of special significance to the function:
<calloutlist>
<callout arearefs="ex-buildBowerComponents-1">
<para>
<varname>generated</varname> specifies the file which was created by
<command>bower2nix</command>.
</para>
</callout>
<callout arearefs="ex-buildBowerComponents-2">
<para>
<varname>src</varname> is your project's sources. It needs to contain a
<filename>bower.json</filename> file.
</para>
</callout>
</calloutlist>
</para>
<para>
In <xref linkend="ex-buildBowerComponents" />, the following arguments
are of special significance to the function:
<para>
<varname>buildBowerComponents</varname> will run Bower to link together the
output of <command>bower2nix</command>, resulting in a
<filename>bower_components</filename> directory which can be used.
</para>
<calloutlist>
<callout arearefs="ex-buildBowerComponents-1">
<para>
<varname>generated</varname> specifies the file which was created by <command>bower2nix</command>.
</para>
</callout>
<para>
Here is an example of a web frontend build process using
<command>gulp</command>. You might use <command>grunt</command>, or anything
else.
</para>
<callout arearefs="ex-buildBowerComponents-2">
<para>
<varname>src</varname> is your project's sources. It needs to
contain a <filename>bower.json</filename> file.
</para>
</callout>
</calloutlist>
</para>
<example xml:id="ex-bowerGulpFile">
<title>Example build script (<filename>gulpfile.js</filename>)</title>
<para>
<varname>buildBowerComponents</varname> will run Bower to link
together the output of <command>bower2nix</command>, resulting in a
<filename>bower_components</filename> directory which can be used.
</para>
<para>
Here is an example of a web frontend build process using
<command>gulp</command>. You might use <command>grunt</command>, or
anything else.
</para>
<example xml:id="ex-bowerGulpFile"><title>Example build script (<filename>gulpfile.js</filename>)</title>
<programlisting language="javascript">
<![CDATA[var gulp = require('gulp');
@@ -137,10 +142,10 @@ gulp.task('build', [], function () {
.pipe(gulp.dest("./gulpdist/"));
});]]>
</programlisting>
</example>
</example>
<example xml:id="ex-buildBowerComponentsDefaultNix">
<title>Full example — <filename>default.nix</filename></title>
<example xml:id="ex-buildBowerComponentsDefaultNix">
<title>Full example — <filename>default.nix</filename></title>
<programlisting language="nix">
{ myWebApp ? { outPath = ./.; name = "myWebApp"; }
, pkgs ? import &lt;nixpkgs&gt; {}
@@ -167,63 +172,73 @@ pkgs.stdenv.mkDerivation {
installPhase = "mv gulpdist $out";
}
</programlisting>
</example>
</example>
<para>
A few notes about <xref linkend="ex-buildBowerComponentsDefaultNix" />:
<calloutlist>
<callout arearefs="ex-buildBowerComponentsDefault-1">
<para>
The result of <varname>buildBowerComponents</varname> is an input to the
frontend build.
</para>
</callout>
<callout arearefs="ex-buildBowerComponentsDefault-2">
<para>
Whether to symlink or copy the <filename>bower_components</filename>
directory depends on the build tool in use. In this case a copy is used
to avoid <command>gulp</command> silliness with permissions.
</para>
</callout>
<callout arearefs="ex-buildBowerComponentsDefault-3">
<para>
<command>gulp</command> requires <varname>HOME</varname> to refer to a
writeable directory.
</para>
</callout>
<callout arearefs="ex-buildBowerComponentsDefault-4">
<para>
<para>
A few notes about <xref linkend="ex-buildBowerComponentsDefaultNix" />:
<calloutlist>
<callout arearefs="ex-buildBowerComponentsDefault-1">
<para>
The result of <varname>buildBowerComponents</varname> is an
input to the frontend build.
</para>
</callout>
<callout arearefs="ex-buildBowerComponentsDefault-2">
<para>
Whether to symlink or copy the
<filename>bower_components</filename> directory depends on the
build tool in use. In this case a copy is used to avoid
<command>gulp</command> silliness with permissions.
</para>
</callout>
<callout arearefs="ex-buildBowerComponentsDefault-3">
<para>
<command>gulp</command> requires <varname>HOME</varname> to
refer to a writeable directory.
</para>
</callout>
<callout arearefs="ex-buildBowerComponentsDefault-4">
<para>
The actual build command. Other tools could be used.
</para>
</callout>
</calloutlist>
</para>
</section>
</para>
</callout>
</calloutlist>
</para>
</section>
<section xml:id="ssec-bower2nix-troubleshooting">
<section xml:id="ssec-bower2nix-troubleshooting">
<title>Troubleshooting</title>
<variablelist>
<varlistentry>
<variablelist>
<varlistentry>
<term>
<literal>ENOCACHE</literal> errors from <varname>buildBowerComponents</varname>
<literal>ENOCACHE</literal> errors from
<varname>buildBowerComponents</varname>
</term>
<listitem>
<para>
This means that Bower was looking for a package version which doesn't
exist in the generated <filename>bower-packages.nix</filename>.
</para>
<para>
If <filename>bower.json</filename> has been updated, then run
<command>bower2nix</command> again.
</para>
<para>
It could also be a bug in <command>bower2nix</command> or
<command>fetchbower</command>. If possible, try reformulating the version
specification in <filename>bower.json</filename>.
</para>
<para>
This means that Bower was looking for a package version which
doesn't exist in the generated
<filename>bower-packages.nix</filename>.
</para>
<para>
If <filename>bower.json</filename> has been updated, then run
<command>bower2nix</command> again.
</para>
<para>
It could also be a bug in <command>bower2nix</command> or
<command>fetchbower</command>. If possible, try reformulating
the version specification in <filename>bower.json</filename>.
</para>
</listitem>
</varlistentry>
</variablelist>
</section>
</varlistentry>
</variablelist>
</section>
</section>

View File

@@ -1,64 +1,41 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-language-coq">
<title>Coq</title>
<para>
Coq libraries should be installed in
<literal>$(out)/lib/coq/${coq.coq-version}/user-contrib/</literal>. Such
directories are automatically added to the <literal>$COQPATH</literal>
environment variable by the hook defined in the Coq derivation.
</para>
<para>
Some extensions (plugins) might require OCaml and sometimes other OCaml
packages. The <literal>coq.ocamlPackages</literal> attribute can be used to
depend on the same package set Coq was built against.
</para>
<para>
Coq libraries may be compatible with some specific versions of Coq only. The
<literal>compatibleCoqVersions</literal> attribute is used to precisely
select those versions of Coq that are compatible with this derivation.
</para>
<para>
Here is a simple package example. It is a pure Coq library, thus it depends
on Coq. It builds on the Mathematical Components library, thus it also takes
<literal>mathcomp</literal> as <literal>buildInputs</literal>. Its
<literal>Makefile</literal> has been generated using
<literal>coq_makefile</literal> so we only have to set the
<literal>$COQLIB</literal> variable at install time.
</para>
<programlisting>
{ stdenv, fetchFromGitHub, coq, mathcomp }:
stdenv.mkDerivation rec {
name = "coq${coq.coq-version}-multinomials-${version}";
version = "1.0";
src = fetchFromGitHub {
owner = "math-comp";
repo = "multinomials";
rev = version;
sha256 = "1qmbxp1h81cy3imh627pznmng0kvv37k4hrwi2faa101s6bcx55m";
<title>Coq</title>
<para>
Coq libraries should be installed in
<literal>$(out)/lib/coq/${coq.coq-version}/user-contrib/</literal>.
Such directories are automatically added to the
<literal>$COQPATH</literal> environment variable by the hook defined
in the Coq derivation.
</para>
<para>
Some libraries require OCaml and sometimes also Camlp5. The exact
versions that were used to build Coq are saved in the
<literal>coq.ocaml</literal> and <literal>coq.camlp5</literal>
attributes.
</para>
<para>
Here is a simple package example. It is a pure Coq library, thus it
only depends on Coq. Its <literal>makefile</literal> has been
generated using <literal>coq_makefile</literal> so we only have to
set the <literal>$COQLIB</literal> variable at install time.
</para>
<programlisting>
{stdenv, fetchurl, coq}:
stdenv.mkDerivation {
src = fetchurl {
url = http://coq.inria.fr/pylons/contribs/files/Karatsuba/v8.4/Karatsuba.tar.gz;
sha256 = "0ymfpv4v49k4fm63nq6gcl1hbnnxrvjjp7yzc4973n49b853c5b1";
};
name = "coq-karatsuba";
buildInputs = [ coq ];
propagatedBuildInputs = [ mathcomp ];
installFlags = "COQLIB=$(out)/lib/coq/${coq.coq-version}/";
meta = {
description = "A Coq/SSReflect Library for Monoidal Rings and Multinomials";
inherit (src.meta) homepage;
license = stdenv.lib.licenses.cecill-b;
inherit (coq.meta) platforms;
};
passthru = {
compatibleCoqVersions = v: builtins.elem v [ "8.5" "8.6" "8.7" ];
};
}
</programlisting>
</section>

View File

@@ -1,185 +0,0 @@
# User's Guide to Emscripten in Nixpkgs
[Emscripten](https://github.com/kripken/emscripten): An LLVM-to-JavaScript Compiler
This section of the manual covers how to use `emscripten` in nixpkgs.
Minimal requirements:
* nix
* nixpkgs
Modes of use of `emscripten`:
* **Imperative usage** (on the command line):
If you want to work with `emcc`, `emconfigure` and `emmake` as you are used to from Ubuntu and similar distributions you can use these commands:
* `nix-env -i emscripten`
* `nix-shell -p emscripten`
* **Declarative usage**:
This mode is far more power full since this makes use of `nix` for dependency management of emscripten libraries and targets by using the `mkDerivation` which is implemented by `pkgs.emscriptenStdenv` and `pkgs.buildEmscriptenPackage`. The source for the packages is in `pkgs/top-level/emscripten-packages.nix` and the abstraction behind it in `pkgs/development/em-modules/generic/default.nix`.
* build and install all packages:
* `nix-env -iA emscriptenPackages`
* dev-shell for zlib implementation hacking:
* `nix-shell -A emscriptenPackages.zlib`
## Imperative usage
A few things to note:
* `export EMCC_DEBUG=2` is nice for debugging
* `~/.emscripten`, the build artifact cache sometimes creates issues and needs to be removed from time to time
## Declarative usage
Let's see two different examples from `pkgs/top-level/emscripten-packages.nix`:
* `pkgs.zlib.override`
* `pkgs.buildEmscriptenPackage`
Both are interesting concepts.
A special requirement of the `pkgs.buildEmscriptenPackage` is the `doCheck = true` is a default meaning that each emscriptenPackage requires a `checkPhase` implemented.
* Use `export EMCC_DEBUG=2` from within a emscriptenPackage's `phase` to get more detailed debug output what is going wrong.
* ~/.emscripten cache is requiring us to set `HOME=$TMPDIR` in individual phases. This makes compilation slower but also makes it more deterministic.
### Usage 1: pkgs.zlib.override
This example uses `zlib` from nixpkgs but instead of compiling **C** to **ELF** it compiles **C** to **JS** since we were using `pkgs.zlib.override` and changed stdenv to `pkgs.emscriptenStdenv`. A few adaptions and hacks were set in place to make it working. One advantage is that when `pkgs.zlib` is updated, it will automatically update this package as well. However, this can also be the downside...
See the `zlib` example:
zlib = (pkgs.zlib.override {
stdenv = pkgs.emscriptenStdenv;
}).overrideDerivation
(old: rec {
buildInputs = old.buildInputs ++ [ pkgconfig ];
# we need to reset this setting!
NIX_CFLAGS_COMPILE="";
configurePhase = ''
# FIXME: Some tests require writing at $HOME
HOME=$TMPDIR
runHook preConfigure
#export EMCC_DEBUG=2
emconfigure ./configure --prefix=$out --shared
runHook postConfigure
'';
dontStrip = true;
outputs = [ "out" ];
buildPhase = ''
emmake make
'';
installPhase = ''
emmake make install
'';
checkPhase = ''
echo "================= testing zlib using node ================="
echo "Compiling a custom test"
set -x
emcc -O2 -s EMULATE_FUNCTION_POINTER_CASTS=1 test/example.c -DZ_SOLO \
libz.so.${old.version} -I . -o example.js
echo "Using node to execute the test"
${pkgs.nodejs}/bin/node ./example.js
set +x
if [ $? -ne 0 ]; then
echo "test failed for some reason"
exit 1;
else
echo "it seems to work! very good."
fi
echo "================= /testing zlib using node ================="
'';
postPatch = pkgs.stdenv.lib.optionalString pkgs.stdenv.isDarwin ''
substituteInPlace configure \
--replace '/usr/bin/libtool' 'ar' \
--replace 'AR="libtool"' 'AR="ar"' \
--replace 'ARFLAGS="-o"' 'ARFLAGS="-r"'
'';
});
### Usage 2: pkgs.buildEmscriptenPackage
This `xmlmirror` example features a emscriptenPackage which is defined completely from this context and no `pkgs.zlib.override` is used.
xmlmirror = pkgs.buildEmscriptenPackage rec {
name = "xmlmirror";
buildInputs = [ pkgconfig autoconf automake libtool gnumake libxml2 nodejs openjdk json_c ];
nativeBuildInputs = [ pkgconfig zlib ];
src = pkgs.fetchgit {
url = "https://gitlab.com/odfplugfest/xmlmirror.git";
rev = "4fd7e86f7c9526b8f4c1733e5c8b45175860a8fd";
sha256 = "1jasdqnbdnb83wbcnyrp32f36w3xwhwp0wq8lwwmhqagxrij1r4b";
};
configurePhase = ''
rm -f fastXmlLint.js*
# a fix for ERROR:root:For asm.js, TOTAL_MEMORY must be a multiple of 16MB, was 234217728
# https://gitlab.com/odfplugfest/xmlmirror/issues/8
sed -e "s/TOTAL_MEMORY=234217728/TOTAL_MEMORY=268435456/g" -i Makefile.emEnv
# https://github.com/kripken/emscripten/issues/6344
# https://gitlab.com/odfplugfest/xmlmirror/issues/9
sed -e "s/\$(JSONC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(LIBXML20_LDFLAGS)/\$(JSONC_LDFLAGS) \$(LIBXML20_LDFLAGS) \$(ZLIB_LDFLAGS) /g" -i Makefile.emEnv
# https://gitlab.com/odfplugfest/xmlmirror/issues/11
sed -e "s/-o fastXmlLint.js/-s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]' -o fastXmlLint.js/g" -i Makefile.emEnv
'';
buildPhase = ''
HOME=$TMPDIR
make -f Makefile.emEnv
'';
outputs = [ "out" "doc" ];
installPhase = ''
mkdir -p $out/share
mkdir -p $doc/share/${name}
cp Demo* $out/share
cp -R codemirror-5.12 $out/share
cp fastXmlLint.js* $out/share
cp *.xsd $out/share
cp *.js $out/share
cp *.xhtml $out/share
cp *.html $out/share
cp *.json $out/share
cp *.rng $out/share
cp README.md $doc/share/${name}
'';
checkPhase = ''
'';
};
### Declarative debugging
Use `nix-shell -I nixpkgs=/some/dir/nixpkgs -A emscriptenPackages.libz` and from there you can go trough the individual steps. This makes it easy to build a good `unit test` or list the files of the project.
1. `nix-shell -I nixpkgs=/some/dir/nixpkgs -A emscriptenPackages.libz`
2. `cd /tmp/`
3. `unpackPhase`
4. cd libz-1.2.3
5. `configurePhase`
6. `buildPhase`
7. ... happy hacking...
## Summary
Using this toolchain makes it easy to leverage `nix` from NixOS, MacOSX or even Windows (WSL+ubuntu+nix). This toolchain is reproducible, behaves like the rest of the packages from nixpkgs and contains a set of well working examples to learn and adapt from.
If in trouble, ask the maintainers.

View File

@@ -1,14 +1,14 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-language-go">
<title>Go</title>
<para>
The function <varname>buildGoPackage</varname> builds standard Go programs.
</para>
<title>Go</title>
<example xml:id='ex-buildGoPackage'>
<title>buildGoPackage</title>
<para>The function <varname>buildGoPackage</varname> builds
standard Go programs.
</para>
<example xml:id='ex-buildGoPackage'><title>buildGoPackage</title>
<programlisting>
deis = buildGoPackage rec {
name = "deis-${version}";
@@ -29,56 +29,55 @@ deis = buildGoPackage rec {
buildFlags = "--tags release"; <co xml:id='ex-buildGoPackage-4' />
}
</programlisting>
</example>
</example>
<para>
<xref linkend='ex-buildGoPackage'/> is an example expression using
buildGoPackage, the following arguments are of special significance to the
function:
<calloutlist>
<callout arearefs='ex-buildGoPackage-1'>
<para>
<varname>goPackagePath</varname> specifies the package's canonical Go
import path.
</para>
</callout>
<callout arearefs='ex-buildGoPackage-2'>
<para>
<varname>subPackages</varname> limits the builder from building child
packages that have not been listed. If <varname>subPackages</varname> is
not specified, all child packages will be built.
</para>
<para>
In this example only <literal>github.com/deis/deis/client</literal> will
be built.
</para>
</callout>
<callout arearefs='ex-buildGoPackage-3'>
<para>
<varname>goDeps</varname> is where the Go dependencies of a Go program are
listed as a list of package source identified by Go import path. It could
be imported as a separate <varname>deps.nix</varname> file for
readability. The dependency data structure is described below.
</para>
</callout>
<callout arearefs='ex-buildGoPackage-4'>
<para>
<varname>buildFlags</varname> is a list of flags passed to the go build
command.
</para>
</callout>
</calloutlist>
</para>
<para><xref linkend='ex-buildGoPackage'/> is an example expression using buildGoPackage,
the following arguments are of special significance to the function:
<para>
The <varname>goDeps</varname> attribute can be imported from a separate
<varname>nix</varname> file that defines which Go libraries are needed and
should be included in <varname>GOPATH</varname> for
<varname>buildPhase</varname>.
</para>
<calloutlist>
<example xml:id='ex-goDeps'>
<title>deps.nix</title>
<callout arearefs='ex-buildGoPackage-1'>
<para>
<varname>goPackagePath</varname> specifies the package's canonical Go import path.
</para>
</callout>
<callout arearefs='ex-buildGoPackage-2'>
<para>
<varname>subPackages</varname> limits the builder from building child packages that
have not been listed. If <varname>subPackages</varname> is not specified, all child
packages will be built.
</para>
<para>
In this example only <literal>github.com/deis/deis/client</literal> will be built.
</para>
</callout>
<callout arearefs='ex-buildGoPackage-3'>
<para>
<varname>goDeps</varname> is where the Go dependencies of a Go program are listed
as a list of package source identified by Go import path.
It could be imported as a separate <varname>deps.nix</varname> file for
readability. The dependency data structure is described below.
</para>
</callout>
<callout arearefs='ex-buildGoPackage-4'>
<para>
<varname>buildFlags</varname> is a list of flags passed to the go build command.
</para>
</callout>
</calloutlist>
</para>
<para>The <varname>goDeps</varname> attribute can be imported from a separate
<varname>nix</varname> file that defines which Go libraries are needed and should
be included in <varname>GOPATH</varname> for <varname>buildPhase</varname>.
</para>
<example xml:id='ex-goDeps'><title>deps.nix</title>
<programlisting>
[ <co xml:id='ex-goDeps-1' />
{
@@ -101,60 +100,67 @@ deis = buildGoPackage rec {
}
]
</programlisting>
</example>
</example>
<para>
<calloutlist>
<callout arearefs='ex-goDeps-1'>
<para>
<varname>goDeps</varname> is a list of Go dependencies.
</para>
</callout>
<callout arearefs='ex-goDeps-2'>
<para>
<varname>goPackagePath</varname> specifies Go package import path.
</para>
</callout>
<callout arearefs='ex-goDeps-3'>
<para>
<varname>fetch type</varname> that needs to be used to get package source.
If <varname>git</varname> is used there should be <varname>url</varname>,
<varname>rev</varname> and <varname>sha256</varname> defined next to it.
</para>
</callout>
</calloutlist>
</para>
<para>
<para>
To extract dependency information from a Go package in automated way use
<link xlink:href="https://github.com/kamilchm/go2nix">go2nix</link>. It can
produce complete derivation and <varname>goDeps</varname> file for Go
programs.
</para>
<calloutlist>
<para>
<varname>buildGoPackage</varname> produces
<xref linkend='chap-multiple-output' xrefstyle="select: title" /> where
<varname>bin</varname> includes program binaries. You can test build a Go
binary as follows:
<screen>
<callout arearefs='ex-goDeps-1'>
<para>
<varname>goDeps</varname> is a list of Go dependencies.
</para>
</callout>
<callout arearefs='ex-goDeps-2'>
<para>
<varname>goPackagePath</varname> specifies Go package import path.
</para>
</callout>
<callout arearefs='ex-goDeps-3'>
<para>
<varname>fetch type</varname> that needs to be used to get package source. If <varname>git</varname>
is used there should be <varname>url</varname>, <varname>rev</varname> and <varname>sha256</varname>
defined next to it.
</para>
</callout>
</calloutlist>
</para>
<para>To extract dependency information from a Go package in automated way use <link xlink:href="https://github.com/kamilchm/go2nix">go2nix</link>.
It can produce complete derivation and <varname>goDeps</varname> file for Go programs.</para>
<para>
<varname>buildGoPackage</varname> produces <xref linkend='chap-multiple-output' xrefstyle="select: title" />
where <varname>bin</varname> includes program binaries. You can test build a Go binary as follows:
<screen>
$ nix-build -A deis.bin
</screen>
or build all outputs with:
<screen>
<screen>
$ nix-build -A deis.all
</screen>
<varname>bin</varname> output will be installed by default with
<varname>nix-env -i</varname> or <varname>systemPackages</varname>.
</para>
<para>
You may use Go packages installed into the active Nix profiles by adding the
following to your ~/.bashrc:
<varname>bin</varname> output will be installed by default with <varname>nix-env -i</varname>
or <varname>systemPackages</varname>.
</para>
<para>
You may use Go packages installed into the active Nix profiles by adding
the following to your ~/.bashrc:
<screen>
for p in $NIX_PROFILES; do
GOPATH="$p/share/go:$GOPATH"
done
</screen>
</para>
</para>
</section>

View File

@@ -0,0 +1,954 @@
---
title: User's Guide for Haskell in Nixpkgs
author: Peter Simons
date: 2015-06-01
---
# User's Guide to the Haskell Infrastructure
## How to install Haskell packages
Nixpkgs distributes build instructions for all Haskell packages registered on
[Hackage](http://hackage.haskell.org/), but strangely enough normal Nix package
lookups don't seem to discover any of them, except for the default version of ghc, cabal-install, and stack:
```
$ nix-env -i alex
error: selector alex matches no derivations
$ nix-env -qa ghc
ghc-7.10.2
```
The Haskell package set is not registered in the top-level namespace because it
is *huge*. If all Haskell packages were visible to these commands, then
name-based search/install operations would be much slower than they are now. We
avoided that by keeping all Haskell-related packages in a separate attribute
set called `haskellPackages`, which the following command will list:
```
$ nix-env -f "<nixpkgs>" -qaP -A haskellPackages
haskellPackages.a50 a50-0.5
haskellPackages.abacate haskell-abacate-0.0.0.0
haskellPackages.abcBridge haskell-abcBridge-0.12
haskellPackages.afv afv-0.1.1
haskellPackages.alex alex-3.1.4
haskellPackages.Allure Allure-0.4.101.1
haskellPackages.alms alms-0.6.7
[... some 8000 entries omitted ...]
```
To install any of those packages into your profile, refer to them by their
attribute path (first column):
```shell
nix-env -f "<nixpkgs>" -iA haskellPackages.Allure ...
```
The attribute path of any Haskell packages corresponds to the name of that
particular package on Hackage: the package `cabal-install` has the attribute
`haskellPackages.cabal-install`, and so on. (Actually, this convention causes
trouble with packages like `3dmodels` and `4Blocks`, because these names are
invalid identifiers in the Nix language. The issue of how to deal with these
rare corner cases is currently unresolved.)
Haskell packages who's Nix name (second column) begins with a `haskell-` prefix
are packages that provide a library whereas packages without that prefix
provide just executables. Libraries may provide executables too, though: the
package `haskell-pandoc`, for example, installs both a library and an
application. You can install and use Haskell executables just like any other
program in Nixpkgs, but using Haskell libraries for development is a bit
trickier and we'll address that subject in great detail in section [How to
create a development environment].
Attribute paths are deterministic inside of Nixpkgs, but the path necessary to
reach Nixpkgs varies from system to system. We dodged that problem by giving
`nix-env` an explicit `-f "<nixpkgs>"` parameter, but if you call `nix-env`
without that flag, then chances are the invocation fails:
```
$ nix-env -iA haskellPackages.cabal-install
error: attribute haskellPackages in selection path
haskellPackages.cabal-install not found
```
On NixOS, for example, Nixpkgs does *not* exist in the top-level namespace by
default. To figure out the proper attribute path, it's easiest to query for the
path of a well-known Nixpkgs package, i.e.:
```
$ nix-env -qaP coreutils
nixos.coreutils coreutils-8.23
```
If your system responds like that (most NixOS installations will), then the
attribute path to `haskellPackages` is `nixos.haskellPackages`. Thus, if you
want to use `nix-env` without giving an explicit `-f` flag, then that's the way
to do it:
```shell
nix-env -qaP -A nixos.haskellPackages
nix-env -iA nixos.haskellPackages.cabal-install
```
Our current default compiler is GHC 7.10.x and the `haskellPackages` set
contains packages built with that particular version. Nixpkgs contains the
latest major release of every GHC since 6.10.4, however, and there is a whole
family of package sets available that defines Hackage packages built with each
of those compilers, too:
```shell
nix-env -f "<nixpkgs>" -qaP -A haskell.packages.ghc6123
nix-env -f "<nixpkgs>" -qaP -A haskell.packages.ghc763
```
The name `haskellPackages` is really just a synonym for
`haskell.packages.ghc7102`, because we prefer that package set internally and
recommend it to our users as their default choice, but ultimately you are free
to compile your Haskell packages with any GHC version you please. The following
command displays the complete list of available compilers:
```
$ nix-env -f "<nixpkgs>" -qaP -A haskell.compiler
haskell.compiler.ghc6104 ghc-6.10.4
haskell.compiler.ghc6123 ghc-6.12.3
haskell.compiler.ghc704 ghc-7.0.4
haskell.compiler.ghc722 ghc-7.2.2
haskell.compiler.ghc742 ghc-7.4.2
haskell.compiler.ghc763 ghc-7.6.3
haskell.compiler.ghc784 ghc-7.8.4
haskell.compiler.ghc7102 ghc-7.10.2
haskell.compiler.ghcHEAD ghc-7.11.20150402
haskell.compiler.ghcNokinds ghc-nokinds-7.11.20150704
haskell.compiler.ghcjs ghcjs-0.1.0
haskell.compiler.jhc jhc-0.8.2
haskell.compiler.uhc uhc-1.1.9.0
```
We have no package sets for `jhc` or `uhc` yet, unfortunately, but for every
version of GHC listed above, there exists a package set based on that compiler.
Also, the attributes `haskell.compiler.ghcXYC` and
`haskell.packages.ghcXYC.ghc` are synonymous for the sake of convenience.
## How to create a development environment
### How to install a compiler
A simple development environment consists of a Haskell compiler and one or both
of the tools `cabal-install` and `stack`. We saw in section
[How to install Haskell packages] how you can install those programs into your
user profile:
```shell
nix-env -f "<nixpkgs>" -iA haskellPackages.ghc haskellPackages.cabal-install
```
Instead of the default package set `haskellPackages`, you can also use the more
precise name `haskell.compiler.ghc7102`, which has the advantage that it refers
to the same GHC version regardless of what Nixpkgs considers "default" at any
given time.
Once you've made those tools available in `$PATH`, it's possible to build
Hackage packages the same way people without access to Nix do it all the time:
```shell
cabal get lens-4.11 && cd lens-4.11
cabal install -j --dependencies-only
cabal configure
cabal build
```
If you enjoy working with Cabal sandboxes, then that's entirely possible too:
just execute the command
```shell
cabal sandbox init
```
before installing the required dependencies.
The `nix-shell` utility makes it easy to switch to a different compiler
version; just enter the Nix shell environment with the command
```shell
nix-shell -p haskell.compiler.ghc784
```
to bring GHC 7.8.4 into `$PATH`. Alternatively, you can use Stack instead of
`nix-shell` directly to select compiler versions and other build tools
per-project. It uses `nix-shell` under the hood when Nix support is turned on.
See [How to build a Haskell project using Stack].
If you're using `cabal-install`, re-running `cabal configure` inside the spawned
shell switches your build to use that compiler instead. If you're working on
a project that doesn't depend on any additional system libraries outside of GHC,
then it's even sufficient to just run the `cabal configure` command inside of
the shell:
```shell
nix-shell -p haskell.compiler.ghc784 --command "cabal configure"
```
Afterwards, all other commands like `cabal build` work just fine in any shell
environment, because the configure phase recorded the absolute paths to all
required tools like GHC in its build configuration inside of the `dist/`
directory. Please note, however, that `nix-collect-garbage` can break such an
environment because the Nix store paths created by `nix-shell` aren't "alive"
anymore once `nix-shell` has terminated. If you find that your Haskell builds
no longer work after garbage collection, then you'll have to re-run `cabal
configure` inside of a new `nix-shell` environment.
### How to install a compiler with libraries
GHC expects to find all installed libraries inside of its own `lib` directory.
This approach works fine on traditional Unix systems, but it doesn't work for
Nix, because GHC's store path is immutable once it's built. We cannot install
additional libraries into that location. As a consequence, our copies of GHC
don't know any packages except their own core libraries, like `base`,
`containers`, `Cabal`, etc.
We can register additional libraries to GHC, however, using a special build
function called `ghcWithPackages`. That function expects one argument: a
function that maps from an attribute set of Haskell packages to a list of
packages, which determines the libraries known to that particular version of
GHC. For example, the Nix expression `ghcWithPackages (pkgs: [pkgs.mtl])`
generates a copy of GHC that has the `mtl` library registered in addition to
its normal core packages:
```
$ nix-shell -p "haskellPackages.ghcWithPackages (pkgs: [pkgs.mtl])"
[nix-shell:~]$ ghc-pkg list mtl
/nix/store/zy79...-ghc-7.10.2/lib/ghc-7.10.2/package.conf.d:
mtl-2.2.1
```
This function allows users to define their own development environment by means
of an override. After adding the following snippet to `~/.config/nixpkgs/config.nix`,
```nix
{
packageOverrides = super: let self = super.pkgs; in
{
myHaskellEnv = self.haskell.packages.ghc7102.ghcWithPackages
(haskellPackages: with haskellPackages; [
# libraries
arrows async cgi criterion
# tools
cabal-install haskintex
]);
};
}
```
it's possible to install that compiler with `nix-env -f "<nixpkgs>" -iA
myHaskellEnv`. If you'd like to switch that development environment to a
different version of GHC, just replace the `ghc7102` bit in the previous
definition with the appropriate name. Of course, it's also possible to define
any number of these development environments! (You can't install two of them
into the same profile at the same time, though, because that would result in
file conflicts.)
The generated `ghc` program is a wrapper script that re-directs the real
GHC executable to use a new `lib` directory --- one that we specifically
constructed to contain all those packages the user requested:
```
$ cat $(type -p ghc)
#! /nix/store/xlxj...-bash-4.3-p33/bin/bash -e
export NIX_GHC=/nix/store/19sm...-ghc-7.10.2/bin/ghc
export NIX_GHCPKG=/nix/store/19sm...-ghc-7.10.2/bin/ghc-pkg
export NIX_GHC_DOCDIR=/nix/store/19sm...-ghc-7.10.2/share/doc/ghc/html
export NIX_GHC_LIBDIR=/nix/store/19sm...-ghc-7.10.2/lib/ghc-7.10.2
exec /nix/store/j50p...-ghc-7.10.2/bin/ghc "-B$NIX_GHC_LIBDIR" "$@"
```
The variables `$NIX_GHC`, `$NIX_GHCPKG`, etc. point to the *new* store path
`ghcWithPackages` constructed specifically for this environment. The last line
of the wrapper script then executes the real `ghc`, but passes the path to the
new `lib` directory using GHC's `-B` flag.
The purpose of those environment variables is to work around an impurity in the
popular [ghc-paths](http://hackage.haskell.org/package/ghc-paths) library. That
library promises to give its users access to GHC's installation paths. Only,
the library can't possible know that path when it's compiled, because the path
GHC considers its own is determined only much later, when the user configures
it through `ghcWithPackages`. So we [patched
ghc-paths](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/haskell-modules/patches/ghc-paths-nix.patch)
to return the paths found in those environment variables at run-time rather
than trying to guess them at compile-time.
To make sure that mechanism works properly all the time, we recommend that you
set those variables to meaningful values in your shell environment, too, i.e.
by adding the following code to your `~/.bashrc`:
```bash
if type >/dev/null 2>&1 -p ghc; then
eval "$(egrep ^export "$(type -p ghc)")"
fi
```
If you are certain that you'll use only one GHC environment which is located in
your user profile, then you can use the following code, too, which has the
advantage that it doesn't contain any paths from the Nix store, i.e. those
settings always remain valid even if a `nix-env -u` operation updates the GHC
environment in your profile:
```bash
if [ -e ~/.nix-profile/bin/ghc ]; then
export NIX_GHC="$HOME/.nix-profile/bin/ghc"
export NIX_GHCPKG="$HOME/.nix-profile/bin/ghc-pkg"
export NIX_GHC_DOCDIR="$HOME/.nix-profile/share/doc/ghc/html"
export NIX_GHC_LIBDIR="$HOME/.nix-profile/lib/ghc-$($NIX_GHC --numeric-version)"
fi
```
### How to install a compiler with libraries, hoogle and documentation indexes
If you plan to use your environment for interactive programming, not just
compiling random Haskell code, you might want to replace `ghcWithPackages` in
all the listings above with `ghcWithHoogle`.
This environment generator not only produces an environment with GHC and all
the specified libraries, but also generates a `hoogle` and `haddock` indexes
for all the packages, and provides a wrapper script around `hoogle` binary that
uses all those things. A precise name for this thing would be
"`ghcWithPackagesAndHoogleAndDocumentationIndexes`", which is, regrettably, too
long and scary.
For example, installing the following environment
```nix
{
packageOverrides = super: let self = super.pkgs; in
{
myHaskellEnv = self.haskellPackages.ghcWithHoogle
(haskellPackages: with haskellPackages; [
# libraries
arrows async cgi criterion
# tools
cabal-install haskintex
]);
};
}
```
allows one to browse module documentation index [not too dissimilar to
this](https://downloads.haskell.org/~ghc/latest/docs/html/libraries/index.html)
for all the specified packages and their dependencies by directing a browser of
choice to `~/.nix-profiles/share/doc/hoogle/index.html` (or
`/run/current-system/sw/share/doc/hoogle/index.html` in case you put it in
`environment.systemPackages` in NixOS).
After you've marveled enough at that try adding the following to your
`~/.ghc/ghci.conf`
```
:def hoogle \s -> return $ ":! hoogle search -cl --count=15 \"" ++ s ++ "\""
:def doc \s -> return $ ":! hoogle search -cl --info \"" ++ s ++ "\""
```
and test it by typing into `ghci`:
```
:hoogle a -> a
:doc a -> a
```
Be sure to note the links to `haddock` files in the output. With any modern and
properly configured terminal emulator you can just click those links to
navigate there.
Finally, you can run
```shell
hoogle server -p 8080
```
and navigate to http://localhost:8080/ for your own local
[Hoogle](https://www.haskell.org/hoogle/). Note, however, that Firefox and
possibly other browsers disallow navigation from `http:` to `file:` URIs for
security reasons, which might be quite an inconvenience. See [this
page](http://kb.mozillazine.org/Links_to_local_pages_do_not_work) for
workarounds.
### How to build a Haskell project using Stack
[Stack](http://haskellstack.org) is a popular build tool for Haskell projects.
It has first-class support for Nix. Stack can optionally use Nix to
automatically select the right version of GHC and other build tools to build,
test and execute apps in an existing project downloaded from somewhere on the
Internet. Pass the `--nix` flag to any `stack` command to do so, e.g.
```shell
git clone --recursive http://github.com/yesodweb/wai
cd wai
stack --nix build
```
If you want `stack` to use Nix by default, you can add a `nix` section to the
`stack.yaml` file, as explained in the [Stack documentation][stack-nix-doc]. For
example:
```yaml
nix:
enable: true
packages: [pkgconfig zeromq zlib]
```
The example configuration snippet above tells Stack to create an ad hoc
environment for `nix-shell` as in the below section, in which the `pkgconfig`,
`zeromq` and `zlib` packages from Nixpkgs are available. All `stack` commands
will implicitly be executed inside this ad hoc environment.
Some projects have more sophisticated needs. For examples, some ad hoc
environments might need to expose Nixpkgs packages compiled in a certain way, or
with extra environment variables. In these cases, you'll need a `shell` field
instead of `packages`:
```yaml
nix:
enable: true
shell-file: shell.nix
```
For more on how to write a `shell.nix` file see the below section. You'll need
to express a derivation. Note that Nixpkgs ships with a convenience wrapper
function around `mkDerivation` called `haskell.lib.buildStackProject` to help you
create this derivation in exactly the way Stack expects. All of the same inputs
as `mkDerivation` can be provided. For example, to build a Stack project that
including packages that link against a version of the R library compiled with
special options turned on:
```nix
with (import <nixpkgs> { });
let R = pkgs.R.override { enableStrictBarrier = true; };
in
haskell.lib.buildStackProject {
name = "HaskellR";
buildInputs = [ R zeromq zlib ];
}
```
You can select a particular GHC version to compile with by setting the
`ghc` attribute as an argument to `buildStackProject`. Better yet, let
Stack choose what GHC version it wants based on the snapshot specified
in `stack.yaml` (only works with Stack >= 1.1.3):
```nix
{nixpkgs ? import <nixpkgs> { }, ghc ? nixpkgs.ghc}:
with nixpkgs;
let R = pkgs.R.override { enableStrictBarrier = true; };
in
haskell.lib.buildStackProject {
name = "HaskellR";
buildInputs = [ R zeromq zlib ];
inherit ghc;
}
```
[stack-nix-doc]: http://docs.haskellstack.org/en/stable/nix_integration.html
### How to create ad hoc environments for `nix-shell`
The easiest way to create an ad hoc development environment is to run
`nix-shell` with the appropriate GHC environment given on the command-line:
```shell
nix-shell -p "haskellPackages.ghcWithPackages (pkgs: with pkgs; [mtl pandoc])"
```
For more sophisticated use-cases, however, it's more convenient to save the
desired configuration in a file called `shell.nix` that looks like this:
```nix
{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
let
inherit (nixpkgs) pkgs;
ghc = pkgs.haskell.packages.${compiler}.ghcWithPackages (ps: with ps; [
monad-par mtl
]);
in
pkgs.stdenv.mkDerivation {
name = "my-haskell-env-0";
buildInputs = [ ghc ];
shellHook = "eval $(egrep ^export ${ghc}/bin/ghc)";
}
```
Now run `nix-shell` --- or even `nix-shell --pure` --- to enter a shell
environment that has the appropriate compiler in `$PATH`. If you use `--pure`,
then add all other packages that your development environment needs into the
`buildInputs` attribute. If you'd like to switch to a different compiler
version, then pass an appropriate `compiler` argument to the expression, i.e.
`nix-shell --argstr compiler ghc784`.
If you need such an environment because you'd like to compile a Hackage package
outside of Nix --- i.e. because you're hacking on the latest version from Git
---, then the package set provides suitable nix-shell environments for you
already! Every Haskell package has an `env` attribute that provides a shell
environment suitable for compiling that particular package. If you'd like to
hack the `lens` library, for example, then you just have to check out the
source code and enter the appropriate environment:
```
$ cabal get lens-4.11 && cd lens-4.11
Downloading lens-4.11...
Unpacking to lens-4.11/
$ nix-shell "<nixpkgs>" -A haskellPackages.lens.env
[nix-shell:/tmp/lens-4.11]$
```
At point, you can run `cabal configure`, `cabal build`, and all the other
development commands. Note that you need `cabal-install` installed in your
`$PATH` already to use it here --- the `nix-shell` environment does not provide
it.
## How to create Nix builds for your own private Haskell packages
If your own Haskell packages have build instructions for Cabal, then you can
convert those automatically into build instructions for Nix using the
`cabal2nix` utility, which you can install into your profile by running
`nix-env -i cabal2nix`.
### How to build a stand-alone project
For example, let's assume that you're working on a private project called
`foo`. To generate a Nix build expression for it, change into the project's
top-level directory and run the command:
```shell
cabal2nix . > foo.nix
```
Then write the following snippet into a file called `default.nix`:
```nix
{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
nixpkgs.pkgs.haskell.packages.${compiler}.callPackage ./foo.nix { }
```
Finally, store the following code in a file called `shell.nix`:
```nix
{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
(import ./default.nix { inherit nixpkgs compiler; }).env
```
At this point, you can run `nix-build` to have Nix compile your project and
install it into a Nix store path. The local directory will contain a symlink
called `result` after `nix-build` returns that points into that location. Of
course, passing the flag `--argstr compiler ghc763` allows switching the build
to any version of GHC currently supported.
Furthermore, you can call `nix-shell` to enter an interactive development
environment in which you can use `cabal configure` and `cabal build` to develop
your code. That environment will automatically contain a proper GHC derivation
with all the required libraries registered as well as all the system-level
libraries your package might need.
If your package does not depend on any system-level libraries, then it's
sufficient to run
```shell
nix-shell --command "cabal configure"
```
once to set up your build. `cabal-install` determines the absolute paths to all
resources required for the build and writes them into a config file in the
`dist/` directory. Once that's done, you can run `cabal build` and any other
command for that project even outside of the `nix-shell` environment. This
feature is particularly nice for those of us who like to edit their code with
an IDE, like Emacs' `haskell-mode`, because it's not necessary to start Emacs
inside of nix-shell just to make it find out the necessary settings for
building the project; `cabal-install` has already done that for us.
If you want to do some quick-and-dirty hacking and don't want to bother setting
up a `default.nix` and `shell.nix` file manually, then you can use the
`--shell` flag offered by `cabal2nix` to have it generate a stand-alone
`nix-shell` environment for you. With that feature, running
```shell
cabal2nix --shell . > shell.nix
nix-shell --command "cabal configure"
```
is usually enough to set up a build environment for any given Haskell package.
You can even use that generated file to run `nix-build`, too:
```shell
nix-build shell.nix
```
### How to build projects that depend on each other
If you have multiple private Haskell packages that depend on each other, then
you'll have to register those packages in the Nixpkgs set to make them visible
for the dependency resolution performed by `callPackage`. First of all, change
into each of your projects top-level directories and generate a `default.nix`
file with `cabal2nix`:
```shell
cd ~/src/foo && cabal2nix . > default.nix
cd ~/src/bar && cabal2nix . > default.nix
```
Then edit your `~/.config/nixpkgs/config.nix` file to register those builds in the
default Haskell package set:
```nix
{
packageOverrides = super: let self = super.pkgs; in
{
haskellPackages = super.haskellPackages.override {
overrides = self: super: {
foo = self.callPackage ../src/foo {};
bar = self.callPackage ../src/bar {};
};
};
};
}
```
Once that's accomplished, `nix-env -f "<nixpkgs>" -qA haskellPackages` will
show your packages like any other package from Hackage, and you can build them
```shell
nix-build "<nixpkgs>" -A haskellPackages.foo
```
or enter an interactive shell environment suitable for building them:
```shell
nix-shell "<nixpkgs>" -A haskellPackages.bar.env
```
## Miscellaneous Topics
### How to build with profiling enabled
Every Haskell package set takes a function called `overrides` that you can use
to manipulate the package as much as you please. One useful application of this
feature is to replace the default `mkDerivation` function with one that enables
library profiling for all packages. To accomplish that, add configure the
following snippet in your `~/.config/nixpkgs/config.nix` file:
```nix
{
packageOverrides = super: let self = super.pkgs; in
{
profiledHaskellPackages = self.haskellPackages.override {
overrides = self: super: {
mkDerivation = args: super.mkDerivation (args // {
enableLibraryProfiling = true;
});
};
};
};
}
```
Then, replace instances of `haskellPackages` in the `cabal2nix`-generated
`default.nix` or `shell.nix` files with `profiledHaskellPackages`.
### How to override package versions in a compiler-specific package set
Nixpkgs provides the latest version of
[`ghc-events`](http://hackage.haskell.org/package/ghc-events), which is 0.4.4.0
at the time of this writing. This is fine for users of GHC 7.10.x, but GHC
7.8.4 cannot compile that binary. Now, one way to solve that problem is to
register an older version of `ghc-events` in the 7.8.x-specific package set.
The first step is to generate Nix build instructions with `cabal2nix`:
```shell
cabal2nix cabal://ghc-events-0.4.3.0 > ~/.nixpkgs/ghc-events-0.4.3.0.nix
```
Then add the override in `~/.config/nixpkgs/config.nix`:
```nix
{
packageOverrides = super: let self = super.pkgs; in
{
haskell = super.haskell // {
packages = super.haskell.packages // {
ghc784 = super.haskell.packages.ghc784.override {
overrides = self: super: {
ghc-events = self.callPackage ./ghc-events-0.4.3.0.nix {};
};
};
};
};
};
}
```
This code is a little crazy, no doubt, but it's necessary because the intuitive
version
```nix
{ # ...
haskell.packages.ghc784 = super.haskell.packages.ghc784.override {
overrides = self: super: {
ghc-events = self.callPackage ./ghc-events-0.4.3.0.nix {};
};
};
}
```
doesn't do what we want it to: that code replaces the `haskell` package set in
Nixpkgs with one that contains only one entry,`packages`, which contains only
one entry `ghc784`. This override loses the `haskell.compiler` set, and it
loses the `haskell.packages.ghcXYZ` sets for all compilers but GHC 7.8.4. To
avoid that problem, we have to perform the convoluted little dance from above,
iterating over each step in hierarchy.
Once it's accomplished, however, we can install a variant of `ghc-events`
that's compiled with GHC 7.8.4:
```shell
nix-env -f "<nixpkgs>" -iA haskell.packages.ghc784.ghc-events
```
Unfortunately, it turns out that this build fails again while executing the
test suite! Apparently, the release archive on Hackage is missing some data
files that the test suite requires, so we cannot run it. We accomplish that by
re-generating the Nix expression with the `--no-check` flag:
```shell
cabal2nix --no-check cabal://ghc-events-0.4.3.0 > ~/.nixpkgs/ghc-events-0.4.3.0.nix
```
Now the builds succeeds.
Of course, in the concrete example of `ghc-events` this whole exercise is not
an ideal solution, because `ghc-events` can analyze the output emitted by any
version of GHC later than 6.12 regardless of the compiler version that was used
to build the `ghc-events` executable, so strictly speaking there's no reason to
prefer one built with GHC 7.8.x in the first place. However, for users who
cannot use GHC 7.10.x at all for some reason, the approach of downgrading to an
older version might be useful.
### How to recover from GHC's infamous non-deterministic library ID bug
GHC and distributed build farms don't get along well:
- https://ghc.haskell.org/trac/ghc/ticket/4012
When you see an error like this one
```
package foo-0.7.1.0 is broken due to missing package
text-1.2.0.4-98506efb1b9ada233bb5c2b2db516d91
```
then you have to download and re-install `foo` and all its dependents from
scratch:
```shell
nix-store -q --referrers /nix/store/*-haskell-text-1.2.0.4 \
| xargs -L 1 nix-store --repair-path
```
If you're using additional Hydra servers other than `hydra.nixos.org`, then it
might be necessary to purge the local caches that store data from those
machines to disable these binary channels for the duration of the previous
command, i.e. by running:
```shell
rm /nix/var/nix/binary-cache-v3.sqlite
rm /nix/var/nix/manifests/*
rm /nix/var/nix/channel-cache/*
```
### Builds on Darwin fail with `math.h` not found
Users of GHC on Darwin have occasionally reported that builds fail, because the
compiler complains about a missing include file:
```
fatal error: 'math.h' file not found
```
The issue has been discussed at length in [ticket
6390](https://github.com/NixOS/nixpkgs/issues/6390), and so far no good
solution has been proposed. As a work-around, users who run into this problem
can configure the environment variables
```shell
export NIX_CFLAGS_COMPILE="-idirafter /usr/include"
export NIX_CFLAGS_LINK="-L/usr/lib"
```
in their `~/.bashrc` file to avoid the compiler error.
### Builds using Stack complain about missing system libraries
```
-- While building package zlib-0.5.4.2 using:
runhaskell -package=Cabal-1.22.4.0 -clear-package-db [... lots of flags ...]
Process exited with code: ExitFailure 1
Logs have been written to: /home/foo/src/stack-ide/.stack-work/logs/zlib-0.5.4.2.log
Configuring zlib-0.5.4.2...
Setup.hs: Missing dependency on a foreign library:
* Missing (or bad) header file: zlib.h
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.
If the header file does exist, it may contain errors that are caught by the C
compiler at the preprocessing stage. In this case you can re-run configure
with the verbosity flag -v3 to see the error messages.
```
When you run the build inside of the nix-shell environment, the system
is configured to find `libz.so` without any special flags -- the compiler
and linker "just know" how to find it. Consequently, Cabal won't record
any search paths for `libz.so` in the package description, which means
that the package works fine inside of nix-shell, but once you leave the
shell the shared object can no longer be found. That issue is by no
means specific to Stack: you'll have that problem with any other
Haskell package that's built inside of nix-shell but run outside of that
environment.
You can remedy this issue in several ways. The easiest is to add a `nix` section
to the `stack.yaml` like the following:
```yaml
nix:
enable: true
packages: [ zlib ]
```
Stack's Nix support knows to add `${zlib.out}/lib` and `${zlib.dev}/include`
as an `--extra-lib-dirs` and `extra-include-dirs`, respectively.
Alternatively, you can achieve the same effect by hand. First of all, run
```
$ nix-build --no-out-link "<nixpkgs>" -A zlib
/nix/store/alsvwzkiw4b7ip38l4nlfjijdvg3fvzn-zlib-1.2.8
```
to find out the store path of the system's zlib library. Now, you can
1. add that path (plus a "/lib" suffix) to your `$LD_LIBRARY_PATH`
environment variable to make sure your system linker finds `libz.so`
automatically. It's no pretty solution, but it will work.
2. As a variant of (1), you can also install any number of system
libraries into your user's profile (or some other profile) and point
`$LD_LIBRARY_PATH` to that profile instead, so that you don't have to
list dozens of those store paths all over the place.
3. The solution I prefer is to call stack with an appropriate
--extra-lib-dirs flag like so:
```shell
stack --extra-lib-dirs=/nix/store/alsvwzkiw4b7ip38l4nlfjijdvg3fvzn-zlib-1.2.8/lib build
```
Typically, you'll need `--extra-include-dirs` as well. It's possible
to add those flag to the project's `stack.yaml` or your user's
global `~/.stack/global/stack.yaml` file so that you don't have to
specify them manually every time. But again, you're likely better off
using Stack's Nix support instead.
The same thing applies to `cabal configure`, of course, if you're
building with `cabal-install` instead of Stack.
### Creating statically linked binaries
There are two levels of static linking. The first option is to configure the
build with the Cabal flag `--disable-executable-dynamic`. In Nix expressions,
this can be achieved by setting the attribute:
```
enableSharedExecutables = false;
```
That gives you a binary with statically linked Haskell libraries and
dynamically linked system libraries.
To link both Haskell libraries and system libraries statically, the additional
flags `--ghc-option=-optl=-static --ghc-option=-optl=-pthread` need to be used.
In Nix, this is accomplished with:
```
configureFlags = [ "--ghc-option=-optl=-static" "--ghc-option=-optl=-pthread" ];
```
It's important to realize, however, that most system libraries in Nix are
built as shared libraries only, i.e. there is just no static library
available that Cabal could link!
### Building GHC with integer-simple
By default GHC implements the Integer type using the
[GNU Multiple Precision Arithmetic (GMP) library](https://gmplib.org/).
The implementation can be found in the
[integer-gmp](http://hackage.haskell.org/package/integer-gmp) package.
A potential problem with this is that GMP is licensed under the
[GNU Lesser General Public License (LGPL)](http://www.gnu.org/copyleft/lesser.html),
a kind of "copyleft" license. According to the terms of the LGPL, paragraph 5,
you may distribute a program that is designed to be compiled and dynamically
linked with the library under the terms of your choice (i.e., commercially) but
if your program incorporates portions of the library, if it is linked
statically, then your program is a "derivative"--a "work based on the
library"--and according to paragraph 2, section c, you "must cause the whole of
the work to be licensed" under the terms of the LGPL (including for free).
The LGPL licensing for GMP is a problem for the overall licensing of binary
programs compiled with GHC because most distributions (and builds) of GHC use
static libraries. (Dynamic libraries are currently distributed only for macOS.)
The LGPL licensing situation may be worse: even though
[The Glasgow Haskell Compiler License](https://www.haskell.org/ghc/license)
is essentially a "free software" license (BSD3), according to
paragraph 2 of the LGPL, GHC must be distributed under the terms of the LGPL!
To work around these problems GHC can be build with a slower but LGPL-free
alternative implemention for Integer called
[integer-simple](http://hackage.haskell.org/package/integer-simple).
To get a GHC compiler build with `integer-simple` instead of `integer-gmp` use
the attribute: `haskell.compiler.integer-simple."${ghcVersion}"`.
For example:
```
$ nix-build -E '(import <nixpkgs> {}).haskell.compiler.integer-simple.ghc802'
...
$ result/bin/ghc-pkg list | grep integer
integer-simple-0.1.1.1
```
The following command displays the complete list of GHC compilers build with `integer-simple`:
```
$ nix-env -f "<nixpkgs>" -qaP -A haskell.compiler.integer-simple
haskell.compiler.integer-simple.ghc7102 ghc-7.10.2
haskell.compiler.integer-simple.ghc7103 ghc-7.10.3
haskell.compiler.integer-simple.ghc722 ghc-7.2.2
haskell.compiler.integer-simple.ghc742 ghc-7.4.2
haskell.compiler.integer-simple.ghc783 ghc-7.8.3
haskell.compiler.integer-simple.ghc784 ghc-7.8.4
haskell.compiler.integer-simple.ghc801 ghc-8.0.1
haskell.compiler.integer-simple.ghc802 ghc-8.0.2
haskell.compiler.integer-simple.ghcHEAD ghc-8.1.20170106
```
To get a package set supporting `integer-simple` use the attribute:
`haskell.packages.integer-simple."${ghcVersion}"`. For example
use the following to get the `scientific` package build with `integer-simple`:
```shell
nix-build -A haskell.packages.integer-simple.ghc802.scientific
```
### Quality assurance
The `haskell.lib` library includes a number of functions for checking for
various imperfections in Haskell packages. It's useful to apply these functions
to your own Haskell packages and integrate that in a Continuous Integration
server like [hydra](https://nixos.org/hydra/) to assure your packages maintain a
minimum level of quality. This section discusses some of these functions.
#### buildStrictly
Applying `haskell.lib.buildStrictly` to a Haskell package enables the `-Wall`
and `-Werror` GHC options to turn all warnings into build failures. Additionally
the source of your package is gotten from first invoking `cabal sdist` to ensure
all needed files are listed in the Cabal file.
#### checkUnusedPackages
Applying `haskell.lib.checkUnusedPackages` to a Haskell package invokes
the [packunused](http://hackage.haskell.org/package/packunused) tool on the
package. `packunused` complains when it finds packages listed as build-depends
in the Cabal file which are redundant. For example:
```
$ nix-build -E 'let pkgs = import <nixpkgs> {}; in pkgs.haskell.lib.checkUnusedPackages {} pkgs.haskellPackages.scientific'
these derivations will be built:
/nix/store/3lc51cxj2j57y3zfpq5i69qbzjpvyci1-scientific-0.3.5.1.drv
...
detected package components
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- library
- testsuite(s): test-scientific
- benchmark(s): bench-scientific*
(component names suffixed with '*' are not configured to be built)
library
~~~~~~~
The following package dependencies seem redundant:
- ghc-prim-0.5.0.0
testsuite(test-scientific)
~~~~~~~~~~~~~~~~~~~~~~~~~~
no redundant packages dependencies found
builder for /nix/store/3lc51cxj2j57y3zfpq5i69qbzjpvyci1-scientific-0.3.5.1.drv failed with exit code 1
error: build of /nix/store/3lc51cxj2j57y3zfpq5i69qbzjpvyci1-scientific-0.3.5.1.drv failed
```
As you can see, `packunused` finds out that although the testsuite component has
no redundant dependencies the library component of `scientific-0.3.5.1` depends
on `ghc-prim` which is unused in the library.
## Other resources
- The Youtube video [Nix Loves Haskell](https://www.youtube.com/watch?v=BsBhi_r-OeE)
provides an introduction into Haskell NG aimed at beginners. The slides are
available at http://cryp.to/nixos-meetup-3-slides.pdf and also -- in a form
ready for cut & paste -- at
https://github.com/NixOS/cabal2nix/blob/master/doc/nixos-meetup-3-slides.md.
- Another Youtube video is [Escaping Cabal Hell with Nix](https://www.youtube.com/watch?v=mQd3s57n_2Y),
which discusses the subject of Haskell development with Nix but also provides
a basic introduction to Nix as well, i.e. it's suitable for viewers with
almost no prior Nix experience.
- Oliver Charles wrote a very nice [Tutorial how to develop Haskell packages with Nix](http://wiki.ocharles.org.uk/Nix).
- The *Journey into the Haskell NG infrastructure* series of postings
describe the new Haskell infrastructure in great detail:
- [Part 1](https://nixos.org/nix-dev/2015-January/015591.html)
explains the differences between the old and the new code and gives
instructions how to migrate to the new setup.
- [Part 2](https://nixos.org/nix-dev/2015-January/015608.html)
looks in-depth at how to tweak and configure your setup by means of
overrides.
- [Part 3](https://nixos.org/nix-dev/2015-April/016912.html)
describes the infrastructure that keeps the Haskell package set in Nixpkgs
up-to-date.

File diff suppressed because it is too large Load Diff

View File

@@ -1,115 +0,0 @@
# Idris packages
## Installing Idris
The easiest way to get a working idris version is to install the `idris` attribute:
```
$ # On NixOS
$ nix-env -i nixos.idris
$ # On non-NixOS
$ nix-env -i nixpkgs.idris
```
This however only provides the `prelude` and `base` libraries. To install additional libraries:
```
$ nix-env -iE 'pkgs: pkgs.idrisPackages.with-packages (with pkgs.idrisPackages; [ contrib pruviloj ])'
```
To see all available Idris packages:
```
$ # On NixOS
$ nix-env -qaPA nixos.idrisPackages
$ # On non-NixOS
$ nix-env -qaPA nixpkgs.idrisPackages
```
Similarly, entering a `nix-shell`:
```
$ nix-shell -p 'idrisPackages.with-packages (with idrisPackages; [ contrib pruviloj ])'
```
## Starting Idris with library support
To have access to these libraries in idris, call it with an argument `-p <library name>` for each library:
```
$ nix-shell -p 'idrisPackages.with-packages (with idrisPackages; [ contrib pruviloj ])'
[nix-shell:~]$ idris -p contrib -p pruviloj
```
A listing of all available packages the Idris binary has access to is available via `--listlibs`:
```
$ idris --listlibs
00prelude-idx.ibc
pruviloj
base
contrib
prelude
00pruviloj-idx.ibc
00base-idx.ibc
00contrib-idx.ibc
```
## Building an Idris project with Nix
As an example of how a Nix expression for an Idris package can be created, here is the one for `idrisPackages.yaml`:
```nix
{ build-idris-package
, fetchFromGitHub
, contrib
, lightyear
, lib
}:
build-idris-package {
name = "yaml";
version = "2018-01-25";
# This is the .ipkg file that should be built, defaults to the package name
# In this case it should build `Yaml.ipkg` instead of `yaml.ipkg`
# This is only necessary because the yaml packages ipkg file is
# different from its package name here.
ipkgName = "Yaml";
# Idris dependencies to provide for the build
idrisDeps = [ contrib lightyear ];
src = fetchFromGitHub {
owner = "Heather";
repo = "Idris.Yaml";
rev = "5afa51ffc839844862b8316faba3bafa15656db4";
sha256 = "1g4pi0swmg214kndj85hj50ccmckni7piprsxfdzdfhg87s0avw7";
};
meta = {
description = "Idris YAML lib";
homepage = https://github.com/Heather/Idris.Yaml;
license = lib.licenses.mit;
maintainers = [ lib.maintainers.brainrape ];
};
}
```
Assuming this file is saved as `yaml.nix`, it's buildable using
```
$ nix-build -E '(import <nixpkgs> {}).idrisPackages.callPackage ./yaml.nix {}'
```
Or it's possible to use
```nix
with import <nixpkgs> {};
{
yaml = idrisPackages.callPackage ./yaml.nix {};
}
```
in another file (say `default.nix`) to be able to build it with
```
$ nix-build -A yaml
```

View File

@@ -1,35 +1,35 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xml:id="chap-language-support">
<title>Support for specific programming languages and frameworks</title>
<para>
The <link linkend="chap-stdenv">standard build environment</link> makes it
easy to build typical Autotools-based packages with very little code. Any
other kind of package can be accomodated by overriding the appropriate phases
of <literal>stdenv</literal>. However, there are specialised functions in
Nixpkgs to easily build packages for other programming languages, such as
Perl or Haskell. These are described in this chapter.
</para>
<xi:include href="android.section.xml" />
<xi:include href="beam.xml" />
<xi:include href="bower.xml" />
<xi:include href="coq.xml" />
<xi:include href="go.xml" />
<xi:include href="haskell.section.xml" />
<xi:include href="idris.section.xml" />
<xi:include href="ios.section.xml" />
<xi:include href="java.xml" />
<xi:include href="lua.xml" />
<xi:include href="node.section.xml" />
<xi:include href="ocaml.xml" />
<xi:include href="perl.xml" />
<xi:include href="python.section.xml" />
<xi:include href="qt.xml" />
<xi:include href="r.section.xml" />
<xi:include href="ruby.xml" />
<xi:include href="rust.section.xml" />
<xi:include href="texlive.xml" />
<xi:include href="titanium.section.xml" />
<xi:include href="vim.section.xml" />
<xi:include href="emscripten.section.xml" />
<title>Support for specific programming languages and frameworks</title>
<para>The <link linkend="chap-stdenv">standard build
environment</link> makes it easy to build typical Autotools-based
packages with very little code. Any other kind of package can be
accomodated by overriding the appropriate phases of
<literal>stdenv</literal>. However, there are specialised functions
in Nixpkgs to easily build packages for other programming languages,
such as Perl or Haskell. These are described in this chapter.</para>
<xi:include href="beam.xml" />
<xi:include href="bower.xml" />
<xi:include href="coq.xml" />
<xi:include href="go.xml" />
<xi:include href="haskell.xml" />
<xi:include href="idris.xml" /> <!-- generated from ../../pkgs/development/idris-modules/README.md -->
<xi:include href="java.xml" />
<xi:include href="lua.xml" />
<xi:include href="node.xml" /> <!-- generated from ../../pkgs/development/node-packages/README.md -->
<xi:include href="perl.xml" />
<xi:include href="python.xml" />
<xi:include href="qt.xml" />
<xi:include href="r.xml" /> <!-- generated from ../../pkgs/development/r-modules/README.md -->
<xi:include href="ruby.xml" />
<xi:include href="rust.xml" />
<xi:include href="texlive.xml" />
<xi:include href="vim.xml" />
</chapter>

View File

@@ -1,219 +0,0 @@
---
title: iOS
author: Sander van der Burg
date: 2018-11-18
---
# iOS
This component is basically a wrapper/workaround that makes it possible to
expose an Xcode installation as a Nix package by means of symlinking to the
relevant executables on the host system.
Since Xcode can't be packaged with Nix, nor we can publish it as a Nix package
(because of its license) this is basically the only integration strategy
making it possible to do iOS application builds that integrate with other
components of the Nix ecosystem
The primary objective of this project is to use the Nix expression language to
specify how iOS apps can be built from source code, and to automatically spawn
iOS simulator instances for testing.
This component also makes it possible to use [Hydra](http://nixos.org/hydra),
the Nix-based continuous integration server to regularly build iOS apps and to
do wireless ad-hoc installations of enterprise IPAs on iOS devices through
Hydra.
The Xcode build environment implements a number of features.
Deploying a proxy component wrapper exposing Xcode
--------------------------------------------------
The first use case is deploying a Nix package that provides symlinks to the Xcode
installation on the host system. This package can be used as a build input to
any build function implemented in the Nix expression language that requires
Xcode.
```nix
let
pkgs = import <nixpkgs> {};
xcodeenv = import ./xcodeenv {
inherit (pkgs) stdenv;
};
in
xcodeenv.composeXcodeWrapper {
version = "9.2";
xcodeBaseDir = "/Applications/Xcode.app";
}
```
By deploying the above expression with `nix-build` and inspecting its content
you will notice that several Xcode-related executables are exposed as a Nix
package:
```bash
$ ls result/bin
lrwxr-xr-x 1 sander staff 94 1 jan 1970 Simulator -> /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator
lrwxr-xr-x 1 sander staff 17 1 jan 1970 codesign -> /usr/bin/codesign
lrwxr-xr-x 1 sander staff 17 1 jan 1970 security -> /usr/bin/security
lrwxr-xr-x 1 sander staff 21 1 jan 1970 xcode-select -> /usr/bin/xcode-select
lrwxr-xr-x 1 sander staff 61 1 jan 1970 xcodebuild -> /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
lrwxr-xr-x 1 sander staff 14 1 jan 1970 xcrun -> /usr/bin/xcrun
```
Building an iOS application
---------------------------
We can build an iOS app executable for the simulator, or an IPA/xcarchive file
for release purposes, e.g. ad-hoc, enterprise or store installations, by
executing the `xcodeenv.buildApp {}` function:
```nix
let
pkgs = import <nixpkgs> {};
xcodeenv = import ./xcodeenv {
inherit (pkgs) stdenv;
};
in
xcodeenv.buildApp {
name = "MyApp";
src = ./myappsources;
sdkVersion = "11.2";
target = null; # Corresponds to the name of the app by default
configuration = null; # Release for release builds, Debug for debug builds
scheme = null; # -scheme will correspond to the app name by default
sdk = null; # null will set it to 'iphonesimulator` for simulator builds or `iphoneos` to real builds
xcodeFlags = "";
release = true;
certificateFile = ./mycertificate.p12;
certificatePassword = "secret";
provisioningProfile = ./myprovisioning.profile;
signMethod = "ad-hoc"; # 'enterprise' or 'store'
generateIPA = true;
generateXCArchive = false;
enableWirelessDistribution = true;
installURL = "/installipa.php";
bundleId = "mycompany.myapp";
appVersion = "1.0";
# Supports all xcodewrapper parameters as well
xcodeBaseDir = "/Applications/Xcode.app";
}
```
The above function takes a variety of parameters:
* The `name` and `src` parameters are mandatory and specify the name of the app
and the location where the source code resides
* `sdkVersion` specifies which version of the iOS SDK to use.
It also possile to adjust the `xcodebuild` parameters. This is only needed in
rare circumstances. In most cases the default values should suffice:
* Specifies which `xcodebuild` target to build. By default it takes the target
that has the same name as the app.
* The `configuration` parameter can be overridden if desired. By default, it
will do a debug build for the simulator and a release build for real devices.
* The `scheme` parameter specifies which `-scheme` parameter to propagate to
`xcodebuild`. By default, it corresponds to the app name.
* The `sdk` parameter specifies which SDK to use. By default, it picks
`iphonesimulator` for simulator builds and `iphoneos` for release builds.
* The `xcodeFlags` parameter specifies arbitrary command line parameters that
should be propagated to `xcodebuild`.
By default, builds are carried out for the iOS simulator. To do release builds
(builds for real iOS devices), you must set the `release` parameter to `true`.
In addition, you need to set the following parameters:
* `certificateFile` refers to a P12 certificate file.
* `certificatePassword` specifies the password of the P12 certificate.
* `provisioningProfile` refers to the provision profile needed to sign the app
* `signMethod` should refer to `ad-hoc` for signing the app with an ad-hoc
certificate, `enterprise` for enterprise certificates and `app-store` for App
store certificates.
* `generateIPA` specifies that we want to produce an IPA file (this is probably
what you want)
* `generateXCArchive` specifies thet we want to produce an xcarchive file.
When building IPA files on Hydra and when it is desired to allow iOS devices to
install IPAs by browsing to the Hydra build products page, you can enable the
`enableWirelessDistribution` parameter.
When enabled, you need to configure the following options:
* The `installURL` parameter refers to the URL of a PHP script that composes the
`itms-services://` URL allowing iOS devices to install the IPA file.
* `bundleId` refers to the bundle ID value of the app
* `appVersion` refers to the app's version number
To use wireless adhoc distributions, you must also install the corresponding
PHP script on a web server (see section: 'Installing the PHP script for wireless
ad hoc installations from Hydra' for more information).
In addition to the build parameters, you can also specify any parameters that
the `xcodeenv.composeXcodeWrapper {}` function takes. For example, the
`xcodeBaseDir` parameter can be overridden to refer to a different Xcode
version.
Spawning simulator instances
----------------------------
In addition to building iOS apps, we can also automatically spawn simulator
instances:
```nix
let
pkgs = import <nixpkgs> {};
xcodeenv = import ./xcodeenv {
inherit (pkgs) stdenv;
};
in
xcode.simulateApp {
name = "simulate";
# Supports all xcodewrapper parameters as well
xcodeBaseDir = "/Applications/Xcode.app";
}
```
The above expression produces a script that starts the simulator from the
provided Xcode installation. The script can be started as follows:
```bash
./result/bin/run-test-simulator
```
By default, the script will show an overview of UDID for all available simulator
instances and asks you to pick one. You can also provide a UDID as a
command-line parameter to launch an instance automatically:
```bash
./result/bin/run-test-simulator 5C93129D-CF39-4B1A-955F-15180C3BD4B8
```
You can also extend the simulator script to automatically deploy and launch an
app in the requested simulator instance:
```nix
let
pkgs = import <nixpkgs> {};
xcodeenv = import ./xcodeenv {
inherit (pkgs) stdenv;
};
in
xcode.simulateApp {
name = "simulate";
bundleId = "mycompany.myapp";
app = xcode.buildApp {
# ...
};
# Supports all xcodewrapper parameters as well
xcodeBaseDir = "/Applications/Xcode.app";
}
```
By providing the result of an `xcode.buildApp {}` function and configuring the
app bundle id, the app gets deployed automatically and started.

View File

@@ -1,10 +1,11 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-language-java">
<title>Java</title>
<para>
Ant-based Java packages are typically built from source as follows:
<title>Java</title>
<para>Ant-based Java packages are typically built from source as follows:
<programlisting>
stdenv.mkDerivation {
name = "...";
@@ -15,36 +16,33 @@ stdenv.mkDerivation {
buildPhase = "ant";
}
</programlisting>
Note that <varname>jdk</varname> is an alias for the OpenJDK (self-built
where available, or pre-built via Zulu). Platforms with OpenJDK not (yet) in
Nixpkgs (<literal>Aarch32</literal>, <literal>Aarch64</literal>) point to the
(unfree) <literal>oraclejdk</literal>.
</para>
<para>
JAR files that are intended to be used by other packages should be installed
in <filename>$out/share/java</filename>. JDKs have a stdenv setup hook that
add any JARs in the <filename>share/java</filename> directories of the build
inputs to the <envar>CLASSPATH</envar> environment variable. For instance, if
the package <literal>libfoo</literal> installs a JAR named
<filename>foo.jar</filename> in its <filename>share/java</filename>
directory, and another package declares the attribute
Note that <varname>jdk</varname> is an alias for the OpenJDK.</para>
<para>JAR files that are intended to be used by other packages should
be installed in <filename>$out/share/java</filename>. The OpenJDK has
a stdenv setup hook that adds any JARs in the
<filename>share/java</filename> directories of the build inputs to the
<envar>CLASSPATH</envar> environment variable. For instance, if the
package <literal>libfoo</literal> installs a JAR named
<filename>foo.jar</filename> in its <filename>share/java</filename>
directory, and another package declares the attribute
<programlisting>
buildInputs = [ jdk libfoo ];
</programlisting>
then <envar>CLASSPATH</envar> will be set to
<filename>/nix/store/...-libfoo/share/java/foo.jar</filename>.
</para>
<para>
Private JARs should be installed in a location like
<filename>$out/share/<replaceable>package-name</replaceable></filename>.
</para>
then <envar>CLASSPATH</envar> will be set to
<filename>/nix/store/...-libfoo/share/java/foo.jar</filename>.</para>
<para>Private JARs
should be installed in a location like
<filename>$out/share/<replaceable>package-name</replaceable></filename>.</para>
<para>If your Java package provides a program, you need to generate a
wrapper script to run it using the OpenJRE. You can use
<literal>makeWrapper</literal> for this:
<para>
If your Java package provides a program, you need to generate a wrapper
script to run it using the OpenJRE. You can use
<literal>makeWrapper</literal> for this:
<programlisting>
buildInputs = [ makeWrapper ];
@@ -55,30 +53,32 @@ installPhase =
--add-flags "-cp $out/share/java/foo.jar org.foo.Main"
'';
</programlisting>
Note the use of <literal>jre</literal>, which is the part of the OpenJDK
package that contains the Java Runtime Environment. By using
<literal>${jre}/bin/java</literal> instead of
<literal>${jdk}/bin/java</literal>, you prevent your package from depending
on the JDK at runtime.
</para>
<para>
Note all JDKs passthru <literal>home</literal>, so if your application
requires environment variables like <envar>JAVA_HOME</envar> being set, that
can be done in a generic fashion with the <literal>--set</literal> argument
of <literal>makeWrapper</literal>:
Note the use of <literal>jre</literal>, which is the part of the
OpenJDK package that contains the Java Runtime Environment. By using
<literal>${jre}/bin/java</literal> instead of
<literal>${jdk}/bin/java</literal>, you prevent your package from
depending on the JDK at runtime.</para>
<para>It is possible to use a different Java compiler than
<command>javac</command> from the OpenJDK. For instance, to use the
Eclipse Java Compiler:
<programlisting>
--set JAVA_HOME ${jdk.home}
buildInputs = [ jre ant ecj ];
</programlisting>
</para>
<para>
It is possible to use a different Java compiler than <command>javac</command>
from the OpenJDK. For instance, to use the GNU Java Compiler:
(Note that here you dont need the full JDK as an input, but just the
JRE.) The ECJ has a stdenv setup hook that sets some environment
variables to cause Ant to use ECJ, but this doesnt work with all Ant
files. Similarly, you can use the GNU Java Compiler:
<programlisting>
buildInputs = [ gcj ant ];
</programlisting>
Here, Ant will automatically use <command>gij</command> (the GNU Java
Runtime) instead of the OpenJRE.
</para>
Here, Ant will automatically use <command>gij</command> (the GNU Java
Runtime) instead of the OpenJRE.</para>
</section>

View File

@@ -1,22 +1,24 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-language-lua">
<title>Lua</title>
<para>
Lua packages are built by the <varname>buildLuaPackage</varname> function.
This function is implemented in
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/lua-modules/generic/default.nix">
<title>Lua</title>
<para>
Lua packages are built by the <varname>buildLuaPackage</varname> function. This function is
implemented
in <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/lua-modules/generic/default.nix">
<filename>pkgs/development/lua-modules/generic/default.nix</filename></link>
and works similarly to <varname>buildPerlPackage</varname>. (See
<xref linkend="sec-language-perl"/> for details.)
</para>
</para>
<para>
Lua packages are defined in
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/lua-packages.nix"><filename>pkgs/top-level/lua-packages.nix</filename></link>.
<para>
Lua packages are defined
in <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/lua-packages.nix"><filename>pkgs/top-level/lua-packages.nix</filename></link>.
Most of them are simple. For example:
<programlisting>
<programlisting>
fileSystem = buildLuaPackage {
name = "filesystem-1.6.2";
src = fetchurl {
@@ -30,19 +32,20 @@ fileSystem = buildLuaPackage {
};
};
</programlisting>
</para>
</para>
<para>
<para>
Though, more complicated package should be placed in a seperate file in
<link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/lua-modules"><filename>pkgs/development/lua-modules</filename></link>.
</para>
</para>
<para>
Lua packages accept additional parameter <varname>disabled</varname>, which defines
the condition of disabling package from luaPackages. For example, if package has
<varname>disabled</varname> assigned to <literal>lua.luaversion != "5.1"</literal>,
it will not be included in any luaPackages except lua51Packages, making it
only be built for lua 5.1.
</para>
<para>
Lua packages accept additional parameter <varname>disabled</varname>, which
defines the condition of disabling package from luaPackages. For example, if
package has <varname>disabled</varname> assigned to <literal>lua.luaversion
!= "5.1"</literal>, it will not be included in any luaPackages except
lua51Packages, making it only be built for lua 5.1.
</para>
</section>

View File

@@ -1,51 +0,0 @@
Node.js packages
================
The `pkgs/development/node-packages` folder contains a generated collection of
[NPM packages](https://npmjs.com/) that can be installed with the Nix package
manager.
As a rule of thumb, the package set should only provide *end user* software
packages, such as command-line utilities. Libraries should only be added to the
package set if there is a non-NPM package that requires it.
When it is desired to use NPM libraries in a development project, use the
`node2nix` generator directly on the `package.json` configuration file of the
project.
The package set also provides support for multiple Node.js versions. The policy
is that a new package should be added to the collection for the latest stable LTS
release (which is currently 10.x), unless there is an explicit reason to support
a different release.
If your package uses native addons, you need to examine what kind of native
build system it uses. Here are some examples:
* `node-gyp`
* `node-gyp-builder`
* `node-pre-gyp`
After you have identified the correct system, you need to override your package
expression while adding in build system as a build input. For example, `dat`
requires `node-gyp-build`, so we override its expression in `default-v10.nix`:
```nix
dat = nodePackages.dat.override (oldAttrs: {
buildInputs = oldAttrs.buildInputs ++ [ nodePackages.node-gyp-build ];
});
```
To add a package from NPM to nixpkgs:
1. Modify `pkgs/development/node-packages/node-packages-v10.json` to add, update
or remove package entries. (Or `pkgs/development/node-packages/node-packages-v8.json`
for packages depending on Node.js 8.x)
2. Run the script: `(cd pkgs/development/node-packages && ./generate.sh)`.
3. Build your new package to test your changes:
`cd /path/to/nixpkgs && nix-build -A nodePackages.<new-or-updated-package>`.
To build against a specific Node.js version (e.g. 10.x):
`nix-build -A nodePackages_10_x.<new-or-updated-package>`
4. Add and commit all modified and generated files.
For more information about the generation process, consult the
[README.md](https://github.com/svanderburg/node2nix) file of the `node2nix`
tool.

View File

@@ -1,99 +0,0 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-language-ocaml">
<title>OCaml</title>
<para>
OCaml libraries should be installed in
<literal>$(out)/lib/ocaml/${ocaml.version}/site-lib/</literal>. Such
directories are automatically added to the <literal>$OCAMLPATH</literal>
environment variable when building another package that depends on them
or when opening a <literal>nix-shell</literal>.
</para>
<para>
Given that most of the OCaml ecosystem is now built with dune,
nixpkgs includes a convenience build support function called
<literal>buildDunePackage</literal> that will build an OCaml package
using dune, OCaml and findlib and any additional dependencies provided
as <literal>buildInputs</literal> or <literal>propagatedBuildInputs</literal>.
</para>
<para>
Here is a simple package example. It defines an (optional) attribute
<literal>minimumOCamlVersion</literal> that will be used to throw a
descriptive evaluation error if building with an older OCaml is attempted.
It uses the <literal>fetchFromGitHub</literal> fetcher to get its source.
It sets the <literal>doCheck</literal> (optional) attribute to
<literal>true</literal> which means that tests will be run with
<literal>dune runtest -p angstrom</literal> after the build
(<literal>dune build -p angstrom</literal>) is complete.
It uses <literal>alcotest</literal> as a build input (because it is needed
to run the tests) and <literal>bigstringaf</literal> and
<literal>result</literal> as propagated build inputs (thus they will also
be available to libraries depending on this library).
The library will be installed using the <literal>angstrom.install</literal>
file that dune generates.
</para>
<programlisting>
{ stdenv, fetchFromGitHub, buildDunePackage, alcotest, result, bigstringaf }:
buildDunePackage rec {
pname = "angstrom";
version = "0.10.0";
minimumOCamlVersion = "4.03";
src = fetchFromGitHub {
owner = "inhabitedtype";
repo = pname;
rev = version;
sha256 = "0lh6024yf9ds0nh9i93r9m6p5psi8nvrqxl5x7jwl13zb0r9xfpw";
};
buildInputs = [ alcotest ];
propagatedBuildInputs = [ bigstringaf result ];
doCheck = true;
meta = {
homepage = https://github.com/inhabitedtype/angstrom;
description = "OCaml parser combinators built for speed and memory efficiency";
license = stdenv.lib.licenses.bsd3;
maintainers = with stdenv.lib.maintainers; [ sternenseemann ];
};
}
</programlisting>
<para>
Here is a second example, this time using a source archive generated with
<literal>dune-release</literal>. It is a good idea to use this archive when
it is available as it will usually contain substituted variables such as a
<literal>%%VERSION%%</literal> field. This library does not depend
on any other OCaml library and no tests are run after building it.
</para>
<programlisting>
{ stdenv, fetchurl, buildDunePackage }:
buildDunePackage rec {
pname = "wtf8";
version = "1.0.1";
minimumOCamlVersion = "4.01";
src = fetchurl {
url = "https://github.com/flowtype/ocaml-${pname}/releases/download/v${version}/${pname}-${version}.tbz";
sha256 = "1msg3vycd3k8qqj61sc23qks541cxpb97vrnrvrhjnqxsqnh6ygq";
};
meta = with stdenv.lib; {
homepage = https://github.com/flowtype/ocaml-wtf8;
description = "WTF-8 is a superset of UTF-8 that allows unpaired surrogates.";
license = licenses.mit;
maintainers = [ maintainers.eqyiel ];
};
}
</programlisting>
</section>

View File

@@ -1,27 +1,24 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-language-perl">
<title>Perl</title>
<para>
Nixpkgs provides a function <varname>buildPerlPackage</varname>, a generic
package builder function for any Perl package that has a standard
<varname>Makefile.PL</varname>. Its implemented in
<link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/perl-modules/generic"><filename>pkgs/development/perl-modules/generic</filename></link>.
</para>
<title>Perl</title>
<para>
Perl packages from CPAN are defined in
<link
<para>Nixpkgs provides a function <varname>buildPerlPackage</varname>,
a generic package builder function for any Perl package that has a
standard <varname>Makefile.PL</varname>. Its implemented in <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/perl-modules/generic"><filename>pkgs/development/perl-modules/generic</filename></link>.</para>
<para>Perl packages from CPAN are defined in <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/perl-packages.nix"><filename>pkgs/top-level/perl-packages.nix</filename></link>,
rather than <filename>pkgs/all-packages.nix</filename>. Most Perl packages
are so straight-forward to build that they are defined here directly, rather
than having a separate function for each package called from
<filename>perl-packages.nix</filename>. However, more complicated packages
should be put in a separate file, typically in
<filename>pkgs/development/perl-modules</filename>. Here is an example of the
former:
rather than <filename>pkgs/all-packages.nix</filename>. Most Perl
packages are so straight-forward to build that they are defined here
directly, rather than having a separate function for each package
called from <filename>perl-packages.nix</filename>. However, more
complicated packages should be put in a separate file, typically in
<filename>pkgs/development/perl-modules</filename>. Here is an
example of the former:
<programlisting>
ClassC3 = buildPerlPackage rec {
name = "Class-C3-0.21";
@@ -31,72 +28,74 @@ ClassC3 = buildPerlPackage rec {
};
};
</programlisting>
Note the use of <literal>mirror://cpan/</literal>, and the
<literal>${name}</literal> in the URL definition to ensure that the name
attribute is consistent with the source that were actually downloading.
Perl packages are made available in <filename>all-packages.nix</filename>
through the variable <varname>perlPackages</varname>. For instance, if you
have a package that needs <varname>ClassC3</varname>, you would typically
write
Note the use of <literal>mirror://cpan/</literal>, and the
<literal>${name}</literal> in the URL definition to ensure that the
name attribute is consistent with the source that were actually
downloading. Perl packages are made available in
<filename>all-packages.nix</filename> through the variable
<varname>perlPackages</varname>. For instance, if you have a package
that needs <varname>ClassC3</varname>, you would typically write
<programlisting>
foo = import ../path/to/foo.nix {
inherit stdenv fetchurl ...;
inherit (perlPackages) ClassC3;
};
</programlisting>
in <filename>all-packages.nix</filename>. You can test building a Perl
package as follows:
in <filename>all-packages.nix</filename>. You can test building a
Perl package as follows:
<screen>
$ nix-build -A perlPackages.ClassC3
</screen>
<varname>buildPerlPackage</varname> adds <literal>perl-</literal> to the
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:
<varname>buildPerlPackage</varname> adds <literal>perl-</literal> to
the 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:
<screen>
$ nix-env -i perl-Class-C3
</screen>
(Of course you can also install using the attribute name: <literal>nix-env -i
-A perlPackages.ClassC3</literal>.)
</para>
<para>
So what does <varname>buildPerlPackage</varname> do? It does the following:
<orderedlist>
<listitem>
<para>
In the configure phase, it calls <literal>perl Makefile.PL</literal> to
generate a Makefile. You can set the variable
<varname>makeMakerFlags</varname> to pass flags to
<filename>Makefile.PL</filename>
</para>
</listitem>
<listitem>
<para>
It adds the contents of the <envar>PERL5LIB</envar> environment variable
to <literal>#! .../bin/perl</literal> line of Perl scripts as
<literal>-I<replaceable>dir</replaceable></literal> flags. This ensures
that a script can find its dependencies.
</para>
</listitem>
<listitem>
<para>
In the fixup phase, it writes the propagated build inputs
(<varname>propagatedBuildInputs</varname>) to the file
<filename>$out/nix-support/propagated-user-env-packages</filename>.
<command>nix-env</command> recursively installs all packages listed in
this file when you install a package that has it. This ensures that a Perl
package can find its dependencies.
</para>
</listitem>
</orderedlist>
</para>
(Of course you can also install using the attribute name:
<literal>nix-env -i -A perlPackages.ClassC3</literal>.)</para>
<para>So what does <varname>buildPerlPackage</varname> do? It does
the following:
<orderedlist>
<listitem><para>In the configure phase, it calls <literal>perl
Makefile.PL</literal> to generate a Makefile. You can set the
variable <varname>makeMakerFlags</varname> to pass flags to
<filename>Makefile.PL</filename></para></listitem>
<listitem><para>It adds the contents of the <envar>PERL5LIB</envar>
environment variable to <literal>#! .../bin/perl</literal> line of
Perl scripts as <literal>-I<replaceable>dir</replaceable></literal>
flags. This ensures that a script can find its
dependencies.</para></listitem>
<listitem><para>In the fixup phase, it writes the propagated build
inputs (<varname>propagatedBuildInputs</varname>) to the file
<filename>$out/nix-support/propagated-user-env-packages</filename>.
<command>nix-env</command> recursively installs all packages listed
in this file when you install a package that has it. This ensures
that a Perl package can find its dependencies.</para></listitem>
</orderedlist>
</para>
<para><varname>buildPerlPackage</varname> is built on top of
<varname>stdenv</varname>, so everything can be customised in the
usual way. For instance, the <literal>BerkeleyDB</literal> module has
a <varname>preConfigure</varname> hook to generate a configuration
file used by <filename>Makefile.PL</filename>:
<para>
<varname>buildPerlPackage</varname> is built on top of
<varname>stdenv</varname>, so everything can be customised in the usual way.
For instance, the <literal>BerkeleyDB</literal> module has a
<varname>preConfigure</varname> hook to generate a configuration file used by
<filename>Makefile.PL</filename>:
<programlisting>
{ buildPerlPackage, fetchurl, db }:
@@ -109,20 +108,23 @@ buildPerlPackage rec {
};
preConfigure = ''
echo "LIB = ${db.out}/lib" > config.in
echo "INCLUDE = ${db.dev}/include" >> config.in
echo "LIB = ${db}/lib" > config.in
echo "INCLUDE = ${db}/include" >> config.in
'';
}
</programlisting>
</para>
<para>
Dependencies on other Perl packages can be specified in the
<varname>buildInputs</varname> and <varname>propagatedBuildInputs</varname>
attributes. If something is exclusively a build-time dependency, use
<varname>buildInputs</varname>; if its (also) a runtime dependency, use
<varname>propagatedBuildInputs</varname>. For instance, this builds a Perl
module that has runtime dependencies on a bunch of other modules:
</para>
<para>Dependencies on other Perl packages can be specified in the
<varname>buildInputs</varname> and
<varname>propagatedBuildInputs</varname> attributes. If something is
exclusively a build-time dependency, use
<varname>buildInputs</varname>; if its (also) a runtime dependency,
use <varname>propagatedBuildInputs</varname>. For instance, this
builds a Perl module that has runtime dependencies on a bunch of other
modules:
<programlisting>
ClassC3Componentised = buildPerlPackage rec {
name = "Class-C3-Componentised-1.0004";
@@ -135,26 +137,24 @@ ClassC3Componentised = buildPerlPackage rec {
];
};
</programlisting>
</para>
<section xml:id="ssec-generation-from-CPAN">
<title>Generation from CPAN</title>
</para>
<para>
Nix expressions for Perl packages can be generated (almost) automatically
from CPAN. This is done by the program
<command>nix-generate-from-cpan</command>, which can be installed as
follows:
</para>
<section xml:id="ssec-generation-from-CPAN"><title>Generation from CPAN</title>
<para>Nix expressions for Perl packages can be generated (almost)
automatically from CPAN. This is done by the program
<command>nix-generate-from-cpan</command>, which can be installed
as follows:</para>
<screen>
$ nix-env -i nix-generate-from-cpan
</screen>
<para>
This program takes a Perl module name, looks it up on CPAN, fetches and
unpacks the corresponding package, and prints a Nix expression on standard
output. For example:
<para>This program takes a Perl module name, looks it up on CPAN,
fetches and unpacks the corresponding package, and prints a Nix
expression on standard output. For example:
<screen>
$ nix-generate-from-cpan XML::Simple
XMLSimple = buildPerlPackage rec {
@@ -170,23 +170,12 @@ $ nix-generate-from-cpan XML::Simple
};
};
</screen>
The output can be pasted into
<filename>pkgs/top-level/perl-packages.nix</filename> or wherever else you
need it.
</para>
</section>
<section xml:id="ssec-perl-cross-compilation">
<title>Cross-compiling modules</title>
The output can be pasted into
<filename>pkgs/top-level/perl-packages.nix</filename> or wherever else
you need it.</para>
<para>
Nixpkgs has experimental support for cross-compiling Perl modules. In many
cases, it will just work out of the box, even for modules with native
extensions. Sometimes, however, the Makefile.PL for a module may
(indirectly) import a native module. In that case, you will need to make a
stub for that module that will satisfy the Makefile.PL and install it into
<filename>lib/perl5/site_perl/cross_perl/${perl.version}</filename>. See the
<varname>postInstall</varname> for <varname>DBI</varname> for an example.
</para>
</section>
</section>
</section>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,74 +1,58 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-language-qt">
<title>Qt</title>
<para>
Qt is a comprehensive desktop and mobile application development toolkit for
C++. Legacy support is available for Qt 3 and Qt 4, but all current
development uses Qt 5. The Qt 5 packages in Nixpkgs are updated frequently to
take advantage of new features, but older versions are typically retained
until their support window ends. The most important consideration in
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>
<title>Qt</title>
<section xml:id="ssec-qt-libraries">
<title>Packaging Libraries for Nixpkgs</title>
<para>
Qt is a comprehensive desktop and mobile application development toolkit for C++.
Legacy support is available for Qt 3 and Qt 4, but all current development uses Qt 5.
The Qt 5 packages in Nixpkgs are updated frequently to take advantage of new features,
but older versions are typically retained until their support window ends.
The most important consideration in 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>
Whenever possible, libraries that use Qt 5 should be built with each
available version. Packages providing libraries should be added to the
top-level function <varname>mkLibsForQt5</varname>, which is used to build a
set of libraries for every Qt 5 version. A special
<varname>callPackage</varname> function is used in this scope to ensure that
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
set such as <literal>qt5</literal> or <literal>libsForQt5</literal>.
</para>
<section xml:id="ssec-qt-libraries"><title>Packaging Libraries for Nixpkgs</title>
<para>
If a library does not support a particular version of Qt 5, it is best to
mark it as broken by setting its <literal>meta.broken</literal> attribute. A
package may be marked broken for certain versions by testing the
<literal>qtbase.version</literal> attribute, which will always give the
current Qt 5 version.
</para>
</section>
<para>
Whenever possible, libraries that use Qt 5 should be built with each available version.
Packages providing libraries should be added to the top-level function <varname>mkLibsForQt5</varname>,
which is used to build a set of libraries for every Qt 5 version.
A special <varname>callPackage</varname> function is used in this scope to ensure that 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 set such as <literal>qt5</literal> or <literal>libsForQt5</literal>.
</para>
<section xml:id="ssec-qt-applications">
<title>Packaging Applications for Nixpkgs</title>
<para>
If a library does not support a particular version of Qt 5, it is best to mark it as broken by setting its <literal>meta.broken</literal> attribute.
A package may be marked broken for certain versions by testing the <literal>qtbase.version</literal> attribute, which will always give the current Qt 5 version.
</para>
<para>
Call your application expression using
<literal>libsForQt5.callPackage</literal> instead of
<literal>callPackage</literal>. Import dependencies unqualified, i.e.,
<literal>qtbase</literal> not <literal>qt5.qtbase</literal>. <emphasis>Do
not</emphasis> import a package set such as <literal>qt5</literal> or
<literal>libsForQt5</literal>.
</para>
<para>
Qt 5 maintains strict backward compatibility, so it is generally best to
build an application package against the latest version using the
<varname>libsForQt5</varname> library set. In case a package does not build
with the latest Qt version, it is possible to pick a set pinned to a
particular version, e.g. <varname>libsForQt55</varname> for Qt 5.5, if that
is the latest version the package supports. If a package must be pinned to
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>
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
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>.
</para>
</section>
</section>
<section xml:id="ssec-qt-applications"><title>Packaging Applications for Nixpkgs</title>
<para>
Call your application expression using <literal>libsForQt5.callPackage</literal> instead of <literal>callPackage</literal>.
Import dependencies unqualified, i.e., <literal>qtbase</literal> not <literal>qt5.qtbase</literal>.
<emphasis>Do not</emphasis> import a package set such as <literal>qt5</literal> or <literal>libsForQt5</literal>.
</para>
<para>
Qt 5 maintains strict backward compatibility, so it is generally best to build an application package against the latest version using the <varname>libsForQt5</varname> library set.
In case a package does not build with the latest Qt version, it is possible to pick a set pinned to a particular version, e.g. <varname>libsForQt55</varname> for Qt 5.5, if that is the latest version the package supports.
If a package must be pinned to 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>
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 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>.
</para>
</section>
</section>

View File

@@ -1,120 +0,0 @@
R packages
==========
## Installation
Define an environment for R that contains all the libraries that you'd like to
use by adding the following snippet to your $HOME/.config/nixpkgs/config.nix file:
```nix
{
packageOverrides = super: let self = super.pkgs; in
{
rEnv = super.rWrapper.override {
packages = with self.rPackages; [
devtools
ggplot2
reshape2
yaml
optparse
];
};
};
}
```
Then you can use `nix-env -f "<nixpkgs>" -iA rEnv` to install it into your user
profile. The set of available libraries can be discovered by running the
command `nix-env -f "<nixpkgs>" -qaP -A rPackages`. The first column from that
output is the name that has to be passed to rWrapper in the code snipped above.
However, if you'd like to add a file to your project source to make the
environment available for other contributors, you can create a `default.nix`
file like so:
```nix
let
pkgs = import <nixpkgs> {};
stdenv = pkgs.stdenv;
in with pkgs; {
myProject = stdenv.mkDerivation {
name = "myProject";
version = "1";
src = if pkgs.lib.inNixShell then null else nix;
buildInputs = with rPackages; [
R
ggplot2
knitr
];
};
}
```
and then run `nix-shell .` to be dropped into a shell with those packages
available.
## RStudio
RStudio uses a standard set of packages and ignores any custom R
environments or installed packages you may have. To create a custom
environment, see `rstudioWrapper`, which functions similarly to
`rWrapper`:
```nix
{
packageOverrides = super: let self = super.pkgs; in
{
rstudioEnv = super.rstudioWrapper.override {
packages = with self.rPackages; [
dplyr
ggplot2
reshape2
];
};
};
}
```
Then like above, `nix-env -f "<nixpkgs>" -iA rstudioEnv` will install
this into your user profile.
Alternatively, you can create a self-contained `shell.nix` without the need to
modify any configuration files:
```nix
{ pkgs ? import <nixpkgs> {}
}:
pkgs.rstudioWrapper.override {
packages = with pkgs.rPackages; [ dplyr ggplot2 reshape2 ];
}
```
Executing `nix-shell` will then drop you into an environment equivalent to the
one above. If you need additional packages just add them to the list and
re-enter the shell.
## Updating the package set
```bash
nix-shell generate-shell.nix
Rscript generate-r-packages.R cran > cran-packages.nix.new
mv cran-packages.nix.new cran-packages.nix
Rscript generate-r-packages.R bioc > bioc-packages.nix.new
mv bioc-packages.nix.new bioc-packages.nix
```
`generate-r-packages.R <repo>` reads `<repo>-packages.nix`, therefor the renaming.
## Testing if the Nix-expression could be evaluated
```bash
nix-build test-evaluation.nix --dry-run
```
If this exits fine, the expression is ok. If not, you have to edit `default.nix`

View File

@@ -1,19 +1,17 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-language-ruby">
<title>Ruby</title>
<para>
There currently is support to bundle applications that are packaged as Ruby
gems. The utility "bundix" allows you to write a
<filename>Gemfile</filename>, let bundler create a
<filename>Gemfile.lock</filename>, and then convert this into a nix
expression that contains all Gem dependencies automatically.
</para>
<title>Ruby</title>
<para>
For example, to package sensu, we did:
</para>
<para>There currently is support to bundle applications that are packaged as
Ruby gems. The utility "bundix" allows you to write a
<filename>Gemfile</filename>, let bundler create a
<filename>Gemfile.lock</filename>, and then convert this into a nix
expression that contains all Gem dependencies automatically.
</para>
<para>For example, to package sensu, we did:</para>
<screen>
<![CDATA[$ cd pkgs/servers/monitoring
@@ -44,29 +42,17 @@ bundlerEnv rec {
}]]>
</screen>
<para>
Please check in the <filename>Gemfile</filename>,
<filename>Gemfile.lock</filename> and the <filename>gemset.nix</filename> so
future updates can be run easily.
</para>
<para>Please check in the <filename>Gemfile</filename>,
<filename>Gemfile.lock</filename> and the
<filename>gemset.nix</filename> so future updates can be run easily.
</para>
<para>
Updating Ruby packages can then be done like this:
</para>
<screen>
<![CDATA[$ cd pkgs/servers/monitoring/sensu
$ nix-shell -p bundler --run 'bundle lock --update'
$ nix-shell -p bundix --run 'bundix'
]]>
</screen>
<para>
For tools written in Ruby - i.e. where the desire is to install a package and
then execute e.g. <command>rake</command> at the command line, there is an
alternative builder called <literal>bundlerApp</literal>. Set up the
<filename>gemset.nix</filename> the same way, and then, for example:
</para>
<para>For tools written in Ruby - i.e. where the desire is to install
a package and then execute e.g. <command>rake</command> at the command
line, there is an alternative builder called <literal>bundlerApp</literal>.
Set up the <filename>gemset.nix</filename> the same way, and then, for
example:
</para>
<screen>
<![CDATA[{ lib, bundlerApp }:
@@ -86,31 +72,31 @@ bundlerApp {
}]]>
</screen>
<para>
The chief advantage of <literal>bundlerApp</literal> over
<literal>bundlerEnv</literal> is the executables introduced in the
environment are precisely those selected in the <literal>exes</literal> list,
as opposed to <literal>bundlerEnv</literal> which adds all the executables
made available by gems in the gemset, which can mean e.g.
<command>rspec</command> or <command>rake</command> in unpredictable versions
available from various packages.
</para>
<para>The chief advantage of <literal>bundlerApp</literal> over
<literal>bundlerEnv</literal> is the executables introduced in the
environment are precisely those selected in the <literal>exes</literal>
list, as opposed to <literal>bundlerEnv</literal> which adds all the
executables made available by gems in the gemset, which can mean e.g.
<command>rspec</command> or <command>rake</command> in unpredictable
versions available from various packages.
</para>
<para>
Resulting derivations for both builders also have two helpful attributes,
<literal>env</literal> and <literal>wrappedRuby</literal>. The first one
allows one to quickly drop into <command>nix-shell</command> with the
specified environment present. E.g. <command>nix-shell -A sensu.env</command>
would give you an environment with Ruby preset so it has all the libraries
necessary for <literal>sensu</literal> in its paths. The second one can be
used to make derivations from custom Ruby scripts which have
<filename>Gemfile</filename>s with their dependencies specified. It is a
derivation with <command>ruby</command> wrapped so it can find all the needed
dependencies. For example, to make a derivation <literal>my-script</literal>
for a <filename>my-script.rb</filename> (which should be placed in
<filename>bin</filename>) you should run <command>bundix</command> as
specified above and then use <literal>bundlerEnv</literal> like this:
</para>
<para>Resulting derivations for both builders also have two helpful
attributes, <literal>env</literal> and <literal>wrappedRuby</literal>.
The first one allows one to quickly drop into
<command>nix-shell</command> with the specified environment present.
E.g. <command>nix-shell -A sensu.env</command> would give you an
environment with Ruby preset so it has all the libraries necessary
for <literal>sensu</literal> in its paths. The second one can be
used to make derivations from custom Ruby scripts which have
<filename>Gemfile</filename>s with their dependencies specified. It is
a derivation with <command>ruby</command> wrapped so it can find all
the needed dependencies. For example, to make a derivation
<literal>my-script</literal> for a <filename>my-script.rb</filename>
(which should be placed in <filename>bin</filename>) you should run
<command>bundix</command> as specified above and then use
<literal>bundlerEnv</literal> like this:
</para>
<programlisting>
<![CDATA[let env = bundlerEnv {
@@ -132,4 +118,5 @@ in stdenv.mkDerivation {
'';
}]]>
</programlisting>
</section>

View File

@@ -0,0 +1,91 @@
---
title: Rust
author: Matthias Beyer
date: 2017-03-05
---
# User's Guide to the Rust Infrastructure
To install the rust compiler and cargo put
```
rustStable.rustc
rustStable.cargo
```
into the `environment.systemPackages` or bring them into scope with
`nix-shell -p rustStable.rustc -p rustStable.cargo`.
There are also `rustBeta` and `rustNightly` package sets available.
These are not updated very regularly. For daily builds use either rustup from
nixpkgs or use the [Rust nightlies overlay](#using-the-rust-nightlies-overlay).
## Packaging Rust applications
Rust applications are packaged by using the `buildRustPackage` helper from `rustPlatform`:
```
with rustPlatform;
buildRustPackage rec {
name = "ripgrep-${version}";
version = "0.4.0";
src = fetchFromGitHub {
owner = "BurntSushi";
repo = "ripgrep";
rev = "${version}";
sha256 = "0y5d1n6hkw85jb3rblcxqas2fp82h3nghssa4xqrhqnz25l799pj";
};
depsSha256 = "0q68qyl2h6i0qsz82z840myxlnjay8p1w5z7hfyr8fqp7wgwa9cx";
meta = with stdenv.lib; {
description = "A utility that combines the usability of The Silver Searcher with the raw speed of grep";
homepage = https://github.com/BurntSushi/ripgrep;
license = with licenses; [ unlicense ];
maintainers = [ maintainers.tailhook ];
platforms = platforms.all;
};
}
```
`buildRustPackage` requires a `depsSha256` attribute which is computed over
all crate sources of this package. Currently it is obtained by inserting a
fake checksum into the expression and building the package once. The correct
checksum can be then take from the failed build.
To install crates with nix there is also an experimental project called
[nixcrates](https://github.com/fractalide/nixcrates).
## Using the Rust nightlies overlay
Mozilla provides an overlay for nixpkgs to bring a nightly version of Rust into scope.
This overlay can _also_ be used to install recent unstable or stable versions
of Rust, if desired.
To use this overlay, clone
[nixpkgs-mozilla](https://github.com/mozilla/nixpkgs-mozilla),
and create a symbolic link to the file
[rust-overlay.nix](https://github.com/mozilla/nixpkgs-mozilla/blob/master/rust-overlay.nix)
in the `~/.config/nixpkgs/overlays` directory.
$ git clone https://github.com/mozilla/nixpkgs-mozilla.git
$ mkdir -p ~/.config/nixpkgs/overlays
$ ln -s $(pwd)/nixpkgs-mozilla/rust-overlay.nix ~/.config/nixpkgs/overlays/rust-overlay.nix
The latest version can be installed with the following command:
$ nix-env -Ai nixos.rustChannels.stable.rust
Or using the attribute with nix-shell:
$ nix-shell -p nixos.rustChannels.stable.rust
To install the beta or nightly channel, "stable" should be substituted by
"nightly" or "beta", or
use the function provided by this overlay to pull a version based on a
build date.
The overlay automatically updates itself as it uses the same source as
[rustup](https://www.rustup.rs/).

View File

@@ -1,399 +0,0 @@
---
title: Rust
author: Matthias Beyer
date: 2017-03-05
---
# User's Guide to the Rust Infrastructure
To install the rust compiler and cargo put
```
rustc
cargo
```
into the `environment.systemPackages` or bring them into
scope with `nix-shell -p rustc cargo`.
> If you are using NixOS and you want to use rust without a nix expression you
> probably want to add the following in your `configuration.nix` to build
> crates with C dependencies.
>
> environment.systemPackages = [binutils gcc gnumake openssl pkgconfig]
For daily builds (beta and nightly) use either rustup from
nixpkgs or use the [Rust nightlies
overlay](#using-the-rust-nightlies-overlay).
## Compiling Rust applications with Cargo
Rust applications are packaged by using the `buildRustPackage` helper from `rustPlatform`:
```
rustPlatform.buildRustPackage rec {
name = "ripgrep-${version}";
version = "0.4.0";
src = fetchFromGitHub {
owner = "BurntSushi";
repo = "ripgrep";
rev = "${version}";
sha256 = "0y5d1n6hkw85jb3rblcxqas2fp82h3nghssa4xqrhqnz25l799pj";
};
cargoSha256 = "0q68qyl2h6i0qsz82z840myxlnjay8p1w5z7hfyr8fqp7wgwa9cx";
meta = with stdenv.lib; {
description = "A fast line-oriented regex search tool, similar to ag and ack";
homepage = https://github.com/BurntSushi/ripgrep;
license = licenses.unlicense;
maintainers = [ maintainers.tailhook ];
platforms = platforms.all;
};
}
```
`buildRustPackage` requires a `cargoSha256` attribute which is computed over
all crate sources of this package. Currently it is obtained by inserting a
fake checksum into the expression and building the package once. The correct
checksum can be then take from the failed build.
When the `Cargo.lock`, provided by upstream, is not in sync with the
`Cargo.toml`, it is possible to use `cargoPatches` to update it. All patches
added in `cargoPatches` will also be prepended to the patches in `patches` at
build-time.
## Compiling Rust crates using Nix instead of Cargo
### Simple operation
When run, `cargo build` produces a file called `Cargo.lock`,
containing pinned versions of all dependencies. Nixpkgs contains a
tool called `carnix` (`nix-env -iA nixos.carnix`), which can be used
to turn a `Cargo.lock` into a Nix expression.
That Nix expression calls `rustc` directly (hence bypassing Cargo),
and can be used to compile a crate and all its dependencies. Here is
an example for a minimal `hello` crate:
$ cargo new hello
$ cd hello
$ cargo build
Compiling hello v0.1.0 (file:///tmp/hello)
Finished dev [unoptimized + debuginfo] target(s) in 0.20 secs
$ carnix -o hello.nix --src ./. Cargo.lock --standalone
$ nix-build hello.nix -A hello_0_1_0
Now, the file produced by the call to `carnix`, called `hello.nix`, looks like:
```
# Generated by carnix 0.6.5: carnix -o hello.nix --src ./. Cargo.lock --standalone
{ lib, stdenv, buildRustCrate, fetchgit }:
let kernel = stdenv.buildPlatform.parsed.kernel.name;
# ... (content skipped)
in
rec {
hello = f: hello_0_1_0 { features = hello_0_1_0_features { hello_0_1_0 = f; }; };
hello_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
crateName = "hello";
version = "0.1.0";
authors = [ "pe@pijul.org <pe@pijul.org>" ];
src = ./.;
inherit dependencies buildDependencies features;
};
hello_0_1_0 = { features?(hello_0_1_0_features {}) }: hello_0_1_0_ {};
hello_0_1_0_features = f: updateFeatures f (rec {
hello_0_1_0.default = (f.hello_0_1_0.default or true);
}) [ ];
}
```
In particular, note that the argument given as `--src` is copied
verbatim to the source. If we look at a more complicated
dependencies, for instance by adding a single line `libc="*"` to our
`Cargo.toml`, we first need to run `cargo build` to update the
`Cargo.lock`. Then, `carnix` needs to be run again, and produces the
following nix file:
```
# Generated by carnix 0.6.5: carnix -o hello.nix --src ./. Cargo.lock --standalone
{ lib, stdenv, buildRustCrate, fetchgit }:
let kernel = stdenv.buildPlatform.parsed.kernel.name;
# ... (content skipped)
in
rec {
hello = f: hello_0_1_0 { features = hello_0_1_0_features { hello_0_1_0 = f; }; };
hello_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
crateName = "hello";
version = "0.1.0";
authors = [ "pe@pijul.org <pe@pijul.org>" ];
src = ./.;
inherit dependencies buildDependencies features;
};
libc_0_2_36_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
crateName = "libc";
version = "0.2.36";
authors = [ "The Rust Project Developers" ];
sha256 = "01633h4yfqm0s302fm0dlba469bx8y6cs4nqc8bqrmjqxfxn515l";
inherit dependencies buildDependencies features;
};
hello_0_1_0 = { features?(hello_0_1_0_features {}) }: hello_0_1_0_ {
dependencies = mapFeatures features ([ libc_0_2_36 ]);
};
hello_0_1_0_features = f: updateFeatures f (rec {
hello_0_1_0.default = (f.hello_0_1_0.default or true);
libc_0_2_36.default = true;
}) [ libc_0_2_36_features ];
libc_0_2_36 = { features?(libc_0_2_36_features {}) }: libc_0_2_36_ {
features = mkFeatures (features.libc_0_2_36 or {});
};
libc_0_2_36_features = f: updateFeatures f (rec {
libc_0_2_36.default = (f.libc_0_2_36.default or true);
libc_0_2_36.use_std =
(f.libc_0_2_36.use_std or false) ||
(f.libc_0_2_36.default or false) ||
(libc_0_2_36.default or false);
}) [];
}
```
Here, the `libc` crate has no `src` attribute, so `buildRustCrate`
will fetch it from [crates.io](https://crates.io). A `sha256`
attribute is still needed for Nix purity.
### Handling external dependencies
Some crates require external libraries. For crates from
[crates.io](https://crates.io), such libraries can be specified in
`defaultCrateOverrides` package in nixpkgs itself.
Starting from that file, one can add more overrides, to add features
or build inputs by overriding the hello crate in a seperate file.
```
with import <nixpkgs> {};
((import ./hello.nix).hello {}).override {
crateOverrides = defaultCrateOverrides // {
hello = attrs: { buildInputs = [ openssl ]; };
};
}
```
Here, `crateOverrides` is expected to be a attribute set, where the
key is the crate name without version number and the value a function.
The function gets all attributes passed to `buildRustCrate` as first
argument and returns a set that contains all attribute that should be
overwritten.
For more complicated cases, such as when parts of the crate's
derivation depend on the the crate's version, the `attrs` argument of
the override above can be read, as in the following example, which
patches the derivation:
```
with import <nixpkgs> {};
((import ./hello.nix).hello {}).override {
crateOverrides = defaultCrateOverrides // {
hello = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "1.0") {
postPatch = ''
substituteInPlace lib/zoneinfo.rs \
--replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
'';
};
};
}
```
Another situation is when we want to override a nested
dependency. This actually works in the exact same way, since the
`crateOverrides` parameter is forwarded to the crate's
dependencies. For instance, to override the build inputs for crate
`libc` in the example above, where `libc` is a dependency of the main
crate, we could do:
```
with import <nixpkgs> {};
((import hello.nix).hello {}).override {
crateOverrides = defaultCrateOverrides // {
libc = attrs: { buildInputs = []; };
};
}
```
### Options and phases configuration
Actually, the overrides introduced in the previous section are more
general. A number of other parameters can be overridden:
- The version of rustc used to compile the crate:
```
(hello {}).override { rust = pkgs.rust; };
```
- Whether to build in release mode or debug mode (release mode by
default):
```
(hello {}).override { release = false; };
```
- Whether to print the commands sent to rustc when building
(equivalent to `--verbose` in cargo:
```
(hello {}).override { verbose = false; };
```
- Extra arguments to be passed to `rustc`:
```
(hello {}).override { extraRustcOpts = "-Z debuginfo=2"; };
```
- Phases, just like in any other derivation, can be specified using
the following attributes: `preUnpack`, `postUnpack`, `prePatch`,
`patches`, `postPatch`, `preConfigure` (in the case of a Rust crate,
this is run before calling the "build" script), `postConfigure`
(after the "build" script),`preBuild`, `postBuild`, `preInstall` and
`postInstall`. As an example, here is how to create a new module
before running the build script:
```
(hello {}).override {
preConfigure = ''
echo "pub const PATH=\"${hi.out}\";" >> src/path.rs"
'';
};
```
### Features
One can also supply features switches. For example, if we want to
compile `diesel_cli` only with the `postgres` feature, and no default
features, we would write:
```
(callPackage ./diesel.nix {}).diesel {
default = false;
postgres = true;
}
```
Where `diesel.nix` is the file generated by Carnix, as explained above.
## Setting Up `nix-shell`
Oftentimes you want to develop code from within `nix-shell`. Unfortunately
`buildRustCrate` does not support common `nix-shell` operations directly
(see [this issue](https://github.com/NixOS/nixpkgs/issues/37945))
so we will use `stdenv.mkDerivation` instead.
Using the example `hello` project above, we want to do the following:
- Have access to `cargo` and `rustc`
- Have the `openssl` library available to a crate through it's _normal_
compilation mechanism (`pkg-config`).
A typical `shell.nix` might look like:
```
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "rust-env";
nativeBuildInputs = [
rustc cargo
# Example Build-time Additional Dependencies
pkgconfig
];
buildInputs = [
# Example Run-time Additional Dependencies
openssl
];
# Set Environment Variables
RUST_BACKTRACE = 1;
}
```
You should now be able to run the following:
```
$ nix-shell --pure
$ cargo build
$ cargo test
```
### Controlling Rust Version Inside `nix-shell`
To control your rust version (i.e. use nightly) from within `shell.nix` (or
other nix expressions) you can use the following `shell.nix`
```
# Latest Nightly
with import <nixpkgs> {};
let src = fetchFromGitHub {
owner = "mozilla";
repo = "nixpkgs-mozilla";
# commit from: 2018-03-27
rev = "2945b0b6b2fd19e7d23bac695afd65e320efcebe";
sha256 = "034m1dryrzh2lmjvk3c0krgip652dql46w5yfwpvh7gavd3iypyw";
};
in
with import "${src.out}/rust-overlay.nix" pkgs pkgs;
stdenv.mkDerivation {
name = "rust-env";
buildInputs = [
# Note: to use use stable, just replace `nightly` with `stable`
latest.rustChannels.nightly.rust
# Add some extra dependencies from `pkgs`
pkgconfig openssl
];
# Set Environment Variables
RUST_BACKTRACE = 1;
}
```
Now run:
```
$ rustc --version
rustc 1.26.0-nightly (188e693b3 2018-03-26)
```
To see that you are using nightly.
## Using the Rust nightlies overlay
Mozilla provides an overlay for nixpkgs to bring a nightly version of Rust into scope.
This overlay can _also_ be used to install recent unstable or stable versions
of Rust, if desired.
To use this overlay, clone
[nixpkgs-mozilla](https://github.com/mozilla/nixpkgs-mozilla),
and create a symbolic link to the file
[rust-overlay.nix](https://github.com/mozilla/nixpkgs-mozilla/blob/master/rust-overlay.nix)
in the `~/.config/nixpkgs/overlays` directory.
$ git clone https://github.com/mozilla/nixpkgs-mozilla.git
$ mkdir -p ~/.config/nixpkgs/overlays
$ ln -s $(pwd)/nixpkgs-mozilla/rust-overlay.nix ~/.config/nixpkgs/overlays/rust-overlay.nix
The latest version can be installed with the following command:
$ nix-env -Ai nixos.latest.rustChannels.stable.rust
Or using the attribute with nix-shell:
$ nix-shell -p nixos.latest.rustChannels.stable.rust
To install the beta or nightly channel, "stable" should be substituted by
"nightly" or "beta", or
use the function provided by this overlay to pull a version based on a
build date.
The overlay automatically updates itself as it uses the same source as
[rustup](https://www.rustup.rs/).

View File

@@ -1,42 +1,27 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="sec-language-texlive">
<title>TeX Live</title>
<para>
Since release 15.09 there is a new TeX Live packaging that lives entirely
under attribute <varname>texlive</varname>.
</para>
<section xml:id="sec-language-texlive-users-guide">
<title>User's guide</title>
<title>TeX Live</title>
<para>Since release 15.09 there is a new TeX Live packaging that lives entirely under attribute <varname>texlive</varname>.</para>
<section><title>User's guide</title>
<itemizedlist>
<listitem>
<para>
For basic usage just pull <varname>texlive.combined.scheme-basic</varname>
for an environment with basic LaTeX support.
</para>
</listitem>
<listitem>
<para>
It typically won't work to use separately installed packages together.
Instead, you can build a custom set of packages like this:
<programlisting>
<listitem><para>
For basic usage just pull <varname>texlive.combined.scheme-basic</varname> for an environment with basic LaTeX support.</para></listitem>
<listitem><para>
It typically won't work to use separately installed packages together.
Instead, you can build a custom set of packages like this:
<programlisting>
texlive.combine {
inherit (texlive) scheme-small collection-langkorean algorithms cm-super;
}
</programlisting>
There are all the schemes, collections and a few thousand packages, as
defined upstream (perhaps with tiny differences).
</para>
</listitem>
<listitem>
<para>
By default you only get executables and files needed during runtime, and a
little documentation for the core packages. To change that, you need to
add <varname>pkgFilter</varname> function to <varname>combine</varname>.
<programlisting>
There are all the schemes, collections and a few thousand packages, as defined upstream (perhaps with tiny differences).
</para></listitem>
<listitem><para>
By default you only get executables and files needed during runtime, and a little documentation for the core packages. To change that, you need to add <varname>pkgFilter</varname> function to <varname>combine</varname>.
<programlisting>
texlive.combine {
# inherit (texlive) whatever-you-want;
pkgFilter = pkg:
@@ -45,55 +30,31 @@ texlive.combine {
# there are also other attributes: version, name
}
</programlisting>
</para>
</listitem>
<listitem>
<para>
You can list packages e.g. by <command>nix repl</command>.
<programlisting><![CDATA[
$ nix repl
nix-repl> :l <nixpkgs>
nix-repl> texlive.collection-<TAB>
]]></programlisting>
</para>
</listitem>
<listitem>
<para>
Note that the wrapper assumes that the result has a chance to be useful.
For example, the core executables should be present, as well as some core
data files. The supported way of ensuring this is by including some
scheme, for example <varname>scheme-basic</varname>, into the combination.
</para>
</listitem>
</para></listitem>
<listitem><para>
You can list packages e.g. by <command>nix-repl</command>.
<programlisting>
$ nix-repl
nix-repl> :l &lt;nixpkgs>
nix-repl> texlive.collection-&lt;TAB>
</programlisting>
</para></listitem>
</itemizedlist>
</section>
<section xml:id="sec-language-texlive-known-problems">
<title>Known problems</title>
<itemizedlist>
<listitem>
<para>
Some tools are still missing, e.g. luajittex;
</para>
</listitem>
<listitem>
<para>
some apps aren't packaged/tested yet (asymptote, biber, etc.);
</para>
</listitem>
<listitem>
<para>
feature/bug: when a package is rejected by <varname>pkgFilter</varname>,
its dependencies are still propagated;
</para>
</listitem>
<listitem>
<para>
in case of any bugs or feature requests, file a github issue or better a
pull request and /cc @vcunat.
</para>
</listitem>
</itemizedlist>
</section>
</section>
<section><title>Known problems</title>
<itemizedlist>
<listitem><para>
Some tools are still missing, e.g. luajittex;</para></listitem>
<listitem><para>
some apps aren't packaged/tested yet (asymptote, biber, etc.);</para></listitem>
<listitem><para>
feature/bug: when a package is rejected by <varname>pkgFilter</varname>, its dependencies are still propagated;</para></listitem>
<listitem><para>
in case of any bugs or feature requests, file a github issue or better a pull request and /cc @vcunat.</para></listitem>
</itemizedlist>
</section>
</section>

View File

@@ -1,115 +0,0 @@
---
title: Titanium
author: Sander van der Burg
date: 2018-11-18
---
# Titanium
The Nixpkgs repository contains facilities to deploy a variety of versions of
the [Titanium SDK](https://www.appcelerator.com) versions, a cross-platform
mobile app development framework using JavaScript as an implementation language,
and includes a function abstraction making it possible to build Titanium
applications for Android and iOS devices from source code.
Not all Titanium features supported -- currently, it can only be used to build
Android and iOS apps.
Building a Titanium app
-----------------------
We can build a Titanium app from source for Android or iOS and for debugging or
release purposes by invoking the `titaniumenv.buildApp {}` function:
```nix
titaniumenv.buildApp {
name = "myapp";
src = ./myappsource;
preBuild = "";
target = "android"; # or 'iphone'
tiVersion = "7.1.0.GA";
release = true;
androidsdkArgs = {
platformVersions = [ "25" "26" ];
};
androidKeyStore = ./keystore;
androidKeyAlias = "myfirstapp";
androidKeyStorePassword = "secret";
xcodeBaseDir = "/Applications/Xcode.app";
xcodewrapperArgs = {
version = "9.3";
};
iosMobileProvisioningProfile = ./myprovisioning.profile;
iosCertificateName = "My Company";
iosCertificate = ./mycertificate.p12;
iosCertificatePassword = "secret";
iosVersion = "11.3";
iosBuildStore = false;
enableWirelessDistribution = true;
installURL = "/installipa.php";
}
```
The `titaniumenv.buildApp {}` function takes the following parameters:
* The `name` parameter refers to the name in the Nix store.
* The `src` parameter refers to the source code location of the app that needs
to be built.
* `preRebuild` contains optional build instructions that are carried out before
the build starts.
* `target` indicates for which device the app must be built. Currently only
'android' and 'iphone' (for iOS) are supported.
* `tiVersion` can be used to optionally override the requested Titanium version
in `tiapp.xml`. If not specified, it will use the version in `tiapp.xml`.
* `release` should be set to true when building an app for submission to the
Google Playstore or Apple Appstore. Otherwise, it should be false.
When the `target` has been set to `android`, we can configure the following
parameters:
* The `androidSdkArgs` parameter refers to an attribute set that propagates all
parameters to the `androidenv.composeAndroidPackages {}` function. This can
be used to install all relevant Android plugins that may be needed to perform
the Android build. If no parameters are given, it will deploy the platform
SDKs for API-levels 25 and 26 by default.
When the `release` parameter has been set to true, you need to provide
parameters to sign the app:
* `androidKeyStore` is the path to the keystore file
* `androidKeyAlias` is the key alias
* `androidKeyStorePassword` refers to the password to open the keystore file.
When the `target` has been set to `iphone`, we can configure the following
parameters:
* The `xcodeBaseDir` parameter refers to the location where Xcode has been
installed. When none value is given, the above value is the default.
* The `xcodewrapperArgs` parameter passes arbitrary parameters to the
`xcodeenv.composeXcodeWrapper {}` function. This can, for example, be used
to adjust the default version of Xcode.
When `release` has been set to true, you also need to provide the following
parameters:
* `iosMobileProvisioningProfile` refers to a mobile provisioning profile needed
for signing.
* `iosCertificateName` refers to the company name in the P12 certificate.
* `iosCertificate` refers to the path to the P12 file.
* `iosCertificatePassword` contains the password to open the P12 file.
* `iosVersion` refers to the iOS SDK version to use. It defaults to the latest
version.
* `iosBuildStore` should be set to `true` when building for the Apple Appstore
submission. For enterprise or ad-hoc builds it should be set to `false`.
When `enableWirelessDistribution` has been enabled, you must also provide the
path of the PHP script (`installURL`) (that is included with the iOS build
environment) to enable wireless ad-hoc installations.
Emulating or simulating the app
-------------------------------
It is also possible to simulate the correspond iOS simulator build by using
`xcodeenv.simulateApp {}` and emulate an Android APK by using
`androidenv.emulateApp {}`.

View File

@@ -0,0 +1,135 @@
---
title: User's Guide for Vim in Nixpkgs
author: Marc Weber
date: 2016-06-25
---
# User's Guide to Vim Plugins/Addons/Bundles/Scripts in Nixpkgs
You'll get a vim(-your-suffix) in PATH also loading the plugins you want.
Loading can be deferred; see examples.
Vim packages, VAM (=vim-addon-manager) and Pathogen are supported to load
packages.
## Custom configuration
Adding custom .vimrc lines can be done using the following code:
```
vim_configurable.customize {
name = "vim-with-plugins";
vimrcConfig.customRC = ''
set hidden
'';
}
```
## Vim packages
To store you plugins in Vim packages the following example can be used:
```
vim_configurable.customize {
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
# loaded on launch
start = [ youcompleteme fugitive ];
# manually loadable by calling `:packadd $plugin-name`
opt = [ phpCompletion elm-vim ];
# To automatically load a plugin when opening a filetype, add vimrc lines like:
# autocmd FileType php :packadd phpCompletion
}
};
```
## VAM
### dependencies by Vim plugins
VAM introduced .json files supporting dependencies without versioning
assuming that "using latest version" is ok most of the time.
### Example
First create a vim-scripts file having one plugin name per line. Example:
"tlib"
{'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:
call vam#Scripts(expand('~/.vim-scripts'), {})
Create a default.nix file:
{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
nixpkgs.vim_configurable.customize { name = "vim"; vimrcConfig.vam.pluginDictionaries = [ "vim-addon-vim2nix" ]; }
Create a generate.vim file:
ActivateAddons vim-addon-vim2nix
let vim_scripts = "vim-scripts"
call nix#ExportPluginsForNix({
\ 'path_to_nixpkgs': eval('{"'.substitute(substitute(substitute($NIX_PATH, ':', ',', 'g'), '=',':', 'g'), '\([:,]\)', '"\1"',"g").'"}')["nixpkgs"],
\ 'cache_file': '/tmp/vim2nix-cache',
\ 'try_catch': 0,
\ 'plugin_dictionaries': ["vim-addon-manager"]+map(readfile(vim_scripts), 'eval(v:val)')
\ })
Then run
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 can add your vim to your system's configuration file like this and start it by "vim-my":
my-vim =
let plugins = let inherit (vimUtils) buildVimPluginFrom2Nix; in {
copy paste output1 here
}; in vim_configurable.customize {
name = "vim-my";
vimrcConfig.vam.knownPlugins = plugins; # optional
vimrcConfig.vam.pluginDictionaries = [
copy paste output2 here
];
# Pathogen would be
# vimrcConfig.pathogen.knownPlugins = plugins; # plugins
# vimrcConfig.pathogen.pluginNames = ["tlib"];
};
Sample output1:
"reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
name = "reload";
src = fetchgit {
url = "git://github.com/xolox/vim-reload";
rev = "0a601a668727f5b675cb1ddc19f6861f3f7ab9e1";
sha256 = "0vb832l9yxj919f5hfg6qj6bn9ni57gnjd3bj7zpq7d4iv2s4wdh";
};
dependencies = ["nim-misc"];
};
[...]
Sample output2:
[
''vim-addon-manager''
''tlib''
{ "name" = ''vim-addon-sql''; }
{ "filetype_regex" = ''\%(vim)$$''; "names" = [ ''reload'' ''vim-dev-plugin'' ]; }
]
## Important repositories
- [vim-pi](https://bitbucket.org/vimcommunity/vim-pi) is a plugin repository
from VAM plugin manager meant to be used by others as well used by
- [vim2nix](http://github.com/MarcWeber/vim-addon-vim2nix) which generates the
.nix code

View File

@@ -1,255 +0,0 @@
---
title: User's Guide for Vim in Nixpkgs
author: Marc Weber
date: 2016-06-25
---
# User's Guide to Vim Plugins/Addons/Bundles/Scripts in Nixpkgs
Both Neovim and Vim can be configured to include your favorite plugins
and additional libraries.
Loading can be deferred; see examples.
At the moment we support three different methods for managing plugins:
- Vim packages (*recommend*)
- VAM (=vim-addon-manager)
- Pathogen
- vim-plug
## Custom configuration
Adding custom .vimrc lines can be done using the following code:
```
vim_configurable.customize {
# `name` specifies the name of the executable and package
name = "vim-with-plugins";
vimrcConfig.customRC = ''
set hidden
'';
}
```
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:
```
neovim.override {
configure = {
customRC = ''
# here your custom configuration goes!
'';
};
}
```
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:
```
neovim-qt.override {
neovim = neovim.override {
configure = {
customRC = ''
# your custom configuration
'';
};
};
}
```
## 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:
```
vim_configurable.customize {
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
# loaded on launch
start = [ youcompleteme fugitive ];
# manually loadable by calling `:packadd $plugin-name`
# 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 = [ phpCompletion elm-vim ];
# To automatically load a plugin when opening a filetype, add vimrc lines like:
# autocmd FileType php :packadd phpCompletion
};
}
```
`myVimPackage` is an arbitrary name for the generated package. You can choose any name you like.
For Neovim the syntax is:
```
neovim.override {
configure = {
customRC = ''
# here your custom configuration goes!
'';
packages.myVimPackage = with pkgs.vimPlugins; {
# see examples below how to use custom packages
start = [ ];
# 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 = [ ];
};
};
}
```
The resulting package can be added to `packageOverrides` in `~/.nixpkgs/config.nix` to make it installable:
```
{
packageOverrides = pkgs: with pkgs; {
myVim = vim_configurable.customize {
# `name` specifies the name of the executable and package
name = "vim-with-plugins";
# add here code from the example section
};
myNeovim = neovim.override {
configure = {
# add here code from the example section
};
};
};
}
```
After that you can install your special grafted `myVim` or `myNeovim` packages.
## Managing plugins with vim-plug
To use [vim-plug](https://github.com/junegunn/vim-plug) to manage your Vim
plugins the following example can be used:
```
vim_configurable.customize {
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
# loaded on launch
plug.plugins = [ youcompleteme fugitive phpCompletion elm-vim ];
};
}
```
For Neovim the syntax is:
```
neovim.override {
configure = {
customRC = ''
# here your custom configuration goes!
'';
plug.plugins = with pkgs.vimPlugins; [
vim-go
];
};
}
```
## Managing plugins with VAM
### Handling dependencies of Vim plugins
VAM introduced .json files supporting dependencies without versioning
assuming that "using latest version" is ok most of the time.
### Example
First create a vim-scripts file having one plugin name per line. Example:
"tlib"
{'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:
call vam#Scripts(expand('~/.vim-scripts'), {})
Create a default.nix file:
{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
nixpkgs.vim_configurable.customize { name = "vim"; vimrcConfig.vam.pluginDictionaries = [ "vim-addon-vim2nix" ]; }
Create a generate.vim file:
ActivateAddons vim-addon-vim2nix
let vim_scripts = "vim-scripts"
call nix#ExportPluginsForNix({
\ 'path_to_nixpkgs': eval('{"'.substitute(substitute(substitute($NIX_PATH, ':', ',', 'g'), '=',':', 'g'), '\([:,]\)', '"\1"',"g").'"}')["nixpkgs"],
\ 'cache_file': '/tmp/vim2nix-cache',
\ 'try_catch': 0,
\ 'plugin_dictionaries': ["vim-addon-manager"]+map(readfile(vim_scripts), 'eval(v:val)')
\ })
Then run
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 can add your vim to your system's configuration file like this and start it by "vim-my":
my-vim =
let plugins = let inherit (vimUtils) buildVimPluginFrom2Nix; in {
copy paste output1 here
}; in vim_configurable.customize {
name = "vim-my";
vimrcConfig.vam.knownPlugins = plugins; # optional
vimrcConfig.vam.pluginDictionaries = [
copy paste output2 here
];
# Pathogen would be
# vimrcConfig.pathogen.knownPlugins = plugins; # plugins
# vimrcConfig.pathogen.pluginNames = ["tlib"];
};
Sample output1:
"reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
name = "reload";
src = fetchgit {
url = "git://github.com/xolox/vim-reload";
rev = "0a601a668727f5b675cb1ddc19f6861f3f7ab9e1";
sha256 = "0vb832l9yxj919f5hfg6qj6bn9ni57gnjd3bj7zpq7d4iv2s4wdh";
};
dependencies = ["nim-misc"];
};
[...]
Sample output2:
[
''vim-addon-manager''
''tlib''
{ "name" = ''vim-addon-sql''; }
{ "filetype_regex" = ''\%(vim)$$''; "names" = [ ''reload'' ''vim-dev-plugin'' ]; }
]
## Adding new plugins to nixpkgs
In `pkgs/misc/vim-plugins/vim-plugin-names` we store the plugin names
for all vim plugins we automatically generate plugins for.
The format of this file `github username/github repository`:
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
`vimPlugins` attribute set (`vimPlugins.nerdtree` in our example).
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.
## Important repositories
- [vim-pi](https://bitbucket.org/vimcommunity/vim-pi) is a plugin repository
from VAM plugin manager meant to be used by others as well used by
- [vim2nix](http://github.com/MarcWeber/vim-addon-vim2nix) which generates the
.nix code

View File

@@ -1,26 +0,0 @@
# Generates the documentation for library functons via nixdoc. To add
# another library function file to this list, the include list in the
# file `doc/functions/library.xml` must also be updated.
{ pkgs ? import ./.. {}, locationsXml }:
with pkgs; stdenv.mkDerivation {
name = "nixpkgs-lib-docs";
src = ./../lib;
buildInputs = [ nixdoc ];
installPhase = ''
function docgen {
nixdoc -c "$1" -d "$2" -f "../lib/$1.nix" > "$out/$1.xml"
}
mkdir -p $out
ln -s ${locationsXml} $out/locations.xml
docgen strings 'String manipulation functions'
docgen trivial 'Miscellaneous functions'
docgen lists 'List manipulation functions'
docgen debug 'Debugging functions'
docgen options 'NixOS / nixpkgs option handling'
'';
}

View File

@@ -1,85 +0,0 @@
{ pkgs ? (import ./.. { }), nixpkgs ? { }}:
let
revision = pkgs.lib.trivial.revisionWithDefault (nixpkgs.revision or "master");
libDefPos = set:
builtins.map
(name: {
name = name;
location = builtins.unsafeGetAttrPos name set;
})
(builtins.attrNames set);
libset = toplib:
builtins.map
(subsetname: {
subsetname = subsetname;
functions = libDefPos toplib."${subsetname}";
})
(builtins.filter
(name: builtins.isAttrs toplib."${name}")
(builtins.attrNames toplib));
nixpkgsLib = pkgs.lib;
flattenedLibSubset = { subsetname, functions }:
builtins.map
(fn: {
name = "lib.${subsetname}.${fn.name}";
value = fn.location;
})
functions;
locatedlibsets = libs: builtins.map flattenedLibSubset (libset libs);
removeFilenamePrefix = prefix: filename:
let
prefixLen = (builtins.stringLength prefix) + 1; # +1 to remove the leading /
filenameLen = builtins.stringLength filename;
substr = builtins.substring prefixLen filenameLen filename;
in substr;
removeNixpkgs = removeFilenamePrefix (builtins.toString pkgs.path);
liblocations =
builtins.filter
(elem: elem.value != null)
(nixpkgsLib.lists.flatten
(locatedlibsets nixpkgsLib));
fnLocationRelative = { name, value }:
{
inherit name;
value = value // { file = removeNixpkgs value.file; };
};
relativeLocs = (builtins.map fnLocationRelative liblocations);
sanitizeId = builtins.replaceStrings
[ "'" ]
[ "-prime" ];
urlPrefix = "https://github.com/NixOS/nixpkgs/blob/${revision}";
xmlstrings = (nixpkgsLib.strings.concatMapStrings
({ name, value }:
''
<section><title>${name}</title>
<para xml:id="${sanitizeId name}">
Located at
<link
xlink:href="${urlPrefix}/${value.file}#L${builtins.toString value.line}">${value.file}:${builtins.toString value.line}</link>
in <literal>&lt;nixpkgs&gt;</literal>.
</para>
</section>
'')
relativeLocs);
in pkgs.writeText
"locations.xml"
''
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5">
<title>All the locations for every lib function</title>
<para>This file is only for inclusion by other files.</para>
${xmlstrings}
</section>
''

View File

@@ -1,24 +1,28 @@
<book xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude">
<info>
<title>Nixpkgs Contributors Guide</title>
<subtitle>Version <xi:include href=".version" parse="text" />
</subtitle>
</info>
<xi:include href="introduction.chapter.xml" />
<xi:include href="quick-start.xml" />
<xi:include href="stdenv.xml" />
<xi:include href="multiple-output.xml" />
<xi:include href="cross-compilation.xml" />
<xi:include href="configuration.xml" />
<xi:include href="functions.xml" />
<xi:include href="meta.xml" />
<xi:include href="languages-frameworks/index.xml" />
<xi:include href="platform-notes.xml" />
<xi:include href="package-notes.xml" />
<xi:include href="overlays.xml" />
<xi:include href="coding-conventions.xml" />
<xi:include href="submitting-changes.xml" />
<xi:include href="reviewing-contributions.xml" />
<xi:include href="contributing.xml" />
<info>
<title>Nixpkgs Contributors Guide</title>
<subtitle>Version <xi:include href=".version" parse="text" /></subtitle>
</info>
<xi:include href="introduction.xml" />
<xi:include href="quick-start.xml" />
<xi:include href="stdenv.xml" />
<xi:include href="multiple-output.xml" />
<xi:include href="cross-compilation.xml" />
<xi:include href="configuration.xml" />
<xi:include href="functions.xml" />
<xi:include href="meta.xml" />
<xi:include href="languages-frameworks/index.xml" />
<xi:include href="package-notes.xml" />
<xi:include href="overlays.xml" />
<xi:include href="coding-conventions.xml" />
<xi:include href="submitting-changes.xml" />
<xi:include href="reviewing-contributions.xml" />
<xi:include href="contributing.xml" />
</book>

View File

@@ -1,41 +1,44 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-meta">
<title>Meta-attributes</title>
<para>
Nix packages can declare <emphasis>meta-attributes</emphasis> that contain
information about a package such as a description, its homepage, its license,
and so on. For instance, the GNU Hello package has a <varname>meta</varname>
declaration like this:
<title>Meta-attributes</title>
<para>Nix packages can declare <emphasis>meta-attributes</emphasis>
that contain information about a package such as a description, its
homepage, its license, and so on. For instance, the GNU Hello package
has a <varname>meta</varname> declaration like this:
<programlisting>
meta = with stdenv.lib; {
meta = {
description = "A program that produces a familiar, friendly greeting";
longDescription = ''
GNU Hello is a program that prints "Hello, world!" when you run it.
It is fully customizable.
'';
homepage = https://www.gnu.org/software/hello/manual/;
license = licenses.gpl3Plus;
maintainers = [ maintainers.eelco ];
platforms = platforms.all;
homepage = http://www.gnu.org/software/hello/manual/;
license = stdenv.lib.licenses.gpl3Plus;
maintainers = [ stdenv.lib.maintainers.eelco ];
platforms = stdenv.lib.platforms.all;
};
</programlisting>
</para>
<para>
Meta-attributes are not passed to the builder of the package. Thus, a change
to a meta-attribute doesnt trigger a recompilation of the package. The
value of a meta-attribute must be a string.
</para>
<para>
The meta-attributes of a package can be queried from the command-line using
<command>nix-env</command>:
</para>
<para>Meta-attributes are not passed to the builder of the package.
Thus, a change to a meta-attribute doesnt trigger a recompilation of
the package. The value of a meta-attribute must be a string.</para>
<para>The meta-attributes of a package can be queried from the
command-line using <command>nix-env</command>:
<screen>
$ nix-env -qa hello --json
{
"hello": {
"meta": {
"description": "A program that produces a familiar, friendly greeting",
"homepage": "https://www.gnu.org/software/hello/manual/",
"homepage": "http://www.gnu.org/software/hello/manual/",
"license": {
"fullName": "GNU General Public License version 3 or later",
"shortName": "GPLv3+",
@@ -50,7 +53,7 @@ $ nix-env -qa hello --json
"x86_64-linux",
"armv5tel-linux",
"armv7l-linux",
"mips32-linux",
"mips64el-linux",
"x86_64-darwin",
"i686-cygwin",
"i686-freebsd",
@@ -67,365 +70,254 @@ $ nix-env -qa hello --json
</screen>
<command>nix-env</command> knows about the <varname>description</varname>
field specifically:
<command>nix-env</command> knows about the
<varname>description</varname> field specifically:
<screen>
$ nix-env -qa hello --description
hello-2.3 A program that produces a familiar, friendly greeting
</screen>
</para>
<section xml:id="sec-standard-meta-attributes">
<title>Standard meta-attributes</title>
<para>
It is expected that each meta-attribute is one of the following:
</para>
</para>
<section xml:id="sec-standard-meta-attributes"><title>Standard
meta-attributes</title>
<para>It is expected that each meta-attribute is one of the following:</para>
<variablelist>
<varlistentry>
<term><varname>description</varname></term>
<listitem><para>A short (one-line) description of the package.
This is shown by <command>nix-env -q --description</command> and
also on the Nixpkgs release pages.</para>
<para>Dont include a period at the end. Dont include newline
characters. Capitalise the first character. For brevity, dont
repeat the name of package — just describe what it does.</para>
<para>Wrong: <literal>"libpng is a library that allows you to decode PNG images."</literal></para>
<para>Right: <literal>"A library for decoding PNG images"</literal></para>
<variablelist>
<varlistentry>
<term>
<varname>description</varname>
</term>
<listitem>
<para>
A short (one-line) description of the package. This is shown by
<command>nix-env -q --description</command> and also on the Nixpkgs
release pages.
</para>
<para>
Dont include a period at the end. Dont include newline characters.
Capitalise the first character. For brevity, dont repeat the name of
package — just describe what it does.
</para>
<para>
Wrong: <literal>"libpng is a library that allows you to decode PNG
images."</literal>
</para>
<para>
Right: <literal>"A library for decoding PNG images"</literal>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>longDescription</varname>
</term>
</varlistentry>
<varlistentry>
<term><varname>longDescription</varname></term>
<listitem><para>An arbitrarily long description of the
package.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>branch</varname></term>
<listitem><para>Release branch. Used to specify that a package is not
going to receive updates that are not in this branch; for example, Linux
kernel 3.0 is supposed to be updated to 3.0.X, not 3.1.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>homepage</varname></term>
<listitem><para>The packages homepage. Example:
<literal>http://www.gnu.org/software/hello/manual/</literal></para></listitem>
</varlistentry>
<varlistentry>
<term><varname>downloadPage</varname></term>
<listitem><para>The page where a link to the current version can be found. Example:
<literal>http://ftp.gnu.org/gnu/hello/</literal></para></listitem>
</varlistentry>
<varlistentry>
<term><varname>license</varname></term>
<listitem>
<para>
An arbitrarily long description of the package.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>branch</varname>
</term>
<listitem>
<para>
Release branch. Used to specify that a package is not going to receive
updates that are not in this branch; for example, Linux kernel 3.0 is
supposed to be updated to 3.0.X, not 3.1.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>homepage</varname>
</term>
<listitem>
<para>
The packages homepage. Example:
<literal>https://www.gnu.org/software/hello/manual/</literal>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>downloadPage</varname>
</term>
<listitem>
<para>
The page where a link to the current version can be found. Example:
<literal>https://ftp.gnu.org/gnu/hello/</literal>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>license</varname>
</term>
<listitem>
<para>
The license, or licenses, for the package. One from the attribute set
defined in
<link
<para>
The license, or licenses, for the package. One from the attribute set
defined in <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/lib/licenses.nix">
<filename>nixpkgs/lib/licenses.nix</filename></link>. At this moment
using both a list of licenses and a single license is valid. If the
license field is in the form of a list representation, then it means that
parts of the package are licensed differently. Each license should
preferably be referenced by their attribute. The non-list attribute value
can also be a space delimited string representation of the contained
attribute shortNames or spdxIds. The following are all valid examples:
<itemizedlist>
<listitem>
<para>
Single license referenced by attribute (preferred)
<literal>stdenv.lib.licenses.gpl3</literal>.
</para>
</listitem>
<listitem>
<para>
Single license referenced by its attribute shortName (frowned upon)
<literal>"gpl3"</literal>.
</para>
</listitem>
<listitem>
<para>
Single license referenced by its attribute spdxId (frowned upon)
<literal>"GPL-3.0"</literal>.
</para>
</listitem>
<listitem>
<para>
Multiple licenses referenced by attribute (preferred) <literal>with
stdenv.lib.licenses; [ asl20 free ofl ]</literal>.
</para>
</listitem>
<listitem>
<para>
Multiple licenses referenced as a space delimited string of attribute
shortNames (frowned upon) <literal>"asl20 free ofl"</literal>.
</para>
</listitem>
</itemizedlist>
For details, see <xref linkend='sec-meta-license'/>.
</para>
<filename>nixpkgs/lib/licenses.nix</filename></link>. At this moment
using both a list of licenses and a single license is valid. If the
license field is in the form of a list representation, then it means
that parts of the package are licensed differently. Each license
should preferably be referenced by their attribute. The non-list
attribute value can also be a space delimited string representation of
the contained attribute shortNames or spdxIds. The following are all valid
examples:
<itemizedlist>
<listitem><para>Single license referenced by attribute (preferred)
<literal>stdenv.lib.licenses.gpl3</literal>.
</para></listitem>
<listitem><para>Single license referenced by its attribute shortName (frowned upon)
<literal>"gpl3"</literal>.
</para></listitem>
<listitem><para>Single license referenced by its attribute spdxId (frowned upon)
<literal>"GPL-3.0"</literal>.
</para></listitem>
<listitem><para>Multiple licenses referenced by attribute (preferred)
<literal>with stdenv.lib.licenses; [ asl20 free ofl ]</literal>.
</para></listitem>
<listitem><para>Multiple licenses referenced as a space delimited string of attribute shortNames (frowned upon)
<literal>"asl20 free ofl"</literal>.
</para></listitem>
</itemizedlist>
For details, see <xref linkend='sec-meta-license'/>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>maintainers</varname>
</term>
<listitem>
<para>
A list of names and e-mail addresses of the maintainers of this Nix
expression. If you would like to be a maintainer of a package, you may
want to add yourself to
<link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/maintainers/maintainer-list.nix"><filename>nixpkgs/maintainers/maintainer-list.nix</filename></link>
and write something like <literal>[ stdenv.lib.maintainers.alice
stdenv.lib.maintainers.bob ]</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>priority</varname>
</term>
<listitem>
<para>
The <emphasis>priority</emphasis> of the package, used by
<command>nix-env</command> to resolve file name conflicts between
packages. See the Nix manual page for <command>nix-env</command> for
details. Example: <literal>"10"</literal> (a low-priority package).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>platforms</varname>
</term>
<listitem>
<para>
The list of Nix platform types on which the package is supported. Hydra
builds packages according to the platform specified. If no platform is
specified, the package does not have prebuilt binaries. An example is:
</varlistentry>
<varlistentry>
<term><varname>maintainers</varname></term>
<listitem><para>A list of names and e-mail addresses of the
maintainers of this Nix expression. If
you would like to be a maintainer of a package, you may want to add
yourself to <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/lib/maintainers.nix"><filename>nixpkgs/lib/maintainers.nix</filename></link>
and write something like <literal>[ stdenv.lib.maintainers.alice
stdenv.lib.maintainers.bob ]</literal>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>priority</varname></term>
<listitem><para>The <emphasis>priority</emphasis> of the package,
used by <command>nix-env</command> to resolve file name conflicts
between packages. See the Nix manual page for
<command>nix-env</command> for details. Example:
<literal>"10"</literal> (a low-priority
package).</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>platforms</varname></term>
<listitem><para>The list of Nix platform types on which the
package is supported. Hydra builds packages according to the
platform specified. If no platform is specified, the package does
not have prebuilt binaries. An example is:
<programlisting>
meta.platforms = stdenv.lib.platforms.linux;
</programlisting>
Attribute Set <varname>stdenv.lib.platforms</varname> defines
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/lib/systems/doubles.nix">
various common lists</link> of platforms types.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>tests</varname>
</term>
<listitem>
<warning>
<para>
This attribute is special in that it is not actually under the
<literal>meta</literal> attribute set but rather under the
<literal>passthru</literal> attribute set. This is due to a current
limitation of Nix, and will change as soon as Nixpkgs will be able to
depend on a new enough version of Nix. See
<link xlink:href="https://github.com/NixOS/nix/issues/2532">the relevant
issue</link> for more details.
</para>
</warning>
<para>
An attribute set with as values tests. A test is a derivation, which
builds successfully when the test passes, and fails to build otherwise. A
derivation that is a test needs to have <literal>meta.timeout</literal>
defined.
</para>
<para>
The NixOS tests are available as <literal>nixosTests</literal> in
parameters of derivations. For instance, the OpenSMTPD derivation
includes lines similar to:
<programlisting>
{ /* ... */, nixosTests }:
{
# ...
passthru.tests = {
basic-functionality-and-dovecot-integration = nixosTests.opensmtpd;
};
}
</programlisting>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>timeout</varname>
</term>
<listitem>
<para>
A timeout (in seconds) for building the derivation. If the derivation
takes longer than this time to build, it can fail due to breaking the
timeout. However, all computers do not have the same computing power,
hence some builders may decide to apply a multiplicative factor to this
value. When filling this value in, try to keep it approximately
consistent with other values already present in
<literal>nixpkgs</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>hydraPlatforms</varname>
</term>
<listitem>
<para>
The list of Nix platform types for which the Hydra instance at
<literal>hydra.nixos.org</literal> will build the package. (Hydra is the
Nix-based continuous build system.) It defaults to the value of
<varname>meta.platforms</varname>. Thus, the only reason to set
<varname>meta.hydraPlatforms</varname> is if you want
<literal>hydra.nixos.org</literal> to build the package on a subset of
<varname>meta.platforms</varname>, or not at all, e.g.
Attribute Set <varname>stdenv.lib.platforms</varname> in
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/lib/platforms.nix">
<filename>nixpkgs/lib/platforms.nix</filename></link> defines various common
lists of platforms types.
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>hydraPlatforms</varname></term>
<listitem><para>The list of Nix platform types for which the Hydra
instance at <literal>hydra.nixos.org</literal> will build the
package. (Hydra is the Nix-based continuous build system.) It
defaults to the value of <varname>meta.platforms</varname>. Thus,
the only reason to set <varname>meta.hydraPlatforms</varname> is
if you want <literal>hydra.nixos.org</literal> to build the
package on a subset of <varname>meta.platforms</varname>, or not
at all, e.g.
<programlisting>
meta.platforms = stdenv.lib.platforms.linux;
meta.hydraPlatforms = [];
</programlisting>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>broken</varname>
</term>
<listitem>
<para>
If set to <literal>true</literal>, the package is marked as “broken”,
meaning that it wont show up in <literal>nix-env -qa</literal>, and
cannot be built or installed. Such packages should be removed from
Nixpkgs eventually unless they are fixed.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>updateWalker</varname>
</term>
<listitem>
<para>
If set to <literal>true</literal>, the package is tested to be updated
correctly by the <literal>update-walker.sh</literal> script without
additional settings. Such packages have <varname>meta.version</varname>
set and their homepage (or the page specified by
<varname>meta.downloadPage</varname>) contains a direct link to the
package tarball.
</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section xml:id="sec-meta-license">
<title>Licenses</title>
<para>
The <varname>meta.license</varname> attribute should preferrably contain a
value from <varname>stdenv.lib.licenses</varname> defined in
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/lib/licenses.nix">
<filename>nixpkgs/lib/licenses.nix</filename></link>, or in-place license
description of the same format if the license is unlikely to be useful in
another expression.
</para>
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>broken</varname></term>
<listitem><para>If set to <literal>true</literal>, the package is
marked as “broken”, meaning that it wont show up in
<literal>nix-env -qa</literal>, and cannot be built or installed.
Such packages should be removed from Nixpkgs eventually unless
they are fixed.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>updateWalker</varname></term>
<listitem><para>If set to <literal>true</literal>, the package is
tested to be updated correctly by the <literal>update-walker.sh</literal>
script without additional settings. Such packages have
<varname>meta.version</varname> set and their homepage (or
the page specified by <varname>meta.downloadPage</varname>) contains
a direct link to the package tarball.</para></listitem>
</varlistentry>
</variablelist>
</section>
<section xml:id="sec-meta-license"><title>Licenses</title>
<para>The <varname>meta.license</varname> attribute should preferrably contain
a value from <varname>stdenv.lib.licenses</varname> defined in
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/lib/licenses.nix">
<filename>nixpkgs/lib/licenses.nix</filename></link>,
or in-place license description of the same format if the license is
unlikely to be useful in another expression.</para>
<para>Although it's typically better to indicate the specific license,
a few generic options are available:
<variablelist>
<varlistentry>
<term><varname>stdenv.lib.licenses.free</varname>,
<varname>"free"</varname></term>
<listitem><para>Catch-all for free software licenses not listed
above.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>stdenv.lib.licenses.unfreeRedistributable</varname>,
<varname>"unfree-redistributable"</varname></term>
<listitem><para>Unfree package that can be redistributed in binary
form. That is, its legal to redistribute the
<emphasis>output</emphasis> of the derivation. This means that
the package can be included in the Nixpkgs
channel.</para>
<para>Sometimes proprietary software can only be redistributed
unmodified. Make sure the builder doesnt actually modify the
original binaries; otherwise were breaking the license. For
instance, the NVIDIA X11 drivers can be redistributed unmodified,
but our builder applies <command>patchelf</command> to make them
work. Thus, its license is <varname>"unfree"</varname> and it
cannot be included in the Nixpkgs channel.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>stdenv.lib.licenses.unfree</varname>,
<varname>"unfree"</varname></term>
<listitem><para>Unfree package that cannot be redistributed. You
can build it yourself, but you cannot redistribute the output of
the derivation. Thus it cannot be included in the Nixpkgs
channel.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>stdenv.lib.licenses.unfreeRedistributableFirmware</varname>,
<varname>"unfree-redistributable-firmware"</varname></term>
<listitem><para>This package supplies unfree, redistributable
firmware. This is a separate value from
<varname>unfree-redistributable</varname> because not everybody
cares whether firmware is free.</para></listitem>
</varlistentry>
</variablelist>
</para>
</section>
<para>
Although it's typically better to indicate the specific license, a few
generic options are available:
<variablelist>
<varlistentry>
<term>
<varname>stdenv.lib.licenses.free</varname>, <varname>"free"</varname>
</term>
<listitem>
<para>
Catch-all for free software licenses not listed above.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>stdenv.lib.licenses.unfreeRedistributable</varname>, <varname>"unfree-redistributable"</varname>
</term>
<listitem>
<para>
Unfree package that can be redistributed in binary form. That is, its
legal to redistribute the <emphasis>output</emphasis> of the derivation.
This means that the package can be included in the Nixpkgs channel.
</para>
<para>
Sometimes proprietary software can only be redistributed unmodified.
Make sure the builder doesnt actually modify the original binaries;
otherwise were breaking the license. For instance, the NVIDIA X11
drivers can be redistributed unmodified, but our builder applies
<command>patchelf</command> to make them work. Thus, its license is
<varname>"unfree"</varname> and it cannot be included in the Nixpkgs
channel.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>stdenv.lib.licenses.unfree</varname>, <varname>"unfree"</varname>
</term>
<listitem>
<para>
Unfree package that cannot be redistributed. You can build it yourself,
but you cannot redistribute the output of the derivation. Thus it cannot
be included in the Nixpkgs channel.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>stdenv.lib.licenses.unfreeRedistributableFirmware</varname>, <varname>"unfree-redistributable-firmware"</varname>
</term>
<listitem>
<para>
This package supplies unfree, redistributable firmware. This is a
separate value from <varname>unfree-redistributable</varname> because
not everybody cares whether firmware is free.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</section>
</chapter>

View File

@@ -5,319 +5,99 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-multiple-output">
<title>Multiple-output packages</title>
<section xml:id="sec-multiple-outputs-introduction">
<title>Introduction</title>
<para>
The Nix language allows a derivation to produce multiple outputs, which is
similar to what is utilized by other Linux distribution packaging systems.
The outputs reside in separate Nix store paths, so they can be mostly
handled independently of each other, including passing to build inputs,
garbage collection or binary substitution. The exception is that building
from source always produces all the outputs.
</para>
<title>Multiple-output packages</title>
<para>
The main motivation is to save disk space by reducing runtime closure sizes;
consequently also sizes of substituted binaries get reduced. Splitting can
be used to have more granular runtime dependencies, for example the typical
reduction is to split away development-only files, as those are typically
not needed during runtime. As a result, closure sizes of many packages can
get reduced to a half or even much less.
</para>
<note>
<para>
The reduction effects could be instead achieved by building the parts in
completely separate derivations. That would often additionally reduce
build-time closures, but it tends to be much harder to write such
derivations, as build systems typically assume all parts are being built at
once. This compromise approach of single source package producing multiple
binary packages is also utilized often by rpm and deb.
</para>
</note>
</section>
<section xml:id="sec-multiple-outputs-installing">
<title>Installing a split package</title>
<para>
When installing a package via <varname>systemPackages</varname> or
<command>nix-env</command> you have several options:
</para>
<section><title>Introduction</title>
<para>The Nix language allows a derivation to produce multiple outputs, which is similar to what is utilized by other Linux distribution packaging systems. The outputs reside in separate nix store paths, so they can be mostly handled independently of each other, including passing to build inputs, garbage collection or binary substitution. The exception is that building from source always produces all the outputs.</para>
<para>The main motivation is to save disk space by reducing runtime closure sizes; consequently also sizes of substituted binaries get reduced. Splitting can be used to have more granular runtime dependencies, for example the typical reduction is to split away development-only files, as those are typically not needed during runtime. As a result, closure sizes of many packages can get reduced to a half or even much less.</para>
<note><para>The reduction effects could be instead achieved by building the parts in completely separate derivations. That would often additionally reduce build-time closures, but it tends to be much harder to write such derivations, as build systems typically assume all parts are being built at once. This compromise approach of single source package producing multiple binary packages is also utilized often by rpm and deb.</para></note>
</section>
<section><title>Installing a split package</title>
<para>When installing a package via <varname>systemPackages</varname> or <command>nix-env</command> you have several options:</para>
<itemizedlist>
<listitem>
<para>
You can install particular outputs explicitly, as each is available in the
Nix language as an attribute of the package. The
<varname>outputs</varname> attribute contains a list of output names.
</para>
</listitem>
<listitem>
<para>
You can let it use the default outputs. These are handled by
<varname>meta.outputsToInstall</varname> attribute that contains a list of
output names.
</para>
<para>
TODO: more about tweaking the attribute, etc.
</para>
</listitem>
<listitem>
<para>
NixOS provides configuration option
<varname>environment.extraOutputsToInstall</varname> that allows adding
extra outputs of <varname>environment.systemPackages</varname> atop the
default ones. It's mainly meant for documentation and debug symbols, and
it's also modified by specific options.
</para>
<note>
<para>
At this moment there is no similar configurability for packages installed
by <command>nix-env</command>. You can still use approach from
<xref linkend="sec-modify-via-packageOverrides" /> to override
<varname>meta.outputsToInstall</varname> attributes, but that's a rather
inconvenient way.
</para>
</note>
</listitem>
<listitem><para>You can install particular outputs explicitly, as each is available in the Nix language as an attribute of the package. The <varname>outputs</varname> attribute contains a list of output names.</para></listitem>
<listitem><para>You can let it use the default outputs. These are handled by <varname>meta.outputsToInstall</varname> attribute that contains a list of output names.</para>
<para>TODO: more about tweaking the attribute, etc.</para></listitem>
<listitem><para>NixOS provides configuration option <varname>environment.extraOutputsToInstall</varname> that allows adding extra outputs of <varname>environment.systemPackages</varname> atop the default ones. It's mainly meant for documentation and debug symbols, and it's also modified by specific options.</para>
<note><para>At this moment there is no similar configurability for packages installed by <command>nix-env</command>. You can still use approach from <xref linkend="sec-modify-via-packageOverrides" /> to override <varname>meta.outputsToInstall</varname> attributes, but that's a rather inconvenient way.</para></note>
</listitem>
</itemizedlist>
</section>
<section xml:id="sec-multiple-outputs-using-split-packages">
<title>Using a split package</title>
</section>
<para>
In the Nix language the individual outputs can be reached explicitly as
attributes, e.g. <varname>coreutils.info</varname>, but the typical case is
just using packages as build inputs.
</para>
<section><title>Using a split package</title>
<para>In the Nix language the individual outputs can be reached explicitly as attributes, e.g. <varname>coreutils.info</varname>, but the typical case is just using packages as build inputs.</para>
<para>When a multiple-output derivation gets into a build input of another derivation, the <varname>dev</varname> output is added if it exists, otherwise the first output is added. In addition to that, <varname>propagatedBuildOutputs</varname> of that package which by default contain <varname>$outputBin</varname> and <varname>$outputLib</varname> are also added. (See <xref linkend="multiple-output-file-type-groups" />.)</para>
</section>
<para>
When a multiple-output derivation gets into a build input of another
derivation, the <varname>dev</varname> output is added if it exists,
otherwise the first output is added. In addition to that,
<varname>propagatedBuildOutputs</varname> of that package which by default
contain <varname>$outputBin</varname> and <varname>$outputLib</varname> are
also added. (See <xref linkend="multiple-output-file-type-groups" />.)
</para>
</section>
<section xml:id="sec-multiple-outputs-">
<title>Writing a split derivation</title>
<para>
Here you find how to write a derivation that produces multiple outputs.
</para>
<section><title>Writing a split derivation</title>
<para>Here you find how to write a derivation that produces multiple outputs.</para>
<para>In nixpkgs there is a framework supporting multiple-output derivations. It tries to cover most cases by default behavior. You can find the source separated in &lt;<filename>nixpkgs/pkgs/build-support/setup-hooks/multiple-outputs.sh</filename>&gt;; it's relatively well-readable. The whole machinery is triggered by defining the <varname>outputs</varname> attribute to contain the list of desired output names (strings).</para>
<programlisting>outputs = [ "bin" "dev" "out" "doc" ];</programlisting>
<para>Often such a single line is enough. For each output an equally named environment variable is passed to the builder and contains the path in nix store for that output. By convention, the first output should contain the executable programs provided by the package as that output is used by Nix in string conversions, allowing references to binaries like <literal>${pkgs.perl}/bin/perl</literal> to always work. Typically you also want to have the main <varname>out</varname> output, as it catches any files that didn't get elsewhere.</para>
<para>
In nixpkgs there is a framework supporting multiple-output derivations. It
tries to cover most cases by default behavior. You can find the source
separated in
&lt;<filename>nixpkgs/pkgs/build-support/setup-hooks/multiple-outputs.sh</filename>&gt;;
it's relatively well-readable. The whole machinery is triggered by defining
the <varname>outputs</varname> attribute to contain the list of desired
output names (strings).
</para>
<programlisting>outputs = [ "bin" "dev" "out" "doc" ];</programlisting>
<para>
Often such a single line is enough. For each output an equally named
environment variable is passed to the builder and contains the path in nix
store for that output. Typically you also want to have the main
<varname>out</varname> output, as it catches any files that didn't get
elsewhere.
</para>
<note>
<para>
There is a special handling of the <varname>debug</varname> output,
described at <xref linkend="stdenv-separateDebugInfo" />.
</para>
</note>
<section xml:id="multiple-output-file-binaries-first-convention">
<title><quote>Binaries first</quote></title>
<para>
A commonly adopted convention in <literal>nixpkgs</literal> is that
executables provided by the package are contained within its first output.
This convention allows the dependent packages to reference the executables
provided by packages in a uniform manner. For instance, provided with the
knowledge that the <literal>perl</literal> package contains a
<literal>perl</literal> executable it can be referenced as
<literal>${pkgs.perl}/bin/perl</literal> within a Nix derivation that needs
to execute a Perl script.
</para>
<para>
The <literal>glibc</literal> package is a deliberate single exception to
the <quote>binaries first</quote> convention. The <literal>glibc</literal>
has <literal>libs</literal> as its first output allowing the libraries
provided by <literal>glibc</literal> to be referenced directly (e.g.
<literal>${stdenv.glibc}/lib/ld-linux-x86-64.so.2</literal>). The
executables provided by <literal>glibc</literal> can be accessed via its
<literal>bin</literal> attribute (e.g.
<literal>${stdenv.glibc.bin}/bin/ldd</literal>).
</para>
<para>
The reason for why <literal>glibc</literal> deviates from the convention is
because referencing a library provided by <literal>glibc</literal> is a
very common operation among Nix packages. For instance, third-party
executables packaged by Nix are typically patched and relinked with the
relevant version of <literal>glibc</literal> libraries from Nix packages
(please see the documentation on
<link xlink:href="https://nixos.org/patchelf.html">patchelf</link> for more
details).
</para>
</section>
<note><para>There is a special handling of the <varname>debug</varname> output, described at <xref linkend="stdenv-separateDebugInfo" />.</para></note>
<section xml:id="multiple-output-file-type-groups">
<title>File type groups</title>
<title>File type groups</title>
<para>The support code currently recognizes some particular kinds of outputs and either instructs the build system of the package to put files into their desired outputs or it moves the files during the fixup phase. Each group of file types has an <varname>outputFoo</varname> variable specifying the output name where they should go. If that variable isn't defined by the derivation writer, it is guessed &ndash; a default output name is defined, falling back to other possibilities if the output isn't defined.</para>
<variablelist>
<para>
The support code currently recognizes some particular kinds of outputs and
either instructs the build system of the package to put files into their
desired outputs or it moves the files during the fixup phase. Each group of
file types has an <varname>outputFoo</varname> variable specifying the
output name where they should go. If that variable isn't defined by the
derivation writer, it is guessed &ndash; a default output name is defined,
falling back to other possibilities if the output isn't defined.
</para>
<varlistentry><term><varname>
$outputDev</varname></term><listitem><para>
is for development-only files. These include C(++) headers, pkg-config, cmake and aclocal files. They go to <varname>dev</varname> or <varname>out</varname> by default.
</para></listitem>
</varlistentry>
<variablelist>
<varlistentry>
<term>
<varname> $outputDev</varname>
</term>
<listitem>
<para>
is for development-only files. These include C(++) headers, pkg-config,
cmake and aclocal files. They go to <varname>dev</varname> or
<varname>out</varname> by default.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname> $outputBin</varname>
</term>
<listitem>
<para>
is meant for user-facing binaries, typically residing in bin/. They go
to <varname>bin</varname> or <varname>out</varname> by default.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname> $outputLib</varname>
</term>
<listitem>
<para>
is meant for libraries, typically residing in <filename>lib/</filename>
and <filename>libexec/</filename>. They go to <varname>lib</varname> or
<varname>out</varname> by default.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname> $outputDoc</varname>
</term>
<listitem>
<para>
is for user documentation, typically residing in
<filename>share/doc/</filename>. It goes to <varname>doc</varname> or
<varname>out</varname> by default.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname> $outputDevdoc</varname>
</term>
<listitem>
<para>
is for <emphasis>developer</emphasis> documentation. Currently we count
gtk-doc and devhelp books in there. It goes to <varname>devdoc</varname>
or is removed (!) by default. This is because e.g. gtk-doc tends to be
rather large and completely unused by nixpkgs users.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname> $outputMan</varname>
</term>
<listitem>
<para>
is for man pages (except for section 3). They go to
<varname>man</varname> or <varname>$outputBin</varname> by default.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname> $outputDevman</varname>
</term>
<listitem>
<para>
is for section 3 man pages. They go to <varname>devman</varname> or
<varname>$outputMan</varname> by default.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname> $outputInfo</varname>
</term>
<listitem>
<para>
is for info pages. They go to <varname>info</varname> or
<varname>$outputBin</varname> by default.
</para>
</listitem>
</varlistentry>
</variablelist>
<varlistentry><term><varname>
$outputBin</varname></term><listitem><para>
is meant for user-facing binaries, typically residing in bin/. They go to <varname>bin</varname> or <varname>out</varname> by default.
</para></listitem></varlistentry>
<varlistentry><term><varname>
$outputLib</varname></term><listitem><para>
is meant for libraries, typically residing in <filename>lib/</filename> and <filename>libexec/</filename>. They go to <varname>lib</varname> or <varname>out</varname> by default.
</para></listitem></varlistentry>
<varlistentry><term><varname>
$outputDoc</varname></term><listitem><para>
is for user documentation, typically residing in <filename>share/doc/</filename>. It goes to <varname>doc</varname> or <varname>out</varname> by default.
</para></listitem></varlistentry>
<varlistentry><term><varname>
$outputDevdoc</varname></term><listitem><para>
is for <emphasis>developer</emphasis> documentation. Currently we count gtk-doc in there. It goes to <varname>devdoc</varname> or is removed (!) by default. This is because e.g. gtk-doc tends to be rather large and completely unused by nixpkgs users.
</para></listitem></varlistentry>
<varlistentry><term><varname>
$outputMan</varname></term><listitem><para>
is for man pages (except for section 3). They go to <varname>man</varname> or <varname>$outputBin</varname> by default.
</para></listitem></varlistentry>
<varlistentry><term><varname>
$outputDevman</varname></term><listitem><para>
is for section 3 man pages. They go to <varname>devman</varname> or <varname>$outputMan</varname> by default.
</para></listitem></varlistentry>
<varlistentry><term><varname>
$outputInfo</varname></term><listitem><para>
is for info pages. They go to <varname>info</varname> or <varname>$outputBin</varname> by default.
</para></listitem></varlistentry>
</variablelist>
</section>
<section xml:id="sec-multiple-outputs-caveats">
<title>Common caveats</title>
<itemizedlist>
<listitem>
<para>
Some configure scripts don't like some of the parameters passed by
default by the framework, e.g. <literal>--docdir=/foo/bar</literal>. You
can disable this by setting <literal>setOutputFlags = false;</literal>.
</para>
</listitem>
<listitem>
<para>
The outputs of a single derivation can retain references to each other,
but note that circular references are not allowed. (And each
strongly-connected component would act as a single output anyway.)
</para>
</listitem>
<listitem>
<para>
Most of split packages contain their core functionality in libraries.
These libraries tend to refer to various kind of data that typically gets
into <varname>out</varname>, e.g. locale strings, so there is often no
advantage in separating the libraries into <varname>lib</varname>, as
keeping them in <varname>out</varname> is easier.
</para>
</listitem>
<listitem>
<para>
Some packages have hidden assumptions on install paths, which complicates
splitting.
</para>
</listitem>
</itemizedlist>
<section><title>Common caveats</title>
<itemizedlist>
<listitem><para>Some configure scripts don't like some of the parameters passed by default by the framework, e.g. <literal>--docdir=/foo/bar</literal>. You can disable this by setting <literal>setOutputFlags = false;</literal>.</para></listitem>
<listitem><para>The outputs of a single derivation can retain references to each other, but note that circular references are not allowed. (And each strongly-connected component would act as a single output anyway.)</para></listitem>
<listitem><para>Most of split packages contain their core functionality in libraries. These libraries tend to refer to various kind of data that typically gets into <varname>out</varname>, e.g. locale strings, so there is often no advantage in separating the libraries into <varname>lib</varname>, as keeping them in <varname>out</varname> is easier.</para></listitem>
<listitem><para>Some packages have hidden assumptions on install paths, which complicates splitting.</para></listitem>
</itemizedlist>
</section>
</section>
<!--Writing a split derivation-->
</section><!--Writing a split derivation-->
</chapter>

View File

@@ -64,7 +64,7 @@ stdenv.mkDerivation {
sha256 = "1ian3kwh2vg6hr3ymrv48s04gijs539vzrq62xr76bxbhbwnz2np";
};
inherit noSysDirs;
configureFlags = [ "--target=arm-linux" ];
configureFlags = "--target=arm-linux";
}
---
@@ -78,7 +78,7 @@ Step 2: build kernel headers for the target architecture
---
{stdenv, fetchurl}:
assert stdenv.buildPlatform.system == "i686-linux";
assert stdenv.system == "i686-linux";
stdenv.mkDerivation {
name = "linux-headers-2.6.13.1-arm";

View File

@@ -1,148 +1,95 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-overlays">
<title>Overlays</title>
<para>
This chapter describes how to extend and change Nixpkgs using overlays.
Overlays are used to add layers in the fixed-point used by Nixpkgs to compose
the set of all packages.
</para>
<para>
Nixpkgs can be configured with a list of overlays, which are applied in
order. This means that the order of the overlays can be significant if
multiple layers override the same package.
</para>
<title>Overlays</title>
<para>This chapter describes how to extend and change Nixpkgs packages using
overlays. Overlays are used to add layers in the fix-point used by Nixpkgs
to compose the set of all packages.</para>
<para>Nixpkgs can be configured with a list of overlays, which are
applied in order. This means that the order of the overlays can be significant
if multiple layers override the same package.</para>
<!--============================================================-->
<section xml:id="sec-overlays-install">
<title>Installing overlays</title>
<para>
The list of overlays can be set either explicitly in a Nix expression, or
through <literal>&lt;nixpkgs-overlays></literal> or user configuration
files.
</para>
<section xml:id="sec-overlays-install">
<title>Installing overlays</title>
<section xml:id="sec-overlays-argument">
<title>Set overlays in NixOS or Nix expressions</title>
<para>The list of overlays is determined as follows.</para>
<para>
On a NixOS system the value of the <literal>nixpkgs.overlays</literal>
option, if present, is passed to the system Nixpkgs directly as an
argument. Note that this does not affect the overlays for non-NixOS
operations (e.g. <literal>nix-env</literal>), which are
<link xlink:href="#sec-overlays-lookup">looked</link> up independently.
</para>
<para>If the <varname>overlays</varname> argument is not provided explicitly, we look for overlays in a path. The path
is determined as follows:
<para>
The list of overlays can be passed explicitly when importing nixpkgs, for
example <literal>import &lt;nixpkgs> { overlays = [ overlay1 overlay2 ];
}</literal>.
</para>
<orderedlist>
<para>
Further overlays can be added by calling the <literal>pkgs.extend</literal>
or <literal>pkgs.appendOverlays</literal>, although it is often preferable
to avoid these functions, because they recompute the Nixpkgs fixpoint,
which is somewhat expensive to do.
</para>
</section>
<listitem>
<para>First, if an <varname>overlays</varname> argument to the nixpkgs function itself is given,
then that is used.</para>
<section xml:id="sec-overlays-lookup">
<title>Install overlays via configuration lookup</title>
<para>This can be passed explicitly when importing nipxkgs, for example
<literal>import &lt;nixpkgs> { overlays = [ overlay1 overlay2 ]; }</literal>.</para>
</listitem>
<para>
The list of overlays is determined as follows.
</para>
<listitem>
<para>Otherwise, if the Nix path entry <literal>&lt;nixpkgs-overlays></literal> exists, we look for overlays
at that path, as described below.</para>
<para>
<orderedlist>
<listitem>
<para>
First, if an
<link xlink:href="#sec-overlays-argument"><varname>overlays</varname>
argument</link> to the Nixpkgs function itself is given, then that is
used and no path lookup will be performed.
</para>
</listitem>
<listitem>
<para>
Otherwise, if the Nix path entry
<literal>&lt;nixpkgs-overlays></literal> exists, we look for overlays at
that path, as described below.
</para>
<para>
See the section on <literal>NIX_PATH</literal> in the Nix manual for
more details on how to set a value for
<literal>&lt;nixpkgs-overlays>.</literal>
</para>
</listitem>
<listitem>
<para>
If one of <filename>~/.config/nixpkgs/overlays.nix</filename> and
<filename>~/.config/nixpkgs/overlays/</filename> exists, then we look
for overlays at that path, as described below. It is an error if both
exist.
</para>
</listitem>
</orderedlist>
</para>
<para>See the section on <literal>NIX_PATH</literal> in the Nix manual for more details on how to
set a value for <literal>&lt;nixpkgs-overlays>.</literal></para>
</listitem>
<para>
If we are looking for overlays at a path, then there are two cases:
<listitem>
<para>If one of <filename>~/.config/nixpkgs/overlays.nix</filename> and
<filename>~/.config/nixpkgs/overlays/</filename> exists, then we look for overlays at that path, as
described below. It is an error if both exist.</para>
</listitem>
</orderedlist>
</para>
<para>If we are looking for overlays at a path, then there are two cases:
<itemizedlist>
<listitem>
<para>If the path is a file, then the file is imported as a Nix expression and used as the list of
overlays.</para>
</listitem>
<listitem>
<para>If the path is a directory, then we take the content of the directory, order it
lexicographically, and attempt to interpret each as an overlay by:
<itemizedlist>
<listitem>
<para>
If the path is a file, then the file is imported as a Nix expression and
used as the list of overlays.
</para>
</listitem>
<listitem>
<para>
If the path is a directory, then we take the content of the directory,
order it lexicographically, and attempt to interpret each as an overlay
by:
<itemizedlist>
<listitem>
<para>
Importing the file, if it is a <literal>.nix</literal> file.
</para>
</listitem>
<listitem>
<para>
Importing a top-level <filename>default.nix</filename> file, if it is
a directory.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>Importing the file, if it is a <literal>.nix</literal> file.</para>
</listitem>
<listitem>
<para>Importing a top-level <filename>default.nix</filename> file, if it is a directory.</para>
</listitem>
</itemizedlist>
</para>
</para>
</listitem>
</itemizedlist>
</para>
<para>
Because overlays that are set in NixOS configuration do not affect
non-NixOS operations such as <literal>nix-env</literal>, the
<filename>overlays.nix</filename> option provides a convenient way to use
the same overlays for a NixOS system configuration and user configuration:
the same file can be used as <filename>overlays.nix</filename> and imported
as the value of <literal>nixpkgs.overlays</literal>.
</para>
<para>On a NixOS system the value of the <literal>nixpkgs.overlays</literal> option, if present,
is passed to the system Nixpkgs directly as an argument. Note that this does not affect the overlays for
non-NixOS operations (e.g. <literal>nix-env</literal>), which are looked up independently.</para>
<para>The <filename>overlays.nix</filename> option therefore provides a convenient way to use the same
overlays for a NixOS system configuration and user configuration: the same file can be used
as <filename>overlays.nix</filename> and imported as the value of <literal>nixpkgs.overlays</literal>.</para>
</section>
<!-- TODO: Example of sharing overlays between NixOS configuration
and configuration lookup. Also reference the example
from the sec-overlays-argument paragraph about NixOS.
-->
</section>
</section>
<!--============================================================-->
<section xml:id="sec-overlays-definition">
<title>Defining overlays</title>
<para>
Overlays are Nix functions which accept two arguments, conventionally called
<varname>self</varname> and <varname>super</varname>, and return a set of
packages. For example, the following is a valid overlay.
</para>
<section xml:id="sec-overlays-definition">
<title>Defining overlays</title>
<para>Overlays are Nix functions which accept two arguments,
conventionally called <varname>self</varname> and <varname>super</varname>,
and return a set of packages. For example, the following is a valid overlay.</para>
<programlisting>
self: super:
@@ -157,39 +104,31 @@ self: super:
}
</programlisting>
<para>
The first argument (<varname>self</varname>) corresponds to the final
package set. You should use this set for the dependencies of all packages
specified in your overlay. For example, all the dependencies of
<varname>rr</varname> in the example above come from
<varname>self</varname>, as well as the overridden dependencies used in the
<varname>boost</varname> override.
</para>
<para>The first argument (<varname>self</varname>) corresponds to the final package
set. You should use this set for the dependencies of all packages specified in your
overlay. For example, all the dependencies of <varname>rr</varname> in the example above come
from <varname>self</varname>, as well as the overridden dependencies used in the
<varname>boost</varname> override.</para>
<para>
The second argument (<varname>super</varname>) corresponds to the result of
the evaluation of the previous stages of Nixpkgs. It does not contain any of
the packages added by the current overlay, nor any of the following
overlays. This set should be used either to refer to packages you wish to
override, or to access functions defined in Nixpkgs. For example, the
original recipe of <varname>boost</varname> in the above example, comes from
<varname>super</varname>, as well as the <varname>callPackage</varname>
function.
</para>
<para>The second argument (<varname>super</varname>)
corresponds to the result of the evaluation of the previous stages of
Nixpkgs. It does not contain any of the packages added by the current
overlay, nor any of the following overlays. This set should be used either
to refer to packages you wish to override, or to access functions defined
in Nixpkgs. For example, the original recipe of <varname>boost</varname>
in the above example, comes from <varname>super</varname>, as well as the
<varname>callPackage</varname> function.</para>
<para>
The value returned by this function should be a set similar to
<filename>pkgs/top-level/all-packages.nix</filename>, containing overridden
and/or new packages.
</para>
<para>The value returned by this function should be a set similar to
<filename>pkgs/top-level/all-packages.nix</filename>, containing
overridden and/or new packages.</para>
<para>Overlays are similar to other methods for customizing Nixpkgs, in particular
the <literal>packageOverrides</literal> attribute described in <xref linkend="sec-modify-via-packageOverrides"/>.
Indeed, <literal>packageOverrides</literal> acts as an overlay with only the
<varname>super</varname> argument. It is therefore appropriate for basic use,
but overlays are more powerful and easier to distribute.</para>
</section>
<para>
Overlays are similar to other methods for customizing Nixpkgs, in particular
the <literal>packageOverrides</literal> attribute described in
<xref linkend="sec-modify-via-packageOverrides"/>. Indeed,
<literal>packageOverrides</literal> acts as an overlay with only the
<varname>super</varname> argument. It is therefore appropriate for basic
use, but overlays are more powerful and easier to distribute.
</para>
</section>
</chapter>

View File

@@ -1,9 +0,0 @@
.docbook .xref img[src^=images\/callouts\/],
.screen img,
.programlisting img {
width: 1em;
}
.calloutlist img {
width: 1.5em;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,105 +0,0 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-platform-nodes">
<title>Platform Notes</title>
<section xml:id="sec-darwin">
<title>Darwin (macOS)</title>
<para>
Some common issues when packaging software for Darwin:
</para>
<itemizedlist>
<listitem>
<para>
The Darwin <literal>stdenv</literal> uses clang instead of gcc. When
referring to the compiler <varname>$CC</varname> or <command>cc</command>
will work in both cases. Some builds hardcode gcc/g++ in their build
scripts, that can usually be fixed with using something like
<literal>makeFlags = [ "CC=cc" ];</literal> or by patching the build
scripts.
</para>
<programlisting>
stdenv.mkDerivation {
name = "libfoo-1.2.3";
# ...
buildPhase = ''
$CC -o hello hello.c
'';
}
</programlisting>
</listitem>
<listitem>
<para>
On Darwin, libraries are linked using absolute paths, libraries are
resolved by their <literal>install_name</literal> at link time. Sometimes
packages won't set this correctly causing the library lookups to fail at
runtime. This can be fixed by adding extra linker flags or by running
<command>install_name_tool -id</command> during the
<function>fixupPhase</function>.
</para>
<programlisting>
stdenv.mkDerivation {
name = "libfoo-1.2.3";
# ...
makeFlags = stdenv.lib.optional stdenv.isDarwin "LDFLAGS=-Wl,-install_name,$(out)/lib/libfoo.dylib";
}
</programlisting>
</listitem>
<listitem>
<para>
Even if the libraries are linked using absolute paths and resolved via
their <literal>install_name</literal> correctly, tests can sometimes fail
to run binaries. This happens because the <varname>checkPhase</varname>
runs before the libraries are installed.
</para>
<para>
This can usually be solved by running the tests after the
<varname>installPhase</varname> or alternatively by using
<varname>DYLD_LIBRARY_PATH</varname>. More information about this variable
can be found in the <citerefentry>
<refentrytitle>dyld</refentrytitle>
<manvolnum>1</manvolnum></citerefentry> manpage.
</para>
<programlisting>
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
Reason: image not found
./tests/jqtest: line 5: 75779 Abort trap: 6
</programlisting>
<programlisting>
stdenv.mkDerivation {
name = "libfoo-1.2.3";
# ...
doInstallCheck = true;
installCheckTarget = "check";
}
</programlisting>
</listitem>
<listitem>
<para>
Some packages assume xcode is available and use <command>xcrun</command>
to resolve build tools like <command>clang</command>, etc. This causes
errors like <code>xcode-select: error: no developer tools were found at
'/Applications/Xcode.app'</code> while the build doesn't actually depend
on xcode.
</para>
<programlisting>
stdenv.mkDerivation {
name = "libfoo-1.2.3";
# ...
prePatch = ''
substituteInPlace Makefile \
--replace '/usr/bin/xcrun clang' clang
'';
}
</programlisting>
<para>
The package <literal>xcbuild</literal> can be used to build projects that
really depend on Xcode. However, this replacement is not 100%
compatible with Xcode and can occasionally cause issues.
</para>
</listitem>
</itemizedlist>
</section>
</chapter>

View File

@@ -1,219 +1,223 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-quick-start">
<title>Quick Start to Adding a Package</title>
<para>
To add a package to Nixpkgs:
<orderedlist>
<listitem>
<para>
Checkout the Nixpkgs source tree:
<title>Quick Start to Adding a Package</title>
<para>To add a package to Nixpkgs:
<orderedlist>
<listitem>
<para>Checkout the Nixpkgs source tree:
<screen>
$ git clone https://github.com/NixOS/nixpkgs
$ git clone git://github.com/NixOS/nixpkgs.git
$ cd nixpkgs</screen>
</para>
</listitem>
<listitem>
<para>
Find a good place in the Nixpkgs tree to add the Nix expression for your
package. For instance, a library package typically goes into
<filename>pkgs/development/libraries/<replaceable>pkgname</replaceable></filename>,
while a web browser goes into
<filename>pkgs/applications/networking/browsers/<replaceable>pkgname</replaceable></filename>.
See <xref linkend="sec-organisation" /> for some hints on the tree
organisation. Create a directory for your package, e.g.
</listitem>
<listitem>
<para>Find a good place in the Nixpkgs tree to add the Nix
expression for your package. For instance, a library package
typically goes into
<filename>pkgs/development/libraries/<replaceable>pkgname</replaceable></filename>,
while a web browser goes into
<filename>pkgs/applications/networking/browsers/<replaceable>pkgname</replaceable></filename>.
See <xref linkend="sec-organisation" /> for some hints on the tree
organisation. Create a directory for your package, e.g.
<screen>
$ mkdir pkgs/development/libraries/libfoo</screen>
</para>
</listitem>
<listitem>
<para>
In the package directory, create a Nix expression — a piece of code that
describes how to build the package. In this case, it should be a
<emphasis>function</emphasis> that is called with the package dependencies
as arguments, and returns a build of the package in the Nix store. The
expression should usually be called <filename>default.nix</filename>.
</listitem>
<listitem>
<para>In the package directory, create a Nix expression — a piece
of code that describes how to build the package. In this case, it
should be a <emphasis>function</emphasis> that is called with the
package dependencies as arguments, and returns a build of the
package in the Nix store. The expression should usually be called
<filename>default.nix</filename>.
<screen>
$ emacs pkgs/development/libraries/libfoo/default.nix
$ git add pkgs/development/libraries/libfoo/default.nix</screen>
</para>
<para>
You can have a look at the existing Nix expressions under
<filename>pkgs/</filename> to see how its done. Here are some good
ones:
<itemizedlist>
<listitem>
<para>
GNU Hello:
<link
<para>You can have a look at the existing Nix expressions under
<filename>pkgs/</filename> to see how its done. Here are some
good ones:
<itemizedlist>
<listitem>
<para>GNU Hello: <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/misc/hello/default.nix"><filename>pkgs/applications/misc/hello/default.nix</filename></link>.
Trivial package, which specifies some <varname>meta</varname>
attributes which is good practice.
</para>
</listitem>
<listitem>
<para>
GNU cpio:
<link
Trivial package, which specifies some <varname>meta</varname>
attributes which is good practice.</para>
</listitem>
<listitem>
<para>GNU cpio: <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/tools/archivers/cpio/default.nix"><filename>pkgs/tools/archivers/cpio/default.nix</filename></link>.
Also a simple package. The generic builder in <varname>stdenv</varname>
does everything for you. It has no dependencies beyond
<varname>stdenv</varname>.
</para>
</listitem>
<listitem>
<para>
GNU Multiple Precision arithmetic library (GMP):
<link
Also a simple package. The generic builder in
<varname>stdenv</varname> does everything for you. It has
no dependencies beyond <varname>stdenv</varname>.</para>
</listitem>
<listitem>
<para>GNU Multiple Precision arithmetic library (GMP): <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/gmp/5.1.x.nix"><filename>pkgs/development/libraries/gmp/5.1.x.nix</filename></link>.
Also done by the generic builder, but has a dependency on
<varname>m4</varname>.
</para>
</listitem>
<listitem>
<para>
Pan, a GTK-based newsreader:
<link
Also done by the generic builder, but has a dependency on
<varname>m4</varname>.</para>
</listitem>
<listitem>
<para>Pan, a GTK-based newsreader: <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/newsreaders/pan/default.nix"><filename>pkgs/applications/networking/newsreaders/pan/default.nix</filename></link>.
Has an optional dependency on <varname>gtkspell</varname>, which is
only built if <varname>spellCheck</varname> is <literal>true</literal>.
</para>
</listitem>
<listitem>
<para>
Apache HTTPD:
<link
Has an optional dependency on <varname>gtkspell</varname>,
which is only built if <varname>spellCheck</varname> is
<literal>true</literal>.</para>
</listitem>
<listitem>
<para>Apache HTTPD: <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/http/apache-httpd/2.4.nix"><filename>pkgs/servers/http/apache-httpd/2.4.nix</filename></link>.
A bunch of optional features, variable substitutions in the configure
flags, a post-install hook, and miscellaneous hackery.
</para>
</listitem>
<listitem>
<para>
Thunderbird:
<link
A bunch of optional features, variable substitutions in the
configure flags, a post-install hook, and miscellaneous
hackery.</para>
</listitem>
<listitem>
<para>Thunderbird: <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/mailreaders/thunderbird/default.nix"><filename>pkgs/applications/networking/mailreaders/thunderbird/default.nix</filename></link>.
Lots of dependencies.
</para>
</listitem>
<listitem>
<para>
JDiskReport, a Java utility:
<link
Lots of dependencies.</para>
</listitem>
<listitem>
<para>JDiskReport, a Java utility: <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/tools/misc/jdiskreport/default.nix"><filename>pkgs/tools/misc/jdiskreport/default.nix</filename></link>
(and the
<link
(and the <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/tools/misc/jdiskreport/builder.sh">builder</link>).
Nixpkgs doesnt have a decent <varname>stdenv</varname> for Java yet
so this is pretty ad-hoc.
</para>
</listitem>
<listitem>
<para>
XML::Simple, a Perl module:
<link
Nixpkgs doesnt have a decent <varname>stdenv</varname> for
Java yet so this is pretty ad-hoc.</para>
</listitem>
<listitem>
<para>XML::Simple, a Perl module: <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/perl-packages.nix"><filename>pkgs/top-level/perl-packages.nix</filename></link>
(search for the <varname>XMLSimple</varname> attribute). Most Perl
modules are so simple to build that they are defined directly in
<filename>perl-packages.nix</filename>; no need to make a separate file
for them.
</para>
</listitem>
<listitem>
<para>
Adobe Reader:
<link
(search for the <varname>XMLSimple</varname> attribute).
Most Perl modules are so simple to build that they are
defined directly in <filename>perl-packages.nix</filename>;
no need to make a separate file for them.</para>
</listitem>
<listitem>
<para>Adobe Reader: <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/misc/adobe-reader/default.nix"><filename>pkgs/applications/misc/adobe-reader/default.nix</filename></link>.
Shows how binary-only packages can be supported. In particular the
<link
Shows how binary-only packages can be supported. In
particular the <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/misc/adobe-reader/builder.sh">builder</link>
uses <command>patchelf</command> to set the RUNPATH and ELF interpreter
of the executables so that the right libraries are found at runtime.
</para>
</listitem>
</itemizedlist>
uses <command>patchelf</command> to set the RUNPATH and ELF
interpreter of the executables so that the right libraries
are found at runtime.</para>
</listitem>
</itemizedlist>
</para>
<para>
Some notes:
<itemizedlist>
<listitem>
<para>
All <varname linkend="chap-meta">meta</varname> attributes are
optional, but its still a good idea to provide at least the
<varname>description</varname>, <varname>homepage</varname> and
<varname
linkend="sec-meta-license">license</varname>.
</para>
</listitem>
<listitem>
<para>
You can use <command>nix-prefetch-url</command>
<replaceable>url</replaceable> to get the
SHA-256 hash of source distributions. There are similar commands as
<command>nix-prefetch-git</command> and
<command>nix-prefetch-hg</command> available in
<literal>nix-prefetch-scripts</literal> package.
</para>
</listitem>
<listitem>
<para>
A list of schemes for <literal>mirror://</literal> URLs can be found in
<link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/fetchurl/mirrors.nix"><filename>pkgs/build-support/fetchurl/mirrors.nix</filename></link>.
</para>
</listitem>
</itemizedlist>
<para>Some notes:
<itemizedlist>
<listitem>
<para>All <varname linkend="chap-meta">meta</varname>
attributes are optional, but its still a good idea to
provide at least the <varname>description</varname>,
<varname>homepage</varname> and <varname
linkend="sec-meta-license">license</varname>.</para>
</listitem>
<listitem>
<para>You can use <command>nix-prefetch-url</command> (or similar nix-prefetch-git, etc)
<replaceable>url</replaceable> to get the SHA-256 hash of
source distributions. There are similar commands as <command>nix-prefetch-git</command> and
<command>nix-prefetch-hg</command> available in <literal>nix-prefetch-scripts</literal> package.</para>
</listitem>
<listitem>
<para>A list of schemes for <literal>mirror://</literal>
URLs can be found in <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/fetchurl/mirrors.nix"><filename>pkgs/build-support/fetchurl/mirrors.nix</filename></link>.</para>
</listitem>
</itemizedlist>
</para>
<para>
The exact syntax and semantics of the Nix expression language, including
the built-in function, are described in the Nix manual in the
<link
<para>The exact syntax and semantics of the Nix expression
language, including the built-in function, are described in the
Nix manual in the <link
xlink:href="http://hydra.nixos.org/job/nix/trunk/tarball/latest/download-by-type/doc/manual/#chap-writing-nix-expressions">chapter
on writing Nix expressions</link>.
</para>
</listitem>
<listitem>
<para>
Add a call to the function defined in the previous step to
<link
on writing Nix expressions</link>.</para>
</listitem>
<listitem>
<para>Add a call to the function defined in the previous step to
<link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/all-packages.nix"><filename>pkgs/top-level/all-packages.nix</filename></link>
with some descriptive name for the variable, e.g.
<varname>libfoo</varname>.
<screen>
with some descriptive name for the variable,
e.g. <varname>libfoo</varname>.
<screen>
$ emacs pkgs/top-level/all-packages.nix</screen>
</para>
<para>
The attributes in that file are sorted by category (like “Development /
Libraries”) that more-or-less correspond to the directory structure of
Nixpkgs, and then by attribute name.
</para>
</listitem>
<listitem>
<para>
To test whether the package builds, run the following command from the
root of the nixpkgs source tree:
<screen>
<para>The attributes in that file are sorted by category (like
“Development / Libraries”) that more-or-less correspond to the
directory structure of Nixpkgs, and then by attribute name.</para>
</listitem>
<listitem>
<para>To test whether the package builds, run the following command
from the root of the nixpkgs source tree:
<screen>
$ nix-build -A libfoo</screen>
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
the temporary build directory in case something fails. If the build
succeeds, a symlink <filename>./result</filename> to the package in the
Nix store is created.
</para>
</listitem>
<listitem>
<para>
If you want to install the package into your profile (optional), do
<screen>
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 the temporary build directory in case
something fails. If the build succeeds, a symlink
<filename>./result</filename> to the package in the Nix store is
created.</para>
</listitem>
<listitem>
<para>If you want to install the package into your profile
(optional), do
<screen>
$ nix-env -f . -iA libfoo</screen>
</para>
</listitem>
<listitem>
<para>
Optionally commit the new package and open a pull request, or send a patch
to <literal>https://groups.google.com/forum/#!forum/nix-devel</literal>.
</para>
</listitem>
</orderedlist>
</para>
</listitem>
<listitem>
<para>Optionally commit the new package and open a pull request, or send a patch to
<literal>https://groups.google.com/forum/#!forum/nix-devel</literal>.</para>
</listitem>
</orderedlist>
</para>
</chapter>

File diff suppressed because it is too large Load Diff

View File

@@ -3,211 +3,138 @@
xmlns:xi="http://www.w3.org/2001/XInclude"
version="5.0"
xml:id="sec-reviewing-contributions">
<title>Reviewing contributions</title>
<warning>
<para>
The following section is a draft, and the policy for reviewing is still
being discussed in issues such as
<link
xlink:href="https://github.com/NixOS/nixpkgs/issues/11166">#11166
</link> and
<link
xlink:href="https://github.com/NixOS/nixpkgs/issues/20836">#20836
</link>.
</para>
</warning>
<para>
The Nixpkgs project receives a fairly high number of contributions via GitHub
pull requests. Reviewing and approving these is an important task and a way
to contribute to the project.
</para>
<para>
The high change rate of Nixpkgs makes any pull request that remains open for
too long subject to conflicts that will require extra work from the submitter
or the merger. Reviewing pull requests in a timely manner and being responsive
to the comments is the key to avoid this issue. GitHub provides sort filters
that can be used to see the <link
xlink:href="https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc">most
recently</link> and the <link
xlink:href="https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-asc">least
recently</link> updated pull requests. We highly encourage looking at
<link xlink:href="https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+is%3Aopen+review%3Anone+status%3Asuccess+-label%3A%222.status%3A+work-in-progress%22+no%3Aproject+no%3Aassignee+no%3Amilestone">
this list of ready to merge, unreviewed pull requests</link>.
</para>
<para>
When reviewing a pull request, please always be nice and polite.
Controversial changes can lead to controversial opinions, but it is important
to respect every community member and their work.
</para>
<para>
GitHub provides reactions as a simple and quick way to provide feedback to
pull requests or any comments. The thumb-down reaction should be used with
care and if possible accompanied with some explanation so the submitter has
directions to improve their contribution.
</para>
<para>
pull request reviews should include a list of what has been reviewed in a
comment, so other reviewers and mergers can know the state of the review.
</para>
<para>
All the review template samples provided in this section are generic and
meant as examples. Their usage is optional and the reviewer is free to adapt
them to their liking.
</para>
<section xml:id="reviewing-contributions-package-updates">
<title>Package updates</title>
<para>
A package update is the most trivial and common type of pull request. These
pull requests mainly consist of updating the version part of the package
name and the source hash.
</para>
<title>Reviewing contributions</title>
<para>
It can happen that non-trivial updates include patches or more complex
changes.
</para>
<warning>
<para>The following section is a draft and reviewing policy is still being
discussed.</para>
</warning>
<para>
Reviewing process:
</para>
<para>The nixpkgs projects receives a fairly high number of contributions via
GitHub pull-requests. Reviewing and approving these is an important task and a
way to contribute to the project.</para>
<itemizedlist>
<listitem>
<para>
Add labels to the pull request. (Requires commit rights)
</para>
<para>The high change rate of nixpkgs make any pull request that is open for
long enough subject to conflicts that will require extra work from the
submitter or the merger. Reviewing pull requests in a timely manner and being
responsive to the comments is the key to avoid these. GitHub provides sort
filters that can be used to see the <link
xlink:href="https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc">most
recently</link> and the <link
xlink:href="https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-asc">least
recently</link> updated pull-requests.</para>
<para>When reviewing a pull request, please always be nice and polite.
Controversial changes can lead to controversial opinions, but it is important
to respect every community members and their work.</para>
<para>GitHub provides reactions, they are a simple and quick way to provide
feedback to pull-requests or any comments. The thumb-down reaction should be
used with care and if possible accompanied with some explanations so the
submitter has directions to improve his contribution.</para>
<para>Pull-requests reviews should include a list of what has been reviewed in a
comment, so other reviewers and mergers can know the state of the
review.</para>
<para>All the review template samples provided in this section are generic and
meant as examples. Their usage is optional and the reviewer is free to adapt
them to his liking.</para>
<section><title>Package updates</title>
<para>A package update is the most trivial and common type of pull-request.
These pull-requests mainly consist in updating the version part of the package
name and the source hash.</para>
<para>It can happen that non trivial updates include patches or more complex
changes.</para>
<para>Reviewing process:</para>
<itemizedlist>
<listitem><para>Add labels to the pull-request. (Requires commit
rights)</para>
<itemizedlist>
<listitem>
<para>
<literal>8.has: package (update)</literal> and any topic label that fit
the updated package.
</para>
</listitem>
<listitem><para><literal>8.has: package (update)</literal> and any topic
label that fit the updated package.</para></listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that the package versioning fits the guidelines.
</para>
</listitem>
<listitem>
<para>
Ensure that the commit text fits the guidelines.
</para>
</listitem>
<listitem>
<para>
Ensure that the package maintainers are notified.
</para>
</listitem>
<listitem><para>Ensure that the package versioning is fitting the
guidelines.</para></listitem>
<listitem><para>Ensure that the commit text is fitting the
guidelines.</para></listitem>
<listitem><para>Ensure that the package maintainers are notified.</para>
<itemizedlist>
<listitem>
<para>
<link xlink:href="https://help.github.com/articles/about-codeowners/">CODEOWNERS</link>
will make GitHub notify users based on the submitted changes, but it can
happen that it misses some of the package maintainers.
</para>
</listitem>
<listitem><para>mention-bot usually notify GitHub users based on the
submitted changes, but it can happen that it misses some of the
package maintainers.</para></listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that the meta field information is correct.
</para>
</listitem>
<listitem><para>Ensure that the meta field contains correct
information.</para>
<itemizedlist>
<listitem>
<para>
License can change with version updates, so it should be checked to
match the upstream license.
</para>
</listitem>
<listitem>
<para>
If the package has no maintainer, a maintainer must be set. This can be
the update submitter or a community member that accepts to take
maintainership of the package.
</para>
</listitem>
<listitem><para>License can change with version updates, so it should be
checked to be fitting upstream license.</para></listitem>
<listitem><para>If the package has no maintainer, a maintainer must be
set. This can be the update submitter or a community member that
accepts to take maintainership of the package.</para></listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that the code contains no typos.
</para>
</listitem>
<listitem>
<para>
Building the package locally.
</para>
</listitem>
<listitem><para>Ensure that the code contains no typos.</para></listitem>
<listitem><para>Building the package locally.</para>
<itemizedlist>
<listitem>
<para>
pull requests are often targeted to the master or staging branch, and
building the pull request locally when it is submitted can trigger many
source builds.
</para>
<para>
It is possible to rebase the changes on nixos-unstable or
nixpkgs-unstable for easier review by running the following commands
from a nixpkgs clone.
<listitem><para>Pull-requests are often targeted to the master or staging
branch so building the pull-request locally as it is submitted can
trigger a large amount of source builds.</para>
<para>It is possible to rebase the changes on nixos-unstable or
nixpkgs-unstable for easier review by running the following commands
from a nixpkgs clone.
<screen>
$ git remote add channels https://github.com/NixOS/nixpkgs-channels.git <co
$ git remote add channels https://github.com/NixOS/nixpkgs-channels.git <co
xml:id='reviewing-rebase-1' />
$ git fetch channels nixos-unstable <co xml:id='reviewing-rebase-2' />
$ git fetch origin pull/PRNUMBER/head <co xml:id='reviewing-rebase-3' />
$ git rebase --onto nixos-unstable BASEBRANCH FETCH_HEAD <co
$ git rebase --onto nixos-unstable BASEBRANCH FETCH_HEAD <co
xml:id='reviewing-rebase-4' />
</screen>
<calloutlist>
<callout arearefs='reviewing-rebase-1'>
<para>
This should be done only once to be able to fetch channel branches
from the nixpkgs-channels repository.
</para>
</callout>
<callout arearefs='reviewing-rebase-2'>
<para>
Fetching the nixos-unstable branch.
</para>
</callout>
<callout arearefs='reviewing-rebase-3'>
<para>
Fetching the pull request changes, <varname>PRNUMBER</varname> is the
number at the end of the pull request title and
<varname>BASEBRANCH</varname> the base branch of the pull request.
</para>
</callout>
<callout arearefs='reviewing-rebase-4'>
<para>
Rebasing the pull request changes to the nixos-unstable branch.
</para>
</callout>
</calloutlist>
</para>
</listitem>
<listitem>
<para>
The <link xlink:href="https://github.com/madjar/nox">nox</link> tool can
be used to review a pull request content in a single command. It doesn't
rebase on a channel branch so it might trigger multiple source builds.
<varname>PRNUMBER</varname> should be replaced by the number at the end
of the pull request title.
</para>
<calloutlist>
<callout arearefs='reviewing-rebase-1'>
<para>This should be done only once to be able to fetch channel
branches from the nixpkgs-channels repository.</para>
</callout>
<callout arearefs='reviewing-rebase-2'>
<para>Fetching the nixos-unstable branch.</para>
</callout>
<callout arearefs='reviewing-rebase-3'>
<para>Fetching the pull-request changes, <varname>PRNUMBER</varname>
is the number at the end of the pull-request title and
<varname>BASEBRANCH</varname> the base branch of the
pull-request.</para>
</callout>
<callout arearefs='reviewing-rebase-3'>
<para>Rebasing the pull-request changes to the nixos-unstable
branch.</para>
</callout>
</calloutlist>
</para>
</listitem>
<listitem>
<para>The <link xlink:href="https://github.com/madjar/nox">nox</link>
tool can be used to review a pull-request content in a single command.
It doesn't rebase on a channel branch so it might trigger multiple
source builds. <varname>PRNUMBER</varname> should be replaced by the
number at the end of the pull-request title.</para>
<screen>
$ nix-shell -p nox --run "nox-review -k pr PRNUMBER"
</screen>
</listitem>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Running every binary.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem><para>Running every binary.</para></listitem>
</itemizedlist>
<example xml:id="reviewing-contributions-sample-package-update">
<title>Sample template for a package update review</title>
<example><title>Sample template for a package update review</title>
<screen>
##### Reviewed points
@@ -221,105 +148,55 @@ $ nix-shell -p nox --run "nox-review -k pr PRNUMBER"
##### Comments
</screen>
</example>
</section>
<section xml:id="reviewing-contributions-new-packages">
<title>New packages</title>
</screen></example>
</section>
<para>
New packages are a common type of pull requests. These pull requests
consists in adding a new nix-expression for a package.
</para>
<section><title>New packages</title>
<para>
Reviewing process:
</para>
<para>New packages are a common type of pull-requests. These pull requests
consists in adding a new nix-expression for a package.</para>
<itemizedlist>
<listitem>
<para>
Add labels to the pull request. (Requires commit rights)
</para>
<para>Reviewing process:</para>
<itemizedlist>
<listitem><para>Add labels to the pull-request. (Requires commit
rights)</para>
<itemizedlist>
<listitem>
<para>
<literal>8.has: package (new)</literal> and any topic label that fit the
new package.
</para>
</listitem>
<listitem><para><literal>8.has: package (new)</literal> and any topic
label that fit the new package.</para></listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that the package versioning is fitting the guidelines.
</para>
</listitem>
<listitem>
<para>
Ensure that the commit name is fitting the guidelines.
</para>
</listitem>
<listitem>
<para>
Ensure that the meta field contains correct information.
</para>
</listitem>
<listitem><para>Ensure that the package versioning is fitting the
guidelines.</para></listitem>
<listitem><para>Ensure that the commit name is fitting the
guidelines.</para></listitem>
<listitem><para>Ensure that the meta field contains correct
information.</para>
<itemizedlist>
<listitem>
<para>
License must be checked to be fitting upstream license.
</para>
</listitem>
<listitem>
<para>
Platforms should be set or the package will not get binary substitutes.
</para>
</listitem>
<listitem>
<para>
A maintainer must be set. This can be the package submitter or a
community member that accepts to take maintainership of the package.
</para>
</listitem>
<listitem><para>License must be checked to be fitting upstream
license.</para></listitem>
<listitem><para>Platforms should be set or the package will not get binary
substitutes.</para></listitem>
<listitem><para>A maintainer must be set, this can be the package
submitter or a community member that accepts to take maintainership of
the package.</para></listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that the code contains no typos.
</para>
</listitem>
<listitem>
<para>
Ensure the package source.
</para>
</listitem>
<listitem><para>Ensure that the code contains no typos.</para></listitem>
<listitem><para>Ensure the package source.</para>
<itemizedlist>
<listitem>
<para>
Mirrors urls should be used when available.
</para>
</listitem>
<listitem>
<para>
The most appropriate function should be used (e.g. packages from GitHub
should use <literal>fetchFromGitHub</literal>).
</para>
</listitem>
<listitem><para>Mirrors urls should be used when
available.</para></listitem>
<listitem><para>The most appropriate function should be used (e.g.
packages from GitHub should use
<literal>fetchFromGitHub</literal>).</para></listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Building the package locally.
</para>
</listitem>
<listitem>
<para>
Running every binary.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem><para>Building the package locally.</para></listitem>
<listitem><para>Running every binary.</para></listitem>
</itemizedlist>
<example xml:id="reviewing-contributions-sample-new-package">
<title>Sample template for a new package review</title>
<example><title>Sample template for a new package review</title>
<screen>
##### Reviewed points
@@ -341,108 +218,58 @@ $ nix-shell -p nox --run "nox-review -k pr PRNUMBER"
##### Comments
</screen>
</example>
</section>
<section xml:id="reviewing-contributions-module-updates">
<title>Module updates</title>
</screen></example>
</section>
<para>
Module updates are submissions changing modules in some ways. These often
contains changes to the options or introduce new options.
</para>
<section><title>Module updates</title>
<para>
Reviewing process
</para>
<para>Module updates are submissions changing modules in some ways. These often
contains changes to the options or introduce new options.</para>
<itemizedlist>
<listitem>
<para>
Add labels to the pull request. (Requires commit rights)
</para>
<itemizedlist>
<listitem>
<para>
<literal>8.has: module (update)</literal> and any topic label that fit
the module.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that the module maintainers are notified.
</para>
<itemizedlist>
<listitem>
<para>
<link xlink:href="https://help.github.com/articles/about-codeowners/">CODEOWNERS</link>
will make GitHub notify users based on the submitted changes, but it can
happen that it misses some of the package maintainers.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that the module tests, if any, are succeeding.
</para>
</listitem>
<listitem>
<para>
Ensure that the introduced options are correct.
</para>
<itemizedlist>
<listitem>
<para>
Type should be appropriate (string related types differs in their
merging capabilities, <literal>optionSet</literal> and
<literal>string</literal> types are deprecated).
</para>
</listitem>
<listitem>
<para>
Description, default and example should be provided.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that option changes are backward compatible.
</para>
<itemizedlist>
<listitem>
<para>
<literal>mkRenamedOptionModule</literal> and
<literal>mkAliasOptionModule</literal> functions provide way to make
option changes backward compatible.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that removed options are declared with
<literal>mkRemovedOptionModule</literal>
</para>
</listitem>
<listitem>
<para>
Ensure that changes that are not backward compatible are mentioned in
release notes.
</para>
</listitem>
<listitem>
<para>
Ensure that documentations affected by the change is updated.
</para>
</listitem>
</itemizedlist>
<para>Reviewing process</para>
<example xml:id="reviewing-contributions-sample-module-update">
<title>Sample template for a module update review</title>
<itemizedlist>
<listitem><para>Add labels to the pull-request. (Requires commit
rights)</para>
<itemizedlist>
<listitem><para><literal>8.has: module (update)</literal> and any topic
label that fit the module.</para></listitem>
</itemizedlist>
</listitem>
<listitem><para>Ensure that the module maintainers are notified.</para>
<itemizedlist>
<listitem><para>Mention-bot notify GitHub users based on the submitted
changes, but it can happen that it miss some of the package
maintainers.</para></listitem>
</itemizedlist>
</listitem>
<listitem><para>Ensure that the module tests, if any, are
succeeding.</para></listitem>
<listitem><para>Ensure that the introduced options are correct.</para>
<itemizedlist>
<listitem><para>Type should be appropriate (string related types differs
in their merging capabilities, <literal>optionSet</literal> and
<literal>string</literal> types are deprecated).</para></listitem>
<listitem><para>Description, default and example should be
provided.</para></listitem>
</itemizedlist>
</listitem>
<listitem><para>Ensure that option changes are backward compatible.</para>
<itemizedlist>
<listitem><para><literal>mkRenamedOptionModule</literal> and
<literal>mkAliasOptionModule</literal> functions provide way to make
option changes backward compatible.</para></listitem>
</itemizedlist>
</listitem>
<listitem><para>Ensure that removed options are declared with
<literal>mkRemovedOptionModule</literal></para></listitem>
<listitem><para>Ensure that changes that are not backward compatible are
mentioned in release notes.</para></listitem>
<listitem><para>Ensure that documentations affected by the change is
updated.</para></listitem>
</itemizedlist>
<example><title>Sample template for a module update review</title>
<screen>
##### Reviewed points
@@ -459,89 +286,51 @@ $ nix-shell -p nox --run "nox-review -k pr PRNUMBER"
##### Comments
</screen>
</example>
</section>
<section xml:id="reviewing-contributions-new-modules">
<title>New modules</title>
</screen></example>
</section>
<para>
New modules submissions introduce a new module to NixOS.
</para>
<section><title>New modules</title>
<itemizedlist>
<listitem>
<para>
Add labels to the pull request. (Requires commit rights)
</para>
<itemizedlist>
<listitem>
<para>
<literal>8.has: module (new)</literal> and any topic label that fit the
module.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that the module tests, if any, are succeeding.
</para>
</listitem>
<listitem>
<para>
Ensure that the introduced options are correct.
</para>
<itemizedlist>
<listitem>
<para>
Type should be appropriate (string related types differs in their
merging capabilities, <literal>optionSet</literal> and
<literal>string</literal> types are deprecated).
</para>
</listitem>
<listitem>
<para>
Description, default and example should be provided.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that module <literal>meta</literal> field is present
</para>
<itemizedlist>
<listitem>
<para>
Maintainers should be declared in <literal>meta.maintainers</literal>.
</para>
</listitem>
<listitem>
<para>
Module documentation should be declared with
<literal>meta.doc</literal>.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Ensure that the module respect other modules functionality.
</para>
<itemizedlist>
<listitem>
<para>
For example, enabling a module should not open firewall ports by
default.
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
<para>New modules submissions introduce a new module to NixOS.</para>
<example xml:id="reviewing-contributions-sample-new-module">
<title>Sample template for a new module review</title>
<itemizedlist>
<listitem><para>Add labels to the pull-request. (Requires commit
rights)</para>
<itemizedlist>
<listitem><para><literal>8.has: module (new)</literal> and any topic label
that fit the module.</para></listitem>
</itemizedlist>
</listitem>
<listitem><para>Ensure that the module tests, if any, are
succeeding.</para></listitem>
<listitem><para>Ensure that the introduced options are correct.</para>
<itemizedlist>
<listitem><para>Type should be appropriate (string related types differs
in their merging capabilities, <literal>optionSet</literal> and
<literal>string</literal> types are deprecated).</para></listitem>
<listitem><para>Description, default and example should be
provided.</para></listitem>
</itemizedlist>
</listitem>
<listitem><para>Ensure that module <literal>meta</literal> field is
present</para>
<itemizedlist>
<listitem><para>Maintainers should be declared in
<literal>meta.maintainers</literal>.</para></listitem>
<listitem><para>Module documentation should be declared with
<literal>meta.doc</literal>.</para></listitem>
</itemizedlist>
</listitem>
<listitem><para>Ensure that the module respect other modules
functionality.</para>
<itemizedlist>
<listitem><para>For example, enabling a module should not open firewall
ports by default.</para></listitem>
</itemizedlist>
</listitem>
</itemizedlist>
<example><title>Sample template for a new module review</title>
<screen>
##### Reviewed points
@@ -551,7 +340,7 @@ $ nix-shell -p nox --run "nox-review -k pr PRNUMBER"
- [ ] options have default
- [ ] options have example
- [ ] options have descriptions
- [ ] No unneeded package is added to environment.systemPackages
- [ ] No unneeded package is added to system.environmentPackages
- [ ] meta.maintainers is set
- [ ] module documentation is declared in meta.doc
@@ -559,58 +348,46 @@ $ nix-shell -p nox --run "nox-review -k pr PRNUMBER"
##### Comments
</screen>
</example>
</section>
<section xml:id="reviewing-contributions-other-submissions">
<title>Other submissions</title>
</screen></example>
</section>
<para>
Other type of submissions requires different reviewing steps.
</para>
<section><title>Other submissions</title>
<para>
If you consider having enough knowledge and experience in a topic and would
like to be a long-term reviewer for related submissions, please contact the
current reviewers for that topic. They will give you information about the
reviewing process. The main reviewers for a topic can be hard to find as
there is no list, but checking past pull requests to see who reviewed or
git-blaming the code to see who committed to that topic can give some hints.
</para>
<para>Other type of submissions requires different reviewing steps.</para>
<para>
Container system, boot system and library changes are some examples of the
pull requests fitting this category.
</para>
</section>
<section xml:id="reviewing-contributions--merging-pull-requests">
<title>Merging pull requests</title>
<para>If you consider having enough knowledge and experience in a topic and
would like to be a long-term reviewer for related submissions, please contact
the current reviewers for that topic. They will give you information about the
reviewing process.
The main reviewers for a topic can be hard to find as there is no list, but
checking past pull-requests to see who reviewed or git-blaming the code to see
who committed to that topic can give some hints.</para>
<para>
It is possible for community members that have enough knowledge and
experience on a special topic to contribute by merging pull requests.
</para>
<para>Container system, boot system and library changes are some examples of the
pull requests fitting this category.</para>
<para>
TODO: add the procedure to request merging rights.
</para>
</section>
<section><title>Merging pull-requests</title>
<para>It is possible for community members that have enough knowledge and
experience on a special topic to contribute by merging pull requests.</para>
<para>TODO: add the procedure to request merging rights.</para>
<!--
The following paragraph about how to deal with unactive contributors is just a
proposition and should be modified to what the community agrees to be the right
policy.
<para>Please note that contributors with commit rights unactive for more than
<para>Please note that contributors with commit rights unactive for more than
three months will have their commit rights revoked.</para>
-->
<para>
In a case a contributor definitively leaves the Nix community, they should
create an issue or post on
<link
xlink:href="https://discourse.nixos.org">Discourse</link> with
references of packages and modules they maintain so the maintainership can be
taken over by other contributors.
</para>
</section>
<para>In a case a contributor leaves definitively the Nix community, he should
create an issue or notify the mailing list with references of packages and
modules he maintains so the maintainership can be taken over by other
contributors.</para>
</section>
</chapter>

View File

@@ -1,5 +0,0 @@
{ pkgs ? import ../. {} }:
(import ./default.nix {}).overrideAttrs (x: {
buildInputs = x.buildInputs ++ [ pkgs.xmloscopy pkgs.ruby ];
})

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,6 @@
body
{
font-family: "Nimbus Sans L", sans-serif;
font-size: 1em;
background: white;
margin: 2em 1em 2em 1em;
}
@@ -29,28 +28,9 @@ h2 /* chapters, appendices, subtitle */
font-size: 180%;
}
div.book
{
text-align: center;
}
div.book > div
{
/*
* based on https://medium.com/@zkareemz/golden-ratio-62b3b6d4282a
* we do 70 characters per line to fit code listings better
* 70 * (font-size / 1.618)
* expression for emacs:
* (* 70 (/ 1 1.618))
*/
max-width: 43.2em;
text-align: left;
margin: auto;
}
/* Extra space between chapters, appendices. */
div.chapter > div.titlepage h2, div.appendix > div.titlepage h2
{
div.chapter > div.titlepage h2, div.appendix > div.titlepage h2
{
margin-top: 1.5em;
}
@@ -122,9 +102,9 @@ pre.screen, pre.programlisting
{
border: 1px solid #b0b0b0;
padding: 3px 3px;
margin-left: 0.5em;
margin-right: 0.5em;
margin-left: 1.5em;
margin-right: 1.5em;
color: #600000;
background: #f4f4f8;
font-family: monospace;
border-radius: 0.4em;
@@ -138,6 +118,7 @@ div.example pre.programlisting
margin: 0 0 0 0;
}
/***************************************************************************
Notes, warnings etc:
***************************************************************************/
@@ -191,7 +172,7 @@ div.navfooter *
/***************************************************************************
Links colors and highlighting:
Links colors and highlighting:
***************************************************************************/
a { text-decoration: none; }
@@ -228,7 +209,7 @@ tt, code
.term
{
font-weight: bold;
}
div.variablelist dd p, div.glosslist dd p
@@ -268,24 +249,7 @@ table
box-shadow: 0.4em 0.4em 0.5em #e0e0e0;
}
table.simplelist
{
text-align: left;
color: #005aa0;
border: 0;
padding: 5px;
background: #fffff5;
font-weight: normal;
font-style: italic;
box-shadow: none;
margin-bottom: 1em;
}
div.navheader table, div.navfooter table {
box-shadow: none;
}
div.affiliation
{
font-style: italic;
}
}

View File

@@ -1,513 +1,447 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-submitting-changes">
<title>Submitting changes</title>
<section xml:id="submitting-changes-making-patches">
<title>Making patches</title>
<itemizedlist>
<listitem>
<para>
Read <link xlink:href="https://nixos.org/nixpkgs/manual/">Manual (How to
write packages for Nix)</link>.
</para>
</listitem>
<listitem>
<para>
Fork the repository on GitHub.
</para>
</listitem>
<listitem>
<para>
Create a branch for your future fix.
<itemizedlist>
<listitem>
<para>
You can make branch from a commit of your local
<command>nixos-version</command>. That will help you to avoid
additional local compilations. Because you will receive packages from
binary cache.
<itemizedlist>
<listitem>
<para>
For example: <command>nixos-version</command> returns
<command>15.05.git.0998212 (Dingo)</command>. So you can do:
</para>
</listitem>
</itemizedlist>
<title>Submitting changes</title>
<section>
<title>Making patches</title>
<itemizedlist>
<listitem>
<para>Read <link xlink:href="https://nixos.org/nixpkgs/manual/">Manual (How to write packages for Nix)</link>.</para>
</listitem>
<listitem>
<para>Fork the repository on GitHub.</para>
</listitem>
<listitem>
<para>Create a branch for your future fix.
<itemizedlist>
<listitem>
<para>You can make branch from a commit of your local <command>nixos-version</command>. That will help you to avoid additional local compilations. Because you will receive packages from binary cache.
<itemizedlist>
<listitem>
<para>For example: <command>nixos-version</command> returns <command>15.05.git.0998212 (Dingo)</command>. So you can do:</para>
</listitem>
</itemizedlist>
<screen>
$ git checkout 0998212
$ git checkout -b 'fix/pkg-name-update'
</screen>
</para>
</listitem>
<listitem>
<para>
Please avoid working directly on the <command>master</command> branch.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
Make commits of logical units.
<itemizedlist>
<listitem>
<para>
If you removed pkgs, made some major NixOS changes etc., write about
them in
<command>nixos/doc/manual/release-notes/rl-unstable.xml</command>.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
Check for unnecessary whitespace with <command>git diff --check</command>
before committing.
</para>
</listitem>
<listitem>
<para>
Format the commit in a following way:
</para>
</para>
</listitem>
<listitem>
<para>Please avoid working directly on the <command>master</command> branch.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>Make commits of logical units.
<itemizedlist>
<listitem>
<para>If you removed pkgs, made some major NixOS changes etc., write about them in <command>nixos/doc/manual/release-notes/rl-unstable.xml</command>.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>Check for unnecessary whitespace with <command>git diff --check</command> before committing.</para>
</listitem>
<listitem>
<para>Format the commit in a following way:</para>
<programlisting>
(pkg-name | nixos/&lt;module>): (from -> to | init at version | refactor | etc)
Additional information.
</programlisting>
<itemizedlist>
<listitem>
<para>
Examples:
<itemizedlist>
<listitem>
<para>
<command>nginx: init at 2.0.1</command>
</para>
</listitem>
<listitem>
<para>
<command>firefox: 54.0.1 -> 55.0</command>
</para>
</listitem>
<listitem>
<para>
<command>nixos/hydra: add bazBaz option</command>
</para>
</listitem>
<listitem>
<para>
<command>nixos/nginx: refactor config generation</command>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Test your changes. If you work with
<itemizedlist>
<listitem>
<para>
nixpkgs:
<itemizedlist>
<listitem>
<para>
update pkg ->
<itemizedlist>
<listitem>
<para>
<command>nix-env -i pkg-name -f &lt;path to your local nixpkgs
folder&gt;</command>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
add pkg ->
<itemizedlist>
<listitem>
<para>
Make sure it's in
<command>pkgs/top-level/all-packages.nix</command>
</para>
</listitem>
<listitem>
<para>
<command>nix-env -i pkg-name -f &lt;path to your local nixpkgs
folder&gt;</command>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
<emphasis>If you don't want to install pkg in you
profile</emphasis>.
<itemizedlist>
<listitem>
<para>
<command>nix-build -A pkg-attribute-name &lt;path to your local
nixpkgs folder&gt;/default.nix</command> and check results in the
folder <command>result</command>. It will appear in the same
directory where you did <command>nix-build</command>.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
If you did <command>nix-env -i pkg-name</command> you can do
<command>nix-env -e pkg-name</command> to uninstall it from your
system.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
NixOS and its modules:
<itemizedlist>
<listitem>
<para>
You can add new module to your NixOS configuration file (usually
it's <command>/etc/nixos/configuration.nix</command>). And do
<command>sudo nixos-rebuild test -I nixpkgs=&lt;path to your local
nixpkgs folder&gt; --fast</command>.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
If you have commits <command>pkg-name: oh, forgot to insert
whitespace</command>: squash commits in this case. Use <command>git rebase
-i</command>.
</para>
</listitem>
<listitem>
<para>
Rebase you branch against current <command>master</command>.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="submitting-changes-submitting-changes">
<title>Submitting changes</title>
<itemizedlist>
<listitem>
<para>
Push your changes to your fork of nixpkgs.
</para>
</listitem>
<listitem>
<para>
Create pull request:
<itemizedlist>
<listitem>
<para>
Write the title in format <command>(pkg-name | nixos/&lt;module>):
improvement</command>.
<itemizedlist>
<listitem>
<para>
If you update the pkg, write versions <command>from -> to</command>.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
Write in comment if you have tested your patch. Do not rely much on
<command>TravisCI</command>.
</para>
</listitem>
<listitem>
<para>
If you make an improvement, write about your motivation.
</para>
</listitem>
<listitem>
<para>
Notify maintainers of the package. For example add to the message:
<command>cc @jagajaga @domenkozar</command>.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="submitting-changes-pull-request-template">
<itemizedlist>
<listitem>
<para>Examples:
<itemizedlist>
<listitem>
<para>
<command>nginx: init at 2.0.1</command>
</para>
</listitem>
<listitem>
<para>
<command>firefox: 54.0.1 -> 55.0</command>
</para>
</listitem>
<listitem>
<para>
<command>nixos/hydra: add bazBaz option</command>
</para>
</listitem>
<listitem>
<para>
<command>nixos/nginx: refactor config generation</command>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Test your changes. If you work with
<itemizedlist>
<listitem>
<para>nixpkgs:
<itemizedlist>
<listitem>
<para>update pkg ->
<itemizedlist>
<listitem>
<para>
<command>nix-env -i pkg-name -f &lt;path to your local nixpkgs folder&gt;</command>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>add pkg ->
<itemizedlist>
<listitem>
<para>Make sure it's in <command>pkgs/top-level/all-packages.nix</command>
</para>
</listitem>
<listitem>
<para>
<command>nix-env -i pkg-name -f &lt;path to your local nixpkgs folder&gt;</command>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
<emphasis>If you don't want to install pkg in you profile</emphasis>.
<itemizedlist>
<listitem>
<para>
<command>nix-build -A pkg-attribute-name &lt;path to your local nixpkgs folder&gt;/default.nix</command> and check results in the folder <command>result</command>. It will appear in the same directory where you did <command>nix-build</command>.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>If you did <command>nix-env -i pkg-name</command> you can do <command>nix-env -e pkg-name</command> to uninstall it from your system.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>NixOS and its modules:
<itemizedlist>
<listitem>
<para>You can add new module to your NixOS configuration file (usually it's <command>/etc/nixos/configuration.nix</command>).
And do <command>sudo nixos-rebuild test -I nixpkgs=&lt;path to your local nixpkgs folder&gt; --fast</command>.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>If you have commits <command>pkg-name: oh, forgot to insert whitespace</command>: squash commits in this case. Use <command>git rebase -i</command>.</para>
</listitem>
<listitem>
<para>Rebase you branch against current <command>master</command>.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Submitting changes</title>
<itemizedlist>
<listitem>
<para>Push your changes to your fork of nixpkgs.</para>
</listitem>
<listitem>
<para>Create pull request:
<itemizedlist>
<listitem>
<para>Write the title in format <command>(pkg-name | nixos/&lt;module>): improvement</command>.
<itemizedlist>
<listitem>
<para>If you update the pkg, write versions <command>from -> to</command>.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>Write in comment if you have tested your patch. Do not rely much on <command>TravisCI</command>.</para>
</listitem>
<listitem>
<para>If you make an improvement, write about your motivation.</para>
</listitem>
<listitem>
<para>Notify maintainers of the package. For example add to the message: <command>cc @jagajaga @domenkozar</command>.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Pull Request Template</title>
<para>
The pull request template helps determine what steps have been made for a
contribution so far, and will help guide maintainers on the status of a
change. The motivation section of the PR should include any extra details
the title does not address and link any existing issues related to the pull
request.
</para>
<para>
When a PR is created, it will be pre-populated with some checkboxes detailed
below:
</para>
<section xml:id="submitting-changes-tested-with-sandbox">
<title>Tested using sandboxing</title>
<para>
When sandbox builds are enabled, Nix will setup an isolated environment for
each build process. It is used to remove further hidden dependencies set by
the build environment to improve reproducibility. This includes access to
the network during the build outside of <function>fetch*</function>
functions and files outside the Nix store. Depending on the operating
system access to other resources are blocked as well (ex. inter process
communication is isolated on Linux); see
<link
xlink:href="https://nixos.org/nix/manual/#description-45">build-use-sandbox</link>
in Nix manual for details.
</para>
<para>
Sandboxing is not enabled by default in Nix due to a small performance hit
on each build. In pull requests for
<link
xlink:href="https://github.com/NixOS/nixpkgs/">nixpkgs</link>
people are asked to test builds with sandboxing enabled (see
<literal>Tested using sandboxing</literal> in the pull request template)
because
in<link
xlink:href="https://nixos.org/hydra/">https://nixos.org/hydra/</link>
sandboxing is also used.
</para>
<para>
Depending if you use NixOS or other platforms you can use one of the
following methods to enable sandboxing
<emphasis role="bold">before</emphasis> building the package:
<itemizedlist>
<listitem>
<para>
<emphasis role="bold">Globally enable sandboxing on NixOS</emphasis>:
add the following to <filename>configuration.nix</filename>
<screen>nix.useSandbox = true;</screen>
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Globally enable sandboxing on non-NixOS
platforms</emphasis>: add the following to:
<filename>/etc/nix/nix.conf</filename>
<screen>build-use-sandbox = true</screen>
</para>
</listitem>
</itemizedlist>
</para>
</section>
<section xml:id="submitting-changes-platform-diversity">
<title>Built on platform(s)</title>
<para>
Many Nix packages are designed to run on multiple platforms. As such, it's
important to let the maintainer know which platforms your changes have been
tested on. It's not always practical to test a change on all platforms, and
is not required for a pull request to be merged. Only check the systems you
tested the build on in this section.
</para>
</section>
<section xml:id="submitting-changes-nixos-tests">
<title>Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)</title>
<para>
Packages with automated tests are much more likely to be merged in a timely
fashion because it doesn't require as much manual testing by the maintainer
to verify the functionality of the package. If there are existing tests for
the package, they should be run to verify your changes do not break the
tests. Tests only apply to packages with NixOS modules defined and can only
be run on Linux. For more details on writing and running tests, see the
<link
xlink:href="https://nixos.org/nixos/manual/index.html#sec-nixos-tests">section
in the NixOS manual</link>.
</para>
</section>
<section xml:id="submitting-changes-tested-compilation">
<title>Tested compilation of all pkgs that depend on this change using <command>nox-review</command></title>
<para>
If you are updating a package's version, you can use nox to make sure all
packages that depend on the updated package still compile correctly. This
can be done using the nox utility. The <command>nox-review</command>
utility can look for and build all dependencies either based on uncommited
changes with the <literal>wip</literal> option or specifying a github pull
request number.
</para>
<para>
review uncommitted changes:
<screen>nix-shell -p nox --run "nox-review wip"</screen>
</para>
<para>
review changes from pull request number 12345:
<screen>nix-shell -p nox --run "nox-review pr 12345"</screen>
</para>
</section>
<section xml:id="submitting-changes-tested-execution">
<title>Tested execution of all binary files (usually in <filename>./result/bin/</filename>)</title>
<para>
It's important to test any executables generated by a build when you change
or create a package in nixpkgs. This can be done by looking in
<filename>./result/bin</filename> and running any files in there, or at a
minimum, the main executable for the package. For example, if you make a
change to <package>texlive</package>, you probably would only check the
binaries associated with the change you made rather than testing all of
them.
</para>
</section>
<section xml:id="submitting-changes-contribution-standards">
<title>Meets Nixpkgs contribution standards</title>
<para>
The last checkbox is fits
<link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md">CONTRIBUTING.md</link>.
The contributing document has detailed information on standards the Nix
community has for commit messages, reviews, licensing of contributions you
make to the project, etc... Everyone should read and understand the
standards the community has for contributing before submitting a pull
The pull request template helps determine what steps have been made for a
contribution so far, and will help guide maintainers on the status of a
change. The motivation section of the PR should include any extra details
the title does not address and link any existing issues related to the pull
request.
</para>
</para>
<para>When a PR is created, it will be pre-populated with some checkboxes detailed below:
</para>
<section>
<title>Tested using sandboxing</title>
<para>
When sandbox builds are enabled, Nix will setup an isolated environment
for each build process. It is used to remove further hidden dependencies
set by the build environment to improve reproducibility. This includes
access to the network during the build outside of
<function>fetch*</function> functions and files outside the Nix store.
Depending on the operating system access to other resources are blocked
as well (ex. inter process communication is isolated on Linux); see <link
xlink:href="https://nixos.org/nix/manual/#description-45">build-use-sandbox</link>
in Nix manual for details.
</para>
<para>
Sandboxing is not enabled by default in Nix due to a small performance
hit on each build. In pull requests for <link
xlink:href="https://github.com/NixOS/nixpkgs/">nixpkgs</link> people
are asked to test builds with sandboxing enabled (see <literal>Tested
using sandboxing</literal> in the pull request template) because
in<link
xlink:href="https://nixos.org/hydra/">https://nixos.org/hydra/</link>
sandboxing is also used.
</para>
<para>
Depending if you use NixOS or other platforms you can use one of the
following methods to enable sandboxing <emphasis role="bold">before</emphasis> building the package:
<itemizedlist>
<listitem>
<para>
<emphasis role="bold">Globally enable sandboxing on NixOS</emphasis>:
add the following to
<filename>configuration.nix</filename>
<screen>nix.useSandbox = true;</screen>
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Globally enable sandboxing on non-NixOS platforms</emphasis>:
add the following to: <filename>/etc/nix/nix.conf</filename>
<screen>build-use-sandbox = true</screen>
</para>
</listitem>
</itemizedlist>
</para>
</section>
</section>
<section xml:id="submitting-changes-hotfixing-pull-requests">
<title>Hotfixing pull requests</title>
<section>
<title>Built on platform(s)</title>
<para>
Many Nix packages are designed to run on multiple
platforms. As such, it's important to let the maintainer know which
platforms your changes have been tested on. It's not always practical to
test a change on all platforms, and is not required for a pull request to
be merged. Only check the systems you tested the build on in this
section.
</para>
</section>
<section>
<title>Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)</title>
<para>
Packages with automated tests are much more likely to be merged in a
timely fashion because it doesn't require as much manual testing by the
maintainer to verify the functionality of the package. If there are
existing tests for the package, they should be run to verify your changes
do not break the tests. Tests only apply to packages with NixOS modules
defined and can only be run on Linux. For more details on writing and
running tests, see the <link
xlink:href="https://nixos.org/nixos/manual/index.html#sec-nixos-tests">section
in the NixOS manual</link>.
</para>
</section>
<section>
<title>Tested compilation of all pkgs that depend on this change using <command>nox-review</command></title>
<para>
If you are updating a package's version, you can use nox to make sure all
packages that depend on the updated package still compile correctly. This
can be done using the nox utility. The <command>nox-review</command>
utility can look for and build all dependencies either based on
uncommited changes with the <literal>wip</literal> option or specifying a
github pull request number.
</para>
<para>
review uncommitted changes:
<screen>nix-shell -p nox --run nox-review wip</screen>
</para>
<para>
review changes from pull request number 12345:
<screen>nix-shell -p nox --run nox-review pr 12345</screen>
</para>
</section>
<section>
<title>Tested execution of all binary files (usually in <filename>./result/bin/</filename>)</title>
<para>
It's important to test any executables generated by a build when you
change or create a package in nixpkgs. This can be done by looking in
<filename>./result/bin</filename> and running any files in there, or at a
minimum, the main executable for the package. For example, if you make a change
to <package>texlive</package>, you probably would only check the binaries
associated with the change you made rather than testing all of them.
</para>
</section>
<section>
<title>Meets nixpkgs contribution standards</title>
<para>
The last checkbox is fits <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md">CONTRIBUTING.md</link>.
The contributing document has detailed information on standards the Nix
community has for commit messages, reviews, licensing of contributions
you make to the project, etc... Everyone should read and understand the
standards the community has for contributing before submitting a pull
request.
</para>
</section>
</section>
<section>
<title>Hotfixing pull requests</title>
<itemizedlist>
<listitem>
<para>Make the appropriate changes in you branch.</para>
</listitem>
<listitem>
<para>Don't create additional commits, do
<itemizedlist>
<listitem>
<para><command>git rebase -i</command></para>
</listitem>
<listitem>
<para>
<command>git push --force</command> to your branch.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Commit policy</title>
<itemizedlist>
<listitem>
<para>Commits must be sufficiently tested before being merged, both for the master and staging branches.</para>
</listitem>
<listitem>
<para>Hydra builds for master and staging should not be used as testing platform, it's a build farm for changes that have been already tested.</para>
</listitem>
<listitem>
<para>When changing the bootloader installation process, extra care must be taken. Grub installations cannot be rolled back, hence changes may break people's installations forever. For any non-trivial change to the bootloader please file a PR asking for review, especially from @edolstra.</para>
</listitem>
</itemizedlist>
<section>
<title>Master branch</title>
<itemizedlist>
<listitem>
<para>
Make the appropriate changes in you branch.
</para>
</listitem>
<listitem>
<para>
Don't create additional commits, do
<itemizedlist>
<listitem>
<para>
<command>git rebase -i</command>
</para>
</listitem>
<listitem>
<para>
<command>git push --force</command> to your branch.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
It should only see non-breaking commits that do not cause mass rebuilds.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="submitting-changes-commit-policy">
<title>Commit policy</title>
</section>
<section>
<title>Staging branch</title>
<itemizedlist>
<listitem>
<para>
Commits must be sufficiently tested before being merged, both for the
master and staging branches.
</para>
</listitem>
<listitem>
<para>
Hydra builds for master and staging should not be used as testing
platform, it's a build farm for changes that have been already tested.
</para>
</listitem>
<listitem>
<para>
When changing the bootloader installation process, extra care must be
taken. Grub installations cannot be rolled back, hence changes may break
people's installations forever. For any non-trivial change to the
bootloader please file a PR asking for review, especially from @edolstra.
</para>
</listitem>
<listitem>
<para>
It's only for non-breaking mass-rebuild commits. That means it's not to
be used for testing, and changes must have been well tested already.
<link xlink:href="http://comments.gmane.org/gmane.linux.distributions.nixos/13447">Read policy here</link>.
</para>
</listitem>
<listitem>
<para>
If the branch is already in a broken state, please refrain from adding
extra new breakages. Stabilize it for a few days, merge into master,
then resume development on staging.
<link xlink:href="http://hydra.nixos.org/jobset/nixpkgs/staging#tabs-evaluations">Keep an eye on the staging evaluations here</link>.
If any fixes for staging happen to be already in master, then master can
be merged into staging.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="submitting-changes-master-branch">
<title>Master branch</title>
<section>
<title>Stable release branches</title>
<itemizedlist>
<itemizedlist>
<listitem>
<para>
It should only see non-breaking commits that do not cause mass rebuilds.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="submitting-changes-staging-branch">
<title>Staging branch</title>
<itemizedlist>
<listitem>
<para>
It's only for non-breaking mass-rebuild commits. That means it's not to
be used for testing, and changes must have been well tested already.
<link xlink:href="https://web.archive.org/web/20160528180406/http://comments.gmane.org/gmane.linux.distributions.nixos/13447">Read
policy here</link>.
</para>
</listitem>
<listitem>
<para>
If the branch is already in a broken state, please refrain from adding
extra new breakages. Stabilize it for a few days, merge into master, then
resume development on staging.
<link xlink:href="http://hydra.nixos.org/jobset/nixpkgs/staging#tabs-evaluations">Keep
an eye on the staging evaluations here</link>. If any fixes for staging
happen to be already in master, then master can be merged into staging.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="submitting-changes-stable-release-branches">
<title>Stable release branches</title>
<itemizedlist>
<listitem>
<para>
If you're cherry-picking a commit to a stable release branch, always use
<command>git cherry-pick -xe</command> and ensure the message contains a
clear description about why this needs to be included in the stable
branch.
</para>
<para>
An example of a cherry-picked commit would look like this:
</para>
<screen>
<para>
If you're cherry-picking a commit to a stable release branch, always use
<command>git cherry-pick -xe</command> and ensure the message contains a
clear description about why this needs to be included in the stable
branch.
</para>
<para>An example of a cherry-picked commit would look like this:</para>
<screen>
nixos: Refactor the world.
The original commit message describing the reason why the world was torn apart.
@@ -517,7 +451,9 @@ Reason: I just had a gut feeling that this would also be wanted by people from
the stone age.
</screen>
</listitem>
</itemizedlist>
</section>
</section>
</itemizedlist>
</section>
</section>
</chapter>

View File

@@ -1,44 +0,0 @@
{ lib }:
rec {
/* Print a trace message if pred is false.
Intended to be used to augment asserts with helpful error messages.
Example:
assertMsg false "nope"
=> false
stderr> trace: nope
assert (assertMsg ("foo" == "bar") "foo is not bar, silly"); ""
stderr> trace: foo is not bar, silly
stderr> assert failed at
Type:
assertMsg :: Bool -> String -> Bool
*/
# TODO(Profpatsch): add tests that check stderr
assertMsg = pred: msg:
if pred
then true
else builtins.trace msg false;
/* Specialized `assertMsg` for checking if val is one of the elements
of a list. Useful for checking enums.
Example:
let sslLibrary = "libressl"
in assertOneOf "sslLibrary" sslLibrary [ "openssl" "bearssl" ]
=> false
stderr> trace: sslLibrary must be one of "openssl", "bearssl", but is: "libressl"
Type:
assertOneOf :: String -> ComparableVal -> List ComparableVal -> Bool
*/
assertOneOf = name: val: xs: assertMsg
(lib.elem val xs)
"${name} must be one of ${
lib.generators.toPretty {} xs}, but is: ${
lib.generators.toPretty {} val}";
}

View File

@@ -3,9 +3,9 @@
let
inherit (builtins) head tail length;
inherit (lib.trivial) and;
inherit (lib.trivial) and or;
inherit (lib.strings) concatStringsSep;
inherit (lib.lists) fold concatMap concatLists;
inherit (lib.lists) fold concatMap concatLists all deepSeqList;
in
rec {
@@ -94,15 +94,6 @@ rec {
attrValues = builtins.attrValues or (attrs: attrVals (attrNames attrs) attrs);
/* Given a set of attribute names, return the set of the corresponding
attributes from the given set.
Example:
getAttrs [ "a" "b" ] { a = 1; b = 2; c = 3; }
=> { a = 1; b = 2; }
*/
getAttrs = names: attrs: genAttrs names (name: attrs.${name});
/* Collect each attribute named `attr' from a list of attribute
sets. Sets that don't contain the named attribute are ignored.
@@ -154,7 +145,7 @@ rec {
foldAttrs = op: nul: list_of_attrs:
fold (n: a:
fold (name: o:
o // { ${name} = op n.${name} (a.${name} or nul); }
o // (listToAttrs [{inherit name; value = op n.${name} (a.${name} or nul); }])
) a (attrNames n)
) {} list_of_attrs;
@@ -204,9 +195,8 @@ rec {
{ x = "foo"; y = "bar"; }
=> { x = "x-foo"; y = "y-bar"; }
*/
mapAttrs = builtins.mapAttrs or
(f: set:
listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set)));
mapAttrs = f: set:
listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set));
/* Like `mapAttrs', but allows the name of each attribute to be
@@ -393,12 +383,11 @@ rec {
recursiveUpdateUntil = pred: lhs: rhs:
let f = attrPath:
zipAttrsWith (n: values:
let here = attrPath ++ [n]; in
if tail values == []
|| pred here (head (tail values)) (head values) then
|| pred attrPath (head (tail values)) (head values) then
head values
else
f here values
f (attrPath ++ [n]) values
);
in f [] [rhs lhs];
@@ -444,15 +433,12 @@ rec {
useful for deep-overriding.
Example:
overrideExisting {} { a = 1; }
=> {}
overrideExisting { b = 2; } { a = 1; }
=> { b = 2; }
overrideExisting { a = 3; b = 2; } { a = 1; }
=> { a = 1; b = 2; }
x = { a = { b = 4; c = 3; }; }
overrideExisting x { a = { b = 6; d = 2; }; }
=> { a = { b = 6; d = 2; }; }
*/
overrideExisting = old: new:
mapAttrs (name: value: new.${name} or value) old;
old // listToAttrs (map (attr: nameValuePair attr (attrByPath [attr] old.${attr} new)) (attrNames old));
/* Get a package output.
If no output is found, fallback to `.out` and then to the default.

View File

@@ -0,0 +1,113 @@
{lib, pkgs}:
let inherit (lib) nv nvs; in
{
# composableDerivation basically mixes these features:
# - fix function
# - mergeAttrBy
# - provides shortcuts for "options" such as "--enable-foo" and adding
# buildInputs, see php example
#
# It predates styles which are common today, such as
# * the config attr
# * mkDerivation.override feature
# * overrideDerivation (lib/customization.nix)
#
# Some of the most more important usage examples (which could be rewritten if it was important):
# * php
# * postgis
# * vim_configurable
#
# A minimal example illustrating most features would look like this:
# let base = composableDerivation { (fixed: let inherit (fixed.fixed) name in {
# src = fetchurl {
# }
# buildInputs = [A];
# preConfigre = "echo ${name}";
# # attention, "name" attr is missing, thus you cannot instantiate "base".
# }
# in {
# # These all add name attribute, thus you can instantiate those:
# v1 = base.merge ({ name = "foo-add-B"; buildInputs = [B]; }); // B gets merged into buildInputs
# v2 = base.merge ({ name = "mix-in-pre-configure-lines" preConfigre = ""; });
# v3 = base.replace ({ name = "foo-no-A-only-B;" buildInputs = [B]; });
# }
#
# So yes, you can think about it being something like nixos modules, and
# you'd be merging "features" in one at a time using .merge or .replace
# Thanks Shea for telling me that I rethink the documentation ..
#
# issues:
# * its complicated to understand
# * some "features" such as exact merge behaviour are buried in mergeAttrBy
# and defaultOverridableDelayableArgs assuming the default behaviour does
# the right thing in the common case
# * Eelco once said using such fix style functions are slow to evaluate
# * Too quick & dirty. Hard to understand for others. The benefit was that
# you were able to create a kernel builder like base derivation and replace
# / add patches the way you want without having to declare function arguments
#
# nice features:
# declaring "optional features" is modular. For instance:
# flags.curl = {
# configureFlags = ["--with-curl=${curl.dev}" "--with-curlwrappers"];
# buildInputs = [curl openssl];
# };
# flags.other = { .. }
# (Example taken from PHP)
#
# alternative styles / related features:
# * Eg see function supporting building the kernel
# * versionedDerivation (discussion about this is still going on - or ended)
# * composedArgsAndFun
# * mkDerivation.override
# * overrideDerivation
# * using { .., *Support ? false }: like configurable options.
# To find those examples use grep
#
# To sum up: It exists for historical reasons - and for most commonly used
# tasks the alternatives should be used
#
# If you have questions about this code ping Marc Weber.
composableDerivation = {
mkDerivation ? pkgs.stdenv.mkDerivation,
# list of functions to be applied before defaultOverridableDelayableArgs removes removeAttrs names
# prepareDerivationArgs handles derivation configurations
applyPreTidy ? [ lib.prepareDerivationArgs ],
# consider adding addtional elements by derivation.merge { removeAttrs = ["elem"]; };
removeAttrs ? ["cfg" "flags"]
}: (lib.defaultOverridableDelayableArgs ( a: mkDerivation a)
{
inherit applyPreTidy removeAttrs;
}).merge;
# some utility functions
# use this function to generate flag attrs for prepareDerivationArgs
# E nable D isable F eature
edf = {name, feat ? name, enable ? {}, disable ? {} , value ? ""}:
nvs name {
set = {
configureFlags = ["--enable-${feat}${if value == "" then "" else "="}${value}"];
} // enable;
unset = {
configureFlags = ["--disable-${feat}"];
} // disable;
};
# same for --with and --without-
# W ith or W ithout F eature
wwf = {name, feat ? name, enable ? {}, disable ? {}, value ? ""}:
nvs name {
set = enable // {
configureFlags = ["--with-${feat}${if value == "" then "" else "="}${value}"]
++ lib.maybeAttr "configureFlags" [] enable;
};
unset = disable // {
configureFlags = ["--without-${feat}"]
++ lib.maybeAttr "configureFlags" [] disable;
};
};
}

View File

@@ -1,4 +1,9 @@
{ lib }:
let
inherit (builtins) attrNames isFunction;
in
rec {
@@ -31,7 +36,7 @@ rec {
overrideDerivation = drv: f:
let
newDrv = derivation (drv.drvAttrs // (f drv));
in lib.flip (extendDerivation true) newDrv (
in addPassthru newDrv (
{ meta = drv.meta or {};
passthru = if drv ? passthru then drv.passthru else {};
}
@@ -67,7 +72,7 @@ rec {
makeOverridable = f: origArgs:
let
ff = f origArgs;
overrideWith = newArgs: origArgs // (if lib.isFunction newArgs then newArgs origArgs else newArgs);
overrideWith = newArgs: origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs);
in
if builtins.isAttrs ff then (ff // {
override = newArgs: makeOverridable f (overrideWith newArgs);
@@ -76,7 +81,7 @@ rec {
${if ff ? overrideAttrs then "overrideAttrs" else null} = fdrv:
makeOverridable (args: (f args).overrideAttrs fdrv) origArgs;
})
else if lib.isFunction ff then {
else if builtins.isFunction ff then {
override = newArgs: makeOverridable f (overrideWith newArgs);
__functor = self: ff;
overrideDerivation = throw "overrideDerivation not yet supported for functors";
@@ -107,8 +112,8 @@ rec {
*/
callPackageWith = autoArgs: fn: args:
let
f = if lib.isFunction fn then fn else import fn;
auto = builtins.intersectAttrs (lib.functionArgs f) autoArgs;
f = if builtins.isFunction fn then fn else import fn;
auto = builtins.intersectAttrs (builtins.functionArgs f) autoArgs;
in makeOverridable f (auto // args);
@@ -117,17 +122,17 @@ rec {
individual attributes. */
callPackagesWith = autoArgs: fn: args:
let
f = if lib.isFunction fn then fn else import fn;
auto = builtins.intersectAttrs (lib.functionArgs f) autoArgs;
f = if builtins.isFunction fn then fn else import fn;
auto = builtins.intersectAttrs (builtins.functionArgs f) autoArgs;
origArgs = auto // args;
pkgs = f origArgs;
mkAttrOverridable = name: _: makeOverridable (newArgs: (f newArgs).${name}) origArgs;
mkAttrOverridable = name: pkg: makeOverridable (newArgs: (f newArgs).${name}) origArgs;
in lib.mapAttrs mkAttrOverridable pkgs;
/* Add attributes to each output of a derivation without changing
the derivation itself and check a given condition when evaluating. */
extendDerivation = condition: passthru: drv:
the derivation itself. */
addPassthru = drv: passthru:
let
outputs = drv.outputs or [ "out" ];
@@ -137,18 +142,13 @@ rec {
outputToAttrListElement = outputName:
{ name = outputName;
value = commonAttrs // {
inherit (drv.${outputName}) type outputName;
drvPath = assert condition; drv.${outputName}.drvPath;
outPath = assert condition; drv.${outputName}.outPath;
inherit (drv.${outputName}) outPath drvPath type outputName;
};
};
outputsList = map outputToAttrListElement outputs;
in commonAttrs // {
outputUnspecified = true;
drvPath = assert condition; drv.drvPath;
outPath = assert condition; drv.outPath;
};
in commonAttrs // { outputUnspecified = true; };
/* Strip a derivation of all non-essential attributes, returning
only those needed by hydra-eval-jobs. Also strictly evaluate the
@@ -185,7 +185,7 @@ rec {
/* Make a set of packages with a common scope. All packages called
with the provided `callPackage' will be evaluated with the same
arguments. Any package in the set may depend on any other. The
`overrideScope'` function allows subsequent modification of the package
`overrideScope' function allows subsequent modification of the package
set in a consistent way, i.e. all packages in the set will be
called with the overridden packages. The package sets may be
hierarchical: the packages in the set are called with the scope
@@ -195,10 +195,9 @@ rec {
let self = f self // {
newScope = scope: newScope (self // scope);
callPackage = self.newScope {};
overrideScope = g: lib.warn
"`overrideScope` (from `lib.makeScope`) is deprecated. Do `overrideScope' (self: super: { })` instead of `overrideScope (super: self: { })`. All other overrides have the parameters in that order, including other definitions of `overrideScope`. This was the only definition violating the pattern."
(makeScope newScope (lib.fixedPoints.extends (lib.flip g) f));
overrideScope' = g: makeScope newScope (lib.fixedPoints.extends g f);
overrideScope = g:
makeScope newScope
(self_: let super = f self_; in super // g super self_);
packages = f;
};
in self;

View File

@@ -1,98 +1,34 @@
/* Collection of functions useful for debugging
broken nix expressions.
* `trace`-like functions take two values, print
the first to stderr and return the second.
* `traceVal`-like functions take one argument
which both printed and returned.
* `traceSeq`-like functions fully evaluate their
traced value before printing (not just to weak
head normal form like trace does by default).
* Functions that end in `-Fn` take an additional
function as their first argument, which is applied
to the traced value before it is printed.
*/
{ lib }:
let
inherit (builtins) trace isAttrs isList isInt
head substring attrNames;
inherit (lib) id elem isFunction;
inherit (builtins) trace attrNamesToStr isAttrs isFunction isList isInt
isString isBool head substring attrNames;
inherit (lib) all id mapAttrsFlatten elem;
in
rec {
# -- TRACING --
inherit (builtins) addErrorContext;
/* Conditionally trace the supplied message, based on a predicate.
addErrorContextToAttrs = lib.mapAttrs (a: v: lib.addErrorContext "while evaluating ${a}" v);
Type: traceIf :: bool -> string -> a -> a
traceIf = p: msg: x: if p then trace msg x else x;
Example:
traceIf true "hello" 3
trace: hello
=> 3
*/
traceIf =
# Predicate to check
pred:
# Message that should be traced
msg:
# Value to return
x: if pred then trace msg x else x;
traceVal = x: trace x x;
traceXMLVal = x: trace (builtins.toXML x) x;
traceXMLValMarked = str: x: trace (str + builtins.toXML x) x;
/* Trace the supplied value after applying a function to it, and
return the original value.
# strict trace functions (traced structure is fully evaluated and printed)
Type: traceValFn :: (a -> b) -> a -> a
/* `builtins.trace`, but the value is `builtins.deepSeq`ed first. */
traceSeq = x: y: trace (builtins.deepSeq x x) y;
Example:
traceValFn (v: "mystring ${v}") "foo"
trace: mystring foo
=> "foo"
*/
traceValFn =
# Function to apply
f:
# Value to trace and return
x: trace (f x) x;
/* Trace the supplied value and return it.
Type: traceVal :: a -> a
Example:
traceVal 42
# trace: 42
=> 42
*/
traceVal = traceValFn id;
/* `builtins.trace`, but the value is `builtins.deepSeq`ed first.
Type: traceSeq :: a -> b -> b
Example:
trace { a.b.c = 3; } null
trace: { a = <CODE>; }
=> null
traceSeq { a.b.c = 3; } null
trace: { a = { b = { c = 3; }; }; }
=> null
*/
traceSeq =
# The value to trace
x:
# The value to return
y: trace (builtins.deepSeq x x) y;
/* Like `traceSeq`, but only evaluate down to depth n.
This is very useful because lots of `traceSeq` usages
lead to an infinite recursion.
Example:
traceSeqN 2 { a.b.c = 3; } null
trace: { a = { b = {}; }; }
=> null
/* Like `traceSeq`, but only down to depth n.
* This is very useful because lots of `traceSeq` usages
* lead to an infinite recursion.
*/
traceSeqN = depth: x: y: with lib;
let snip = v: if isList v then noQuotes "[]" v
@@ -107,49 +43,50 @@ rec {
in trace (generators.toPretty { allowPrettyValues = true; }
(modify depth snip x)) y;
/* A combination of `traceVal` and `traceSeq` that applies a
provided function to the value to be traced after `deepSeq`ing
it.
/* `traceSeq`, but the same value is traced and returned */
traceValSeq = v: traceVal (builtins.deepSeq v v);
/* `traceValSeq` but with fixed depth */
traceValSeqN = depth: v: traceSeqN depth v v;
# this can help debug your code as well - designed to not produce thousands of lines
traceShowVal = x: trace (showVal x) x;
traceShowValMarked = str: x: trace (str + showVal x) x;
attrNamesToStr = a: lib.concatStringsSep "; " (map (x: "${x}=") (attrNames a));
showVal = x:
if isAttrs x then
if x ? outPath then "x is a derivation, name ${if x ? name then x.name else "<no name>"}, { ${attrNamesToStr x} }"
else "x is attr set { ${attrNamesToStr x} }"
else if isFunction x then "x is a function"
else if x == [] then "x is an empty list"
else if isList x then "x is a list, first element is: ${showVal (head x)}"
else if x == true then "x is boolean true"
else if x == false then "x is boolean false"
else if x == null then "x is null"
else if isInt x then "x is an integer `${toString x}'"
else if isString x then "x is a string `${substring 0 50 x}...'"
else "x is probably a path `${substring 0 50 (toString x)}...'";
# trace the arguments passed to function and its result
# maybe rewrite these functions in a traceCallXml like style. Then one function is enough
traceCall = n: f: a: let t = n2: x: traceShowValMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a));
traceCall2 = n: f: a: b: let t = n2: x: traceShowValMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b));
traceCall3 = n: f: a: b: c: let t = n2: x: traceShowValMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b) (t "arg 3" c));
# FIXME: rename this?
traceValIfNot = c: x:
if c x then true else trace (showVal x) false;
/* Evaluate a set of tests. A test is an attribute set {expr,
expected}, denoting an expression and its expected result. The
result is a list of failed tests, each represented as {name,
expected, actual}, denoting the attribute name of the failing
test and its expected and actual results. Used for regression
testing of the functions in lib; see tests.nix for an example.
Only tests having names starting with "test" are run.
Add attr { tests = ["testName"]; } to run these test only
*/
traceValSeqFn =
# Function to apply
f:
# Value to trace
v: traceValFn f (builtins.deepSeq v v);
/* A combination of `traceVal` and `traceSeq`. */
traceValSeq = traceValSeqFn id;
/* A combination of `traceVal` and `traceSeqN` that applies a
provided function to the value to be traced. */
traceValSeqNFn =
# Function to apply
f:
depth:
# Value to trace
v: traceSeqN depth (f v) v;
/* A combination of `traceVal` and `traceSeqN`. */
traceValSeqN = traceValSeqNFn id;
# -- TESTING --
/* Evaluate a set of tests. A test is an attribute set `{expr,
expected}`, denoting an expression and its expected result. The
result is a list of failed tests, each represented as `{name,
expected, actual}`, denoting the attribute name of the failing
test and its expected and actual results.
Used for regression testing of the functions in lib; see
tests.nix for an example. Only tests having names starting with
"test" are run.
Add attr { tests = ["testName"]; } to run these tests only.
*/
runTests =
# Tests to run
tests: lib.concatLists (lib.attrValues (lib.mapAttrs (name: test:
runTests = tests: lib.concatLists (lib.attrValues (lib.mapAttrs (name: test:
let testsToRun = if tests ? tests then tests.tests else [];
in if (substring 0 4 name == "test" || elem name testsToRun)
&& ((testsToRun == []) || elem name tests.tests)
@@ -158,75 +95,13 @@ rec {
then [ { inherit name; expected = test.expected; result = test.expr; } ]
else [] ) tests));
/* Create a test assuming that list elements are `true`.
Example:
{ testX = allTrue [ true ]; }
*/
# create a test assuming that list elements are true
# usage: { testX = allTrue [ true ]; }
testAllTrue = expr: { inherit expr; expected = map (x: true) expr; };
# -- DEPRECATED --
traceShowVal = x: trace (showVal x) x;
traceShowValMarked = str: x: trace (str + showVal x) x;
attrNamesToStr = a:
trace ( "Warning: `attrNamesToStr` is deprecated "
+ "and will be removed in the next release. "
+ "Please use more specific concatenation "
+ "for your uses (`lib.concat(Map)StringsSep`)." )
(lib.concatStringsSep "; " (map (x: "${x}=") (attrNames a)));
showVal = with lib;
trace ( "Warning: `showVal` is deprecated "
+ "and will be removed in the next release, "
+ "please use `traceSeqN`" )
(let
modify = v:
let pr = f: { __pretty = f; val = v; };
in if isDerivation v then pr
(drv: "<δ:${drv.name}:${concatStringsSep ","
(attrNames drv)}>")
else if [] == v then pr (const "[]")
else if isList v then pr (l: "[ ${go (head l)}, ]")
else if isAttrs v then pr
(a: "{ ${ concatStringsSep ", " (attrNames a)} }")
else v;
go = x: generators.toPretty
{ allowPrettyValues = true; }
(modify x);
in go);
traceXMLVal = x:
trace ( "Warning: `traceXMLVal` is deprecated "
+ "and will be removed in the next release. "
+ "Please use `traceValFn builtins.toXML`." )
(trace (builtins.toXML x) x);
traceXMLValMarked = str: x:
trace ( "Warning: `traceXMLValMarked` is deprecated "
+ "and will be removed in the next release. "
+ "Please use `traceValFn (x: str + builtins.toXML x)`." )
(trace (str + builtins.toXML x) x);
# trace the arguments passed to function and its result
# maybe rewrite these functions in a traceCallXml like style. Then one function is enough
traceCall = n: f: a: let t = n2: x: traceShowValMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a));
traceCall2 = n: f: a: b: let t = n2: x: traceShowValMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b));
traceCall3 = n: f: a: b: c: let t = n2: x: traceShowValMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b) (t "arg 3" c));
traceValIfNot = c: x:
trace ( "Warning: `traceValIfNot` is deprecated "
+ "and will be removed in the next release. "
+ "Please use `if/then/else` and `traceValSeq 1`.")
(if c x then true else traceSeq (showVal x) false);
addErrorContextToAttrs = attrs:
trace ( "Warning: `addErrorContextToAttrs` is deprecated "
+ "and will be removed in the next release. "
+ "Please use `builtins.addErrorContext` directly." )
(lib.mapAttrs (a: v: lib.addErrorContext "while evaluating ${a}" v) attrs);
strict = v:
trace "Warning: strict is deprecated and will be removed in the next release"
(builtins.seq v v);
# example: (traceCallXml "myfun" id 3) will output something like
# calling myfun arg 1: 3 result: 3
@@ -234,20 +109,17 @@ rec {
# note: if result doesn't evaluate you'll get no trace at all (FIXME)
# args should be printed in any case
traceCallXml = a:
trace ( "Warning: `traceCallXml` is deprecated "
+ "and will be removed in the next release. "
+ "Please complain if you use the function regularly." )
(if !isInt a then
if !isInt a then
traceCallXml 1 "calling ${a}\n"
else
let nr = a;
in (str: expr:
if isFunction expr then
(arg:
traceCallXml (builtins.add 1 nr) "${str}\n arg ${builtins.toString nr} is \n ${builtins.toXML (builtins.seq arg arg)}" (expr arg)
traceCallXml (builtins.add 1 nr) "${str}\n arg ${builtins.toString nr} is \n ${builtins.toXML (strict arg)}" (expr arg)
)
else
let r = builtins.seq expr expr;
let r = strict expr;
in trace "${str}\n result:\n${builtins.toXML r}" r
));
);
}

View File

@@ -5,11 +5,9 @@
*/
let
inherit (import ./fixed-points.nix {}) makeExtensible;
callLibs = file: import file { inherit lib; };
lib = makeExtensible (self: let
callLibs = file: import file { lib = self; };
in with self; {
lib = rec {
# often used, or depending on very little
trivial = callLibs ./trivial.nix;
@@ -23,10 +21,10 @@ let
# packaging
customisation = callLibs ./customisation.nix;
maintainers = import ../maintainers/maintainer-list.nix;
maintainers = callLibs ./maintainers.nix;
meta = callLibs ./meta.nix;
sources = callLibs ./sources.nix;
versions = callLibs ./versions.nix;
# module system
modules = callLibs ./modules.nix;
@@ -38,33 +36,33 @@ let
systems = callLibs ./systems;
# misc
asserts = callLibs ./asserts.nix;
debug = callLibs ./debug.nix;
generators = callLibs ./generators.nix;
misc = callLibs ./deprecated.nix;
# domain-specific
sandbox = callLibs ./sandbox.nix;
fetchers = callLibs ./fetchers.nix;
# Eval-time filesystem handling
filesystem = callLibs ./filesystem.nix;
# back-compat aliases
platforms = systems.forMeta;
platforms = systems.doubles;
inherit (builtins) add addErrorContext attrNames concatLists
deepSeq elem elemAt filter genericClosure genList getAttr
hasAttr head isAttrs isBool isInt isList isString length
lessThan listToAttrs pathExists readFile replaceStrings seq
stringLength sub substring tail;
inherit (trivial) id const concat or and bitAnd bitOr bitXor bitNot
boolToString mergeAttrs flip mapNullable inNixShell min max
importJSON warn info nixpkgsVersion version mod compare
splitByAndCompare functionArgs setFunctionArgs isFunction;
inherit (fixedPoints) fix fix' converge extends composeExtensions
inherit (builtins) add addErrorContext attrNames
concatLists deepSeq elem elemAt filter genericClosure genList
getAttr hasAttr head isAttrs isBool isFunction isInt isList
isString length lessThan listToAttrs pathExists readFile
replaceStrings seq stringLength sub substring tail;
inherit (trivial) id const concat or and boolToString mergeAttrs
flip mapNullable inNixShell min max importJSON warn info
nixpkgsVersion mod;
inherit (fixedPoints) fix fix' extends composeExtensions
makeExtensible makeExtensibleWithCustomName;
inherit (attrsets) attrByPath hasAttrByPath setAttrByPath
getAttrFromPath attrVals attrValues getAttrs catAttrs filterAttrs
getAttrFromPath attrVals attrValues catAttrs filterAttrs
filterAttrsRecursive foldAttrs collect nameValuePair mapAttrs
mapAttrs' mapAttrsToList mapAttrsRecursive mapAttrsRecursiveCond
genAttrs isDerivation toDerivation optionalAttrs
@@ -74,32 +72,29 @@ let
inherit (lists) singleton foldr fold foldl foldl' imap0 imap1
concatMap flatten remove findSingle findFirst any all count
optional optionals toList range partition zipListsWith zipLists
reverseList listDfs toposort sort naturalSort compareLists take
drop sublist last init crossLists unique intersectLists
subtractLists mutuallyExclusive groupBy groupBy';
reverseList listDfs toposort sort take drop sublist last init
crossLists unique intersectLists subtractLists
mutuallyExclusive;
inherit (strings) concatStrings concatMapStrings concatImapStrings
intersperse concatStringsSep concatMapStringsSep
concatImapStringsSep makeSearchPath makeSearchPathOutput
makeLibraryPath makeBinPath optionalString
makeLibraryPath makeBinPath makePerlPath optionalString
hasPrefix hasSuffix stringToCharacters stringAsChars escape
escapeShellArg escapeShellArgs replaceChars lowerChars
upperChars toLower toUpper addContextFrom splitString
removePrefix removeSuffix versionOlder versionAtLeast getVersion
nameFromURL enableFeature enableFeatureAs withFeature
withFeatureAs fixedWidthString fixedWidthNumber isStorePath
escapeShellArg escapeShellArgs replaceChars lowerChars upperChars
toLower toUpper addContextFrom splitString removePrefix
removeSuffix versionOlder versionAtLeast getVersion nameFromURL
enableFeature fixedWidthString fixedWidthNumber isStorePath
toInt readPathsFromFile fileContents;
inherit (stringsWithDeps) textClosureList textClosureMap
noDepEntry fullDepEntry packEntry stringAfter;
inherit (customisation) overrideDerivation makeOverridable
callPackageWith callPackagesWith extendDerivation hydraJob
makeScope;
callPackageWith callPackagesWith addPassthru hydraJob makeScope;
inherit (meta) addMetaAttrs dontDistribute setName updateName
appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
appendToName mapDerivationAttrset lowPrio lowPrioSet hiPrio
hiPrioSet;
inherit (sources) pathType pathIsDirectory cleanSourceFilter
cleanSource sourceByRegex sourceFilesBySuffices
commitIdFromGitRepo cleanSourceWith pathHasContext
canCleanSource;
commitIdFromGitRepo;
inherit (modules) evalModules closeModules unifyModuleSyntax
applyIfFunction unpackSubmodule packSubmodule mergeModules
mergeModules' mergeOptionDecls evalOptionValue mergeDefinitions
@@ -117,14 +112,13 @@ let
unknownModule mkOption;
inherit (types) isType setType defaultTypeMerge defaultFunctor
isOptionType mkOptionType;
inherit (asserts)
assertMsg assertOneOf;
inherit (debug) addErrorContextToAttrs traceIf traceVal traceValFn
inherit (debug) addErrorContextToAttrs traceIf traceVal
traceXMLVal traceXMLValMarked traceSeq traceSeqN traceValSeq
traceValSeqFn traceValSeqN traceValSeqNFn traceShowVal
traceShowValMarked showVal traceCall traceCall2 traceCall3
traceValIfNot runTests testAllTrue traceCallXml attrNamesToStr;
traceValSeqN traceShowVal traceShowValMarked
showVal traceCall traceCall2 traceCall3 traceValIfNot runTests
testAllTrue strict traceCallXml attrNamesToStr;
inherit (misc) maybeEnv defaultMergeArg defaultMerge foldArgs
defaultOverridableDelayableArgs composedArgsAndFun
maybeAttrNullable maybeAttr ifEnable checkFlag getValue
checkReqs uniqList uniqListExt condConcat lazyGenericClosure
innerModifySumArgs modifySumArgs innerClosePropagation
@@ -132,7 +126,6 @@ let
mergeAttrsWithFunc mergeAttrsConcatenateValues
mergeAttrsNoOverride mergeAttrByFunc mergeAttrsByFuncDefaults
mergeAttrsByFuncDefaultsClean mergeAttrBy
fakeSha256 fakeSha512
nixType imap;
});
prepareDerivationArgs nixType imap overridableDelayableArgs;
};
in lib

View File

@@ -1,6 +1,6 @@
{ lib }:
let
inherit (builtins) head tail isList isAttrs isInt attrNames;
inherit (builtins) isFunction head tail isList isAttrs isInt attrNames;
in
@@ -35,6 +35,74 @@ rec {
withStdOverrides;
# predecessors: proposed replacement for applyAndFun (which has a bug cause it merges twice)
# the naming "overridableDelayableArgs" tries to express that you can
# - override attr values which have been supplied earlier
# - use attr values before they have been supplied by accessing the fix point
# name "fixed"
# f: the (delayed overridden) arguments are applied to this
#
# initial: initial attrs arguments and settings. see defaultOverridableDelayableArgs
#
# returns: f applied to the arguments // special attributes attrs
# a) merge: merge applied args with new args. Wether an argument is overridden depends on the merge settings
# b) replace: this let's you replace and remove names no matter which merge function has been set
#
# examples: see test cases "res" below;
overridableDelayableArgs =
f: # the function applied to the arguments
initial: # you pass attrs, the functions below are passing a function taking the fix argument
let
takeFixed = if isFunction initial then initial else (fixed : initial); # transform initial to an expression always taking the fixed argument
tidy = args:
let # apply all functions given in "applyPreTidy" in sequence
applyPreTidyFun = fold ( n: a: x: n ( a x ) ) lib.id (maybeAttr "applyPreTidy" [] args);
in removeAttrs (applyPreTidyFun args) ( ["applyPreTidy"] ++ (maybeAttr "removeAttrs" [] args) ); # tidy up args before applying them
fun = n: x:
let newArgs = fixed:
let args = takeFixed fixed;
mergeFun = args.${n};
in if isAttrs x then (mergeFun args x)
else assert isFunction x;
mergeFun args (x ( args // { inherit fixed; }));
in overridableDelayableArgs f newArgs;
in
(f (tidy (lib.fix takeFixed))) // {
merge = fun "mergeFun";
replace = fun "keepFun";
};
defaultOverridableDelayableArgs = f:
let defaults = {
mergeFun = mergeAttrByFunc; # default merge function. merge strategie (concatenate lists, strings) is given by mergeAttrBy
keepFun = a: b: { inherit (a) removeAttrs mergeFun keepFun mergeAttrBy; } // b; # even when using replace preserve these values
applyPreTidy = []; # list of functions applied to args before args are tidied up (usage case : prepareDerivationArgs)
mergeAttrBy = mergeAttrBy // {
applyPreTidy = a: b: a ++ b;
removeAttrs = a: b: a ++ b;
};
removeAttrs = ["mergeFun" "keepFun" "mergeAttrBy" "removeAttrs" "fixed" ]; # before applying the arguments to the function make sure these names are gone
};
in (overridableDelayableArgs f defaults).merge;
# rec { # an example of how composedArgsAndFun can be used
# a = composedArgsAndFun (x: x) { a = ["2"]; meta = { d = "bar";}; };
# # meta.d will be lost ! It's your task to preserve it (eg using a merge function)
# b = a.passthru.function { a = [ "3" ]; meta = { d2 = "bar2";}; };
# # instead of passing/ overriding values you can use a merge function:
# c = b.passthru.function ( x: { a = x.a ++ ["4"]; }); # consider using (maybeAttr "a" [] x)
# }
# result:
# {
# a = { a = ["2"]; meta = { d = "bar"; }; passthru = { function = .. }; };
# b = { a = ["3"]; meta = { d2 = "bar2"; }; passthru = { function = .. }; };
# c = { a = ["3" "4"]; meta = { d2 = "bar2"; }; passthru = { function = .. }; };
# # c2 is equal to c
# }
composedArgsAndFun = f: foldArgs defaultMerge f {};
# shortcut for attrByPath ["name"] default attrs
maybeAttrNullable = maybeAttr;
@@ -217,7 +285,7 @@ rec {
# };
# will result in
# { mergeAttrsBy = [...]; buildInputs = [ a b c d ]; }
# is used by defaultOverridableDelayableArgs and can be used when composing using
# is used by prepareDerivationArgs, defaultOverridableDelayableArgs and can be used when composing using
# foldArgs, composedArgsAndFun or applyAndFun. Example: composableDerivation in all-packages.nix
mergeAttrByFunc = x: y:
let
@@ -250,11 +318,63 @@ rec {
// listToAttrs (map (n: nameValuePair n (a: b: "${a}\n${b}") ) [ "preConfigure" "postInstall" ])
;
# prepareDerivationArgs tries to make writing configurable derivations easier
# example:
# prepareDerivationArgs {
# mergeAttrBy = {
# myScript = x: y: x ++ "\n" ++ y;
# };
# cfg = {
# readlineSupport = true;
# };
# flags = {
# readline = {
# set = {
# configureFlags = [ "--with-compiler=${compiler}" ];
# buildInputs = [ compiler ];
# pass = { inherit compiler; READLINE=1; };
# assertion = compiler.dllSupport;
# myScript = "foo";
# };
# unset = { configureFlags = ["--without-compiler"]; };
# };
# };
# src = ...
# buildPhase = '' ... '';
# name = ...
# myScript = "bar";
# };
# if you don't have need for unset you can omit the surrounding set = { .. } attr
# all attrs except flags cfg and mergeAttrBy will be merged with the
# additional data from flags depending on config settings
# It's used in composableDerivation in all-packages.nix. It's also used
# heavily in the new python and libs implementation
#
# should we check for misspelled cfg options?
# TODO use args.mergeFun here as well?
prepareDerivationArgs = args:
let args2 = { cfg = {}; flags = {}; } // args;
flagName = name: "${name}Support";
cfgWithDefaults = (listToAttrs (map (n: nameValuePair (flagName n) false) (attrNames args2.flags)))
// args2.cfg;
opts = attrValues (mapAttrs (a: v:
let v2 = if v ? set || v ? unset then v else { set = v; };
n = if cfgWithDefaults.${flagName a} then "set" else "unset";
attr = maybeAttr n {} v2; in
if (maybeAttr "assertion" true attr)
then attr
else throw "assertion of flag ${a} of derivation ${args.name} failed"
) args2.flags );
in removeAttrs
(mergeAttrsByFuncDefaults ([args] ++ opts ++ [{ passthru = cfgWithDefaults; }]))
["flags" "cfg" "mergeAttrBy" ];
nixType = x:
if isAttrs x then
if x ? outPath then "derivation"
else "attrs"
else if lib.isFunction x then "function"
else if isFunction x then "function"
else if isList x then "list"
else if x == true then "bool"
else if x == false then "bool"
@@ -270,8 +390,4 @@ rec {
starting at zero.
*/
imap = imap1;
# Fake hashes. Can be used as hash placeholders, when computing hash ahead isn't trivial
fakeSha256 = "0000000000000000000000000000000000000000000000000000000000000000";
fakeSha512 = "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
}

View File

@@ -24,16 +24,6 @@ rec {
# for a concrete example.
fix' = f: let x = f x // { __unfix__ = f; }; in x;
# Return the fixpoint that `f` converges to when called recursively, starting
# with the input `x`.
#
# nix-repl> converge (x: x / 2) 16
# 0
converge = f: x:
if (f x) == x
then x
else converge f (f x);
# Modify the contents of an explicitly recursive attribute set in a way that
# honors `self`-references. This is accomplished with a function
#
@@ -51,18 +41,6 @@ rec {
# think of it as an infix operator `g extends f` that mimics the syntax from
# Java. It may seem counter-intuitive to have the "base class" as the second
# argument, but it's nice this way if several uses of `extends` are cascaded.
#
# To get a better understanding how `extends` turns a function with a fix
# point (the package set we start with) into a new function with a different fix
# point (the desired packages set) lets just see, how `extends g f`
# unfolds with `g` and `f` defined above:
#
# extends g f = self: let super = f self; in super // g self super;
# = self: let super = { foo = "foo"; bar = "bar"; foobar = self.foo + self.bar; }; in super // g self super
# = self: { foo = "foo"; bar = "bar"; foobar = self.foo + self.bar; } // g self { foo = "foo"; bar = "bar"; foobar = self.foo + self.bar; }
# = self: { foo = "foo"; bar = "bar"; foobar = self.foo + self.bar; } // { foo = "foo" + " + "; }
# = self: { foo = "foo + "; bar = "bar"; foobar = self.foo + self.bar; }
#
extends = f: rattrs: self: let super = rattrs self; in super // f self super;
# Compose two extending functions of the type expected by 'extends'

View File

@@ -4,12 +4,6 @@
* They all follow a similar interface:
* generator { config-attrs } data
*
* `config-attrs` are holes in the generators
* with sensible default implementations that
* can be overwritten. The default implementations
* are mostly generators themselves, called with
* their respective default values; they can be reused.
*
* Tests can be found in ./tests.nix
* Documentation in the manual, #sec-generators
*/
@@ -19,53 +13,20 @@ let
libStr = lib.strings;
libAttr = lib.attrsets;
inherit (lib) isFunction;
flipMapAttrs = flip libAttr.mapAttrs;
in
rec {
## -- HELPER FUNCTIONS & DEFAULTS --
/* Convert a value to a sensible default string representation.
* The builtin `toString` function has some strange defaults,
* suitable for bash scripts but not much else.
*/
mkValueStringDefault = {}: v: with builtins;
let err = t: v: abort
("generators.mkValueStringDefault: " +
"${t} not supported: ${toPretty {} v}");
in if isInt v then toString v
# we default to not quoting strings
else if isString v then v
# isString returns "1", which is not a good default
else if true == v then "true"
# here it returns to "", which is even less of a good default
else if false == v then "false"
else if null == v then "null"
# if you have lists you probably want to replace this
else if isList v then err "lists" v
# same as for lists, might want to replace
else if isAttrs v then err "attrsets" v
else if isFunction v then err "functions" v
else err "this value is" (toString v);
/* Generate a line of key k and value v, separated by
* character sep. If sep appears in k, it is escaped.
* Helper for synaxes with different separators.
*
* mkValueString specifies how values should be formatted.
*
* mkKeyValueDefault {} ":" "f:oo" "bar"
* mkKeyValueDefault ":" "f:oo" "bar"
* > "f\:oo:bar"
*/
mkKeyValueDefault = {
mkValueString ? mkValueStringDefault {}
}: sep: k: v:
"${libStr.escape [sep] k}${sep}${mkValueString v}";
## -- FILE FORMAT GENERATORS --
mkKeyValueDefault = sep: k: v:
"${libStr.escape [sep] k}${sep}${toString v}";
/* Generate a key-value-style config file from an attrset.
@@ -73,7 +34,7 @@ rec {
* mkKeyValue is the same as in toINI.
*/
toKeyValue = {
mkKeyValue ? mkKeyValueDefault {} "="
mkKeyValue ? mkKeyValueDefault "="
}: attrs:
let mkLine = k: v: mkKeyValue k v + "\n";
in libStr.concatStrings (libAttr.mapAttrsToList mkLine attrs);
@@ -103,7 +64,7 @@ rec {
# apply transformations (e.g. escapes) to section names
mkSectionName ? (name: libStr.escape [ "[" "]" ] name),
# format a setting line from key and value
mkKeyValue ? mkKeyValueDefault {} "="
mkKeyValue ? mkKeyValueDefault "="
}: attrsOfAttrs:
let
# map function to string for each key val
@@ -131,7 +92,6 @@ rec {
*/
toYAML = {}@args: toJSON args;
/* Pretty print a value, akin to `builtins.trace`.
* Should probably be a builtin as well.
*/
@@ -141,14 +101,17 @@ rec {
(This means fn is type Val -> String.) */
allowPrettyValues ? false
}@args: v: with builtins;
let isPath = v: typeOf v == "path";
in if isInt v then toString v
else if isFloat v then "~${toString v}"
else if isString v then ''"${libStr.escape [''"''] v}"''
else if true == v then "true"
else if false == v then "false"
else if null == v then "null"
else if isPath v then toString v
if isInt v then toString v
else if isBool v then (if v == true then "true" else "false")
else if isString v then "\"" + v + "\""
else if null == v then "null"
else if isFunction v then
let fna = functionArgs v;
showFnas = concatStringsSep "," (libAttr.mapAttrsToList
(name: hasDefVal: if hasDefVal then "(${name})" else name)
fna);
in if fna == {} then "<λ>"
else "<λ:{${showFnas}}>"
else if isList v then "[ "
+ libStr.concatMapStringsSep " " (toPretty args) v
+ " ]"
@@ -157,71 +120,12 @@ rec {
if attrNames v == [ "__pretty" "val" ] && allowPrettyValues
then v.__pretty v.val
# TODO: there is probably a better representation?
else if v ? type && v.type == "derivation" then
"<δ:${v.name}>"
# "<δ:${concatStringsSep "," (builtins.attrNames v)}>"
else if v ? type && v.type == "derivation" then "<δ>"
else "{ "
+ libStr.concatStringsSep " " (libAttr.mapAttrsToList
(name: value:
"${toPretty args name} = ${toPretty args value};") v)
+ " }"
else if isFunction v then
let fna = lib.functionArgs v;
showFnas = concatStringsSep "," (libAttr.mapAttrsToList
(name: hasDefVal: if hasDefVal then "(${name})" else name)
fna);
in if fna == {} then "<λ>"
else "<λ:{${showFnas}}>"
else abort "generators.toPretty: should never happen (v = ${v})";
# PLIST handling
toPlist = {}: v: let
isFloat = builtins.isFloat or (x: false);
expr = ind: x: with builtins;
if isNull x then "" else
if isBool x then bool ind x else
if isInt x then int ind x else
if isString x then str ind x else
if isList x then list ind x else
if isAttrs x then attrs ind x else
if isFloat x then float ind x else
abort "generators.toPlist: should never happen (v = ${v})";
literal = ind: x: ind + x;
bool = ind: x: literal ind (if x then "<true/>" else "<false/>");
int = ind: x: literal ind "<integer>${toString x}</integer>";
str = ind: x: literal ind "<string>${x}</string>";
key = ind: x: literal ind "<key>${x}</key>";
float = ind: x: literal ind "<real>${toString x}</real>";
indent = ind: expr "\t${ind}";
item = ind: libStr.concatMapStringsSep "\n" (indent ind);
list = ind: x: libStr.concatStringsSep "\n" [
(literal ind "<array>")
(item ind x)
(literal ind "</array>")
];
attrs = ind: x: libStr.concatStringsSep "\n" [
(literal ind "<dict>")
(attr ind x)
(literal ind "</dict>")
];
attr = let attrFilter = name: value: name != "_module" && value != null;
in ind: x: libStr.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList
(name: value: lib.optional (attrFilter name value) [
(key "\t${ind}" name)
(expr "\t${ind}" value)
]) x));
in ''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
${expr "" v}
</plist>'';
else "toPretty: should never happen (v = ${v})";
}

View File

@@ -1,21 +0,0 @@
{ lib, version }:
with lib;
rec {
# Common patterns/legacy
whenAtLeast = ver: mkIf (versionAtLeast version ver);
whenOlder = ver: mkIf (versionOlder version ver);
# range is (inclusive, exclusive)
whenBetween = verLow: verHigh: mkIf (versionAtLeast version verLow && versionOlder version verHigh);
# Keeping these around in case we decide to change this horrible implementation :)
option = x:
x // { optional = true; };
yes = { tristate = "y"; };
no = { tristate = "n"; };
module = { tristate = "m"; };
freeform = x: { freeform = x; };
}

View File

@@ -2,7 +2,7 @@
let
spdx = lic: lic // {
url = "http://spdx.org/licenses/${lic.spdxId}.html";
url = "http://spdx.org/licenses/${lic.spdxId}";
};
in
@@ -13,29 +13,19 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
* add it to this list. The URL mentioned above is a good source for inspiration.
*/
abstyles = spdx {
spdxId = "Abstyles";
fullName = "Abstyles License";
};
afl21 = spdx {
spdxId = "AFL-2.1";
fullName = "Academic Free License v2.1";
};
afl3 = spdx {
spdxId = "AFL-3.0";
fullName = "Academic Free License v3.0";
fullName = "Academic Free License";
};
agpl3 = spdx {
spdxId = "AGPL-3.0-only";
fullName = "GNU Affero General Public License v3.0 only";
spdxId = "AGPL-3.0";
fullName = "GNU Affero General Public License v3.0";
};
agpl3Plus = spdx {
spdxId = "AGPL-3.0-or-later";
agpl3Plus = {
fullName = "GNU Affero General Public License v3.0 or later";
inherit (agpl3) url;
};
amazonsl = {
@@ -47,7 +37,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
amd = {
fullName = "AMD License Agreement";
url = http://developer.amd.com/amd-license-agreement/;
free = false;
};
apsl20 = spdx {
@@ -85,11 +74,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = ''Beerware License'';
};
bsd0 = spdx {
spdxId = "0BSD";
fullName = "BSD Zero Clause License";
};
bsd2 = spdx {
spdxId = "BSD-2-Clause";
fullName = ''BSD 2-clause "Simplified" License'';
@@ -105,17 +89,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = ''BSD 4-clause "Original" or "Old" License'';
};
bsl11 = {
fullName = "Business Source License 1.1";
url = https://mariadb.com/bsl11;
free = false;
};
clArtistic = spdx {
spdxId = "ClArtistic";
fullName = "Clarified Artistic License";
};
cc0 = spdx {
spdxId = "CC0-1.0";
fullName = "Creative Commons Zero v1.0 Universal";
@@ -124,37 +97,26 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
cc-by-nc-sa-20 = spdx {
spdxId = "CC-BY-NC-SA-2.0";
fullName = "Creative Commons Attribution Non Commercial Share Alike 2.0";
free = false;
};
cc-by-nc-sa-25 = spdx {
spdxId = "CC-BY-NC-SA-2.5";
fullName = "Creative Commons Attribution Non Commercial Share Alike 2.5";
free = false;
};
cc-by-nc-sa-30 = spdx {
spdxId = "CC-BY-NC-SA-3.0";
fullName = "Creative Commons Attribution Non Commercial Share Alike 3.0";
free = false;
};
cc-by-nc-sa-40 = spdx {
spdxId = "CC-BY-NC-SA-4.0";
fullName = "Creative Commons Attribution Non Commercial Share Alike 4.0";
free = false;
};
cc-by-nc-40 = spdx {
spdxId = "CC-BY-NC-4.0";
fullName = "Creative Commons Attribution Non Commercial 4.0 International";
free = false;
};
cc-by-nd-30 = spdx {
spdxId = "CC-BY-ND-3.0";
fullName = "Creative Commons Attribution-No Derivative Works v3.00";
free = false;
};
cc-by-sa-25 = spdx {
@@ -202,21 +164,11 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "CeCILL-C Free Software License Agreement";
};
cpal10 = spdx {
spdxId = "CPAL-1.0";
fullName = "Common Public Attribution License 1.0";
};
cpl10 = spdx {
spdxId = "CPL-1.0";
fullName = "Common Public License 1.0";
};
curl = {
fullName = "MIT/X11 derivate";
url = "https://curl.haxx.se/docs/copyright.html";
};
doc = spdx {
spdxId = "DOC";
fullName = "DOC License";
@@ -238,22 +190,11 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "Eiffel Forum License v2.0";
};
elastic = {
fullName = "ELASTIC LICENSE";
url = https://github.com/elastic/elasticsearch/blob/master/licenses/ELASTIC-LICENSE.txt;
free = false;
};
epl10 = spdx {
spdxId = "EPL-1.0";
fullName = "Eclipse Public License 1.0";
};
epl20 = spdx {
spdxId = "EPL-2.0";
fullName = "Eclipse Public License 2.0";
};
epson = {
fullName = "Seiko Epson Corporation Software License Agreement for Linux";
url = https://download.ebz.epson.net/dsc/du/02/eula/global/LINUX_EN.html;
@@ -266,29 +207,18 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
};
fdl12 = spdx {
spdxId = "GFDL-1.2-only";
fullName = "GNU Free Documentation License v1.2 only";
};
fdl12Plus = spdx {
spdxId = "GFDL-1.2-or-later";
fullName = "GNU Free Documentation License v1.2 or later";
spdxId = "GFDL-1.2";
fullName = "GNU Free Documentation License v1.2";
};
fdl13 = spdx {
spdxId = "GFDL-1.3-only";
fullName = "GNU Free Documentation License v1.3 only";
};
fdl13Plus = spdx {
spdxId = "GFDL-1.3-or-later";
fullName = "GNU Free Documentation License v1.3 or later";
spdxId = "GFDL-1.3";
fullName = "GNU Free Documentation License v1.3";
};
ffsl = {
fullName = "Floodgap Free Software License";
url = http://www.floodgap.com/software/ffsl/license.html;
free = false;
};
free = {
@@ -307,25 +237,20 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
};
gpl1 = spdx {
spdxId = "GPL-1.0-only";
spdxId = "GPL-1.0";
fullName = "GNU General Public License v1.0 only";
};
gpl1Plus = spdx {
spdxId = "GPL-1.0-or-later";
spdxId = "GPL-1.0+";
fullName = "GNU General Public License v1.0 or later";
};
gpl2 = spdx {
spdxId = "GPL-2.0-only";
spdxId = "GPL-2.0";
fullName = "GNU General Public License v2.0 only";
};
gpl2Classpath = spdx {
spdxId = "GPL-2.0-with-classpath-exception";
fullName = "GNU General Public License v2.0 only (with Classpath exception)";
};
gpl2ClasspathPlus = {
fullName = "GNU General Public License v2.0 or later (with Classpath exception)";
url = https://fedoraproject.org/wiki/Licensing/GPL_Classpath_Exception;
@@ -333,21 +258,21 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
gpl2Oss = {
fullName = "GNU General Public License version 2 only (with OSI approved licenses linking exception)";
url = https://www.mysql.com/about/legal/licensing/foss-exception;
url = http://www.mysql.com/about/legal/licensing/foss-exception;
};
gpl2Plus = spdx {
spdxId = "GPL-2.0-or-later";
spdxId = "GPL-2.0+";
fullName = "GNU General Public License v2.0 or later";
};
gpl3 = spdx {
spdxId = "GPL-3.0-only";
spdxId = "GPL-3.0";
fullName = "GNU General Public License v3.0 only";
};
gpl3Plus = spdx {
spdxId = "GPL-3.0-or-later";
spdxId = "GPL-3.0+";
fullName = "GNU General Public License v3.0 or later";
};
@@ -372,23 +297,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "Independent JPEG Group License";
};
imagemagick = spdx {
fullName = "ImageMagick License";
spdxId = "imagemagick";
};
inria-compcert = {
fullName = "INRIA Non-Commercial License Agreement for the CompCert verified compiler";
url = "http://compcert.inria.fr/doc/LICENSE";
free = false;
};
inria-icesl = {
fullName = "INRIA Non-Commercial License Agreement for IceSL";
url = "http://shapeforge.loria.fr/icesl/EULA_IceSL_binary.pdf";
free = false;
};
ipa = spdx {
spdxId = "IPA";
fullName = "IPA Font License";
@@ -404,45 +318,33 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "ISC License";
};
# Proprietary binaries; free to redistribute without modification.
issl = {
fullName = "Intel Simplified Software License";
url = https://software.intel.com/en-us/license/intel-simplified-software-license;
free = false;
};
jasper = spdx {
spdxId = "JasPer-2.0";
fullName = "JasPer License";
};
lgpl2 = spdx {
spdxId = "LGPL-2.0-only";
spdxId = "LGPL-2.0";
fullName = "GNU Library General Public License v2 only";
};
lgpl2Plus = spdx {
spdxId = "LGPL-2.0-or-later";
spdxId = "LGPL-2.0+";
fullName = "GNU Library General Public License v2 or later";
};
lgpl21 = spdx {
spdxId = "LGPL-2.1-only";
spdxId = "LGPL-2.1";
fullName = "GNU Library General Public License v2.1 only";
};
lgpl21Plus = spdx {
spdxId = "LGPL-2.1-or-later";
spdxId = "LGPL-2.1+";
fullName = "GNU Library General Public License v2.1 or later";
};
lgpl3 = spdx {
spdxId = "LGPL-3.0-only";
spdxId = "LGPL-3.0";
fullName = "GNU Lesser General Public License v3.0 only";
};
lgpl3Plus = spdx {
spdxId = "LGPL-3.0-or-later";
spdxId = "LGPL-3.0+";
fullName = "GNU Lesser General Public License v3.0 or later";
};
@@ -451,11 +353,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "libpng License";
};
libpng2 = {
fullName = "libpng License v2"; # 1.6.36+
url = "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt";
};
libtiff = spdx {
spdxId = "libtiff";
fullName = "libtiff License";
@@ -516,13 +413,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
msrla = {
fullName = "Microsoft Research License Agreement";
url = "http://research.microsoft.com/en-us/projects/pex/msr-la.txt";
free = false;
};
nasa13 = spdx {
spdxId = "NASA-1.3";
fullName = "NASA Open Source Agreement 1.3";
free = false;
};
ncsa = spdx {
@@ -535,17 +425,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "Notion modified LGPL";
};
nposl3 = spdx {
spdxId = "NPOSL-3.0";
fullName = "Non-Profit Open Software License 3.0";
};
ocamlpro_nc = {
fullName = "OCamlPro Non Commercial license version 1";
url = "https://alt-ergo.ocamlpro.com/http/alt-ergo-2.2.0/OCamlPro-Non-Commercial-License.pdf";
free = false;
};
ofl = spdx {
spdxId = "OFL-1.1";
fullName = "SIL Open Font License 1.1";
@@ -561,21 +440,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "OpenSSL License";
};
osl2 = spdx {
spdxId = "OSL-2.0";
fullName = "Open Software License 2.0";
};
osl21 = spdx {
spdxId = "OSL-2.1";
fullName = "Open Software License 2.1";
};
osl3 = spdx {
spdxId = "OSL-3.0";
fullName = "Open Software License 3.0";
};
php301 = spdx {
spdxId = "PHP-3.01";
fullName = "PHP License v3.01";
@@ -586,12 +450,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "PostgreSQL License";
};
postman = {
fullName = "Postman EULA";
url = https://www.getpostman.com/licenses/postman_base_app;
free = false;
};
psfl = spdx {
spdxId = "Python-2.0";
fullName = "Python Software Foundation License version 2";
@@ -602,11 +460,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "Public Domain";
};
purdueBsd = {
fullName = " Purdue BSD-Style License"; # also know as lsof license
url = https://enterprise.dejacode.com/licenses/public/purdue-bsd;
};
qpl = spdx {
spdxId = "QPL-1.0";
fullName = "Q Public License 1.0";
@@ -622,11 +475,6 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "Ruby License";
};
sendmail = spdx {
spdxId = "Sendmail";
fullName = "Sendmail License";
};
sgi-b-20 = spdx {
spdxId = "SGI-B-2.0";
fullName = "SGI Free Software License B v2.0";
@@ -684,22 +532,11 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "Vim License";
};
virtualbox-puel = {
fullName = "Oracle VM VirtualBox Extension Pack Personal Use and Evaluation License (PUEL)";
url = "https://www.virtualbox.org/wiki/VirtualBox_PUEL";
free = false;
};
vsl10 = spdx {
spdxId = "VSL-1.0";
fullName = "Vovida Software License v1.0";
};
watcom = spdx {
spdxId = "Watcom-1.0";
fullName = "Sybase Open Watcom Public License 1.0";
};
w3c = spdx {
spdxId = "W3C";
fullName = "W3C Software Notice and License";
@@ -716,15 +553,10 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
};
wxWindows = spdx {
spdxId = "wxWindows";
spdxId = "WXwindows";
fullName = "wxWindows Library Licence, Version 3.1";
};
xfig = {
fullName = "xfig";
url = "http://mcj.sourceforge.net/authors.html#xfig";
};
zlib = spdx {
spdxId = "Zlib";
fullName = "zlib License";
@@ -739,4 +571,5 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
spdxId = "ZPL-2.1";
fullName = "Zope Public License 2.1";
};
}

View File

@@ -1,31 +1,26 @@
# General list operations.
{ lib }:
with lib.trivial;
let
inherit (lib.strings) toInt;
in
rec {
inherit (builtins) head tail length isList elemAt concatLists filter elem genList;
/* Create a list consisting of a single element. `singleton x` is
sometimes more convenient with respect to indentation than `[x]`
/* Create a list consisting of a single element. `singleton x' is
sometimes more convenient with respect to indentation than `[x]'
when x spans multiple lines.
Type: singleton :: a -> [a]
Example:
singleton "foo"
=> [ "foo" ]
*/
singleton = x: [x];
/* right fold a binary function `op` between successive elements of
`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))`.
Type: foldr :: (a -> b -> b) -> b -> [a] -> b
/* right fold a binary function `op' between successive elements of
`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))'.
Type:
foldr :: (a -> b -> b) -> b -> [a] -> b
Example:
concat = foldr (a: b: a + b) "z"
@@ -45,15 +40,16 @@ rec {
else op (elemAt list n) (fold' (n + 1));
in fold' 0;
/* `fold` is an alias of `foldr` for historic reasons */
/* `fold' is an alias of `foldr' for historic reasons */
# FIXME(Profpatsch): deprecate?
fold = foldr;
/* left fold, like `foldr`, but from the left:
/* left fold, like `foldr', but from the left:
`foldl op nul [x_1 x_2 ... x_n] == op (... (op (op nul x_1) x_2) ... x_n)`.
Type: foldl :: (b -> a -> b) -> b -> [a] -> b
Type:
foldl :: (b -> a -> b) -> b -> [a] -> b
Example:
lconcat = foldl (a: b: a + b) "z"
@@ -66,26 +62,23 @@ rec {
*/
foldl = op: nul: list:
let
len = length list;
foldl' = n:
if n == -1
then nul
else op (foldl' (n - 1)) (elemAt list n);
in foldl' (length list - 1);
/* Strict version of `foldl`.
/* Strict version of `foldl'.
The difference is that evaluation is forced upon access. Usually used
with small whole results (in contract with lazily-generated list or large
lists where only a part is consumed.)
Type: foldl' :: (b -> a -> b) -> b -> [a] -> b
*/
foldl' = builtins.foldl' or foldl;
/* Map with index starting from 0
Type: imap0 :: (int -> a -> b) -> [a] -> [b]
Example:
imap0 (i: v: "${v}-${toString i}") ["a" "b"]
=> [ "a-0" "b-1" ]
@@ -94,8 +87,6 @@ rec {
/* Map with index starting from 1
Type: imap1 :: (int -> a -> b) -> [a] -> [b]
Example:
imap1 (i: v: "${v}-${toString i}") ["a" "b"]
=> [ "a-1" "b-2" ]
@@ -104,13 +95,11 @@ rec {
/* Map and concatenate the result.
Type: concatMap :: (a -> [b]) -> [a] -> [b]
Example:
concatMap (x: [x] ++ ["z"]) ["a" "b"]
=> [ "a" "z" "b" "z" ]
*/
concatMap = builtins.concatMap or (f: list: concatLists (map f list));
concatMap = f: list: concatLists (map f list);
/* Flatten the argument into a single list; that is, nested lists are
spliced into the top-level lists.
@@ -128,21 +117,15 @@ rec {
/* Remove elements equal to 'e' from a list. Useful for buildInputs.
Type: remove :: a -> [a] -> [a]
Example:
remove 3 [ 1 3 4 3 ]
=> [ 1 4 ]
*/
remove =
# Element to remove from the list
e: filter (x: x != e);
remove = e: filter (x: x != e);
/* Find the sole element in the list matching the specified
predicate, returns `default` if no such element exists, or
`multiple` if there are multiple matching elements.
Type: findSingle :: (a -> bool) -> a -> a -> [a] -> a
predicate, returns `default' if no such element exists, or
`multiple' if there are multiple matching elements.
Example:
findSingle (x: x == 3) "none" "multiple" [ 1 3 3 ]
@@ -152,24 +135,14 @@ rec {
findSingle (x: x == 3) "none" "multiple" [ 1 9 ]
=> "none"
*/
findSingle =
# Predicate
pred:
# Default value to return if element was not found.
default:
# Default value to return if more than one element was found
multiple:
# Input list
list:
findSingle = pred: default: multiple: list:
let found = filter pred list; len = length found;
in if len == 0 then default
else if len != 1 then multiple
else head found;
/* Find the first element in the list matching the specified
predicate or return `default` if no such element exists.
Type: findFirst :: (a -> bool) -> a -> [a] -> a
predicate or returns `default' if no such element exists.
Example:
findFirst (x: x > 3) 7 [ 1 6 4 ]
@@ -177,20 +150,12 @@ rec {
findFirst (x: x > 9) 7 [ 1 6 4 ]
=> 7
*/
findFirst =
# Predicate
pred:
# Default value to return
default:
# Input list
list:
findFirst = pred: default: list:
let found = filter pred list;
in if found == [] then default else head found;
/* Return true if function `pred` returns true for at least one
element of `list`.
Type: any :: (a -> bool) -> [a] -> bool
/* Return true iff function `pred' returns true for at least element
of `list'.
Example:
any isString [ 1 "a" { } ]
@@ -200,10 +165,8 @@ rec {
*/
any = builtins.any or (pred: foldr (x: y: if pred x then true else y) false);
/* Return true if function `pred` returns true for all elements of
`list`.
Type: all :: (a -> bool) -> [a] -> bool
/* Return true iff function `pred' returns true for all elements of
`list'.
Example:
all (x: x < 3) [ 1 2 ]
@@ -213,25 +176,19 @@ rec {
*/
all = builtins.all or (pred: foldr (x: y: if pred x then y else false) true);
/* Count how many elements of `list` match the supplied predicate
function.
Type: count :: (a -> bool) -> [a] -> int
/* Count how many times function `pred' returns true for the elements
of `list'.
Example:
count (x: x == 3) [ 3 2 3 4 6 ]
=> 2
*/
count =
# Predicate
pred: foldl' (c: x: if pred x then c + 1 else c) 0;
count = pred: foldl' (c: x: if pred x then c + 1 else c) 0;
/* Return a singleton list or an empty list, depending on a boolean
value. Useful when building lists with optional elements
(e.g. `++ optional (system == "i686-linux") flashplayer').
Type: optional :: bool -> a -> [a]
Example:
optional true "foo"
=> [ "foo" ]
@@ -242,19 +199,13 @@ rec {
/* Return a list or an empty list, depending on a boolean value.
Type: optionals :: bool -> [a] -> [a]
Example:
optionals true [ 2 3 ]
=> [ 2 3 ]
optionals false [ 2 3 ]
=> [ ]
*/
optionals =
# Condition
cond:
# List to return if condition is true
elems: if cond then elems else [];
optionals = cond: elems: if cond then elems else [];
/* If argument is a list, return it; else, wrap it in a singleton
@@ -271,28 +222,20 @@ rec {
/* Return a list of integers from `first' up to and including `last'.
Type: range :: int -> int -> [int]
Example:
range 2 4
=> [ 2 3 4 ]
range 3 2
=> [ ]
*/
range =
# First integer in the range
first:
# Last integer in the range
last:
range = first: last:
if first > last then
[]
else
genList (n: first + n) (last - first + 1);
/* Splits the elements of a list in two lists, `right` and
`wrong`, depending on the evaluation of a predicate.
Type: (a -> bool) -> [a] -> { right :: [a], wrong :: [a] }
/* Splits the elements of a list in two lists, `right' and
`wrong', depending on the evaluation of a predicate.
Example:
partition (x: x > 2) [ 5 1 2 3 4 ]
@@ -305,63 +248,21 @@ rec {
else { right = t.right; wrong = [h] ++ t.wrong; }
) { right = []; wrong = []; });
/* Splits the elements of a list into many lists, using the return value of a predicate.
Predicate should return a string which becomes keys of attrset `groupBy' returns.
`groupBy'` allows to customise the combining function and initial value
Example:
groupBy (x: boolToString (x > 2)) [ 5 1 2 3 4 ]
=> { true = [ 5 3 4 ]; false = [ 1 2 ]; }
groupBy (x: x.name) [ {name = "icewm"; script = "icewm &";}
{name = "xfce"; script = "xfce4-session &";}
{name = "icewm"; script = "icewmbg &";}
{name = "mate"; script = "gnome-session &";}
]
=> { icewm = [ { name = "icewm"; script = "icewm &"; }
{ name = "icewm"; script = "icewmbg &"; } ];
mate = [ { name = "mate"; script = "gnome-session &"; } ];
xfce = [ { name = "xfce"; script = "xfce4-session &"; } ];
}
groupBy' builtins.add 0 (x: boolToString (x > 2)) [ 5 1 2 3 4 ]
=> { true = 12; false = 3; }
*/
groupBy' = op: nul: pred: lst:
foldl' (r: e:
let
key = pred e;
in
r // { ${key} = op (r.${key} or nul) e; }
) {} lst;
groupBy = groupBy' (sum: e: sum ++ [e]) [];
/* Merges two lists of the same size together. If the sizes aren't the same
the merging stops at the shortest. How both lists are merged is defined
by the first argument.
Type: zipListsWith :: (a -> b -> c) -> [a] -> [b] -> [c]
Example:
zipListsWith (a: b: a + b) ["h" "l"] ["e" "o"]
=> ["he" "lo"]
*/
zipListsWith =
# Function to zip elements of both lists
f:
# First list
fst:
# Second list
snd:
zipListsWith = f: fst: snd:
genList
(n: f (elemAt fst n) (elemAt snd n)) (min (length fst) (length snd));
/* Merges two lists of the same size together. If the sizes aren't the same
the merging stops at the shortest.
Type: zipLists :: [a] -> [b] -> [{ fst :: a, snd :: b}]
Example:
zipLists [ 1 2 ] [ "a" "b" ]
=> [ { fst = 1; snd = "a"; } { fst = 2; snd = "b"; } ]
@@ -370,8 +271,6 @@ rec {
/* Reverse the order of the elements of a list.
Type: reverseList :: [a] -> [a]
Example:
reverseList [ "b" "o" "j" ]
@@ -385,7 +284,8 @@ rec {
`before a b == true` means that `b` depends on `a` (there's an
edge from `b` to `a`).
Example:
Examples:
listDfs true hasPrefix [ "/home/user" "other" "/" "/home" ]
== { minimal = "/"; # minimal element
visited = [ "/home/user" ]; # seen elements (in reverse order)
@@ -399,6 +299,7 @@ rec {
rest = [ "/home" "other" ]; # everything else
*/
listDfs = stopOnCycles: before: list:
let
dfs' = us: visited: rest:
@@ -423,7 +324,7 @@ rec {
`before a b == true` means that `b` should be after `a`
in the result.
Example:
Examples:
toposort hasPrefix [ "/home/user" "other" "/" "/home" ]
== { result = [ "/" "/home" "/home/user" "other" ]; }
@@ -438,6 +339,7 @@ rec {
toposort (a: b: a < b) [ 3 2 1 ] == { result = [ 1 2 3 ]; }
*/
toposort = before: list:
let
dfsthis = listDfs true before list;
@@ -483,83 +385,28 @@ rec {
if len < 2 then list
else (sort strictLess pivot.left) ++ [ first ] ++ (sort strictLess pivot.right));
/* Compare two lists element-by-element.
Example:
compareLists compare [] []
=> 0
compareLists compare [] [ "a" ]
=> -1
compareLists compare [ "a" ] []
=> 1
compareLists compare [ "a" "b" ] [ "a" "c" ]
=> 1
*/
compareLists = cmp: a: b:
if a == []
then if b == []
then 0
else -1
else if b == []
then 1
else let rel = cmp (head a) (head b); in
if rel == 0
then compareLists cmp (tail a) (tail b)
else rel;
/* Sort list using "Natural sorting".
Numeric portions of strings are sorted in numeric order.
Example:
naturalSort ["disk11" "disk8" "disk100" "disk9"]
=> ["disk8" "disk9" "disk11" "disk100"]
naturalSort ["10.46.133.149" "10.5.16.62" "10.54.16.25"]
=> ["10.5.16.62" "10.46.133.149" "10.54.16.25"]
naturalSort ["v0.2" "v0.15" "v0.0.9"]
=> [ "v0.0.9" "v0.2" "v0.15" ]
*/
naturalSort = lst:
let
vectorise = s: map (x: if isList x then toInt (head x) else x) (builtins.split "(0|[1-9][0-9]*)" s);
prepared = map (x: [ (vectorise x) x ]) lst; # remember vectorised version for O(n) regex splits
less = a: b: (compareLists compare (head a) (head b)) < 0;
in
map (x: elemAt x 1) (sort less prepared);
/* Return the first (at most) N elements of a list.
Type: take :: int -> [a] -> [a]
Example:
take 2 [ "a" "b" "c" "d" ]
=> [ "a" "b" ]
take 2 [ ]
=> [ ]
*/
take =
# Number of elements to take
count: sublist 0 count;
take = count: sublist 0 count;
/* Remove the first (at most) N elements of a list.
Type: drop :: int -> [a] -> [a]
Example:
drop 2 [ "a" "b" "c" "d" ]
=> [ "c" "d" ]
drop 2 [ ]
=> [ ]
*/
drop =
# Number of elements to drop
count:
# Input list
list: sublist count (length list) list;
drop = count: list: sublist count (length list) list;
/* Return a list consisting of at most `count` elements of `list`,
starting at index `start`.
Type: sublist :: int -> int -> [a] -> [a]
/* Return a list consisting of at most count elements of list,
starting at index start.
Example:
sublist 1 3 [ "a" "b" "c" "d" "e" ]
@@ -567,13 +414,7 @@ rec {
sublist 1 3 [ ]
=> [ ]
*/
sublist =
# Index at which to start the sublist
start:
# Number of elements to take
count:
# Input list
list:
sublist = start: count: list:
let len = length list; in
genList
(n: elemAt list (n + start))
@@ -583,47 +424,31 @@ rec {
/* Return the last element of a list.
This function throws an error if the list is empty.
Type: last :: [a] -> a
Example:
last [ 1 2 3 ]
=> 3
*/
last = list:
assert lib.assertMsg (list != []) "lists.last: list must not be empty!";
elemAt list (length list - 1);
assert list != []; elemAt list (length list - 1);
/* Return all elements but the last.
This function throws an error if the list is empty.
Type: init :: [a] -> [a]
/* Return all elements but the last
Example:
init [ 1 2 3 ]
=> [ 1 2 ]
*/
init = list:
assert lib.assertMsg (list != []) "lists.init: list must not be empty!";
take (length list - 1) list;
init = list: assert list != []; take (length list - 1) list;
/* Return the image of the cross product of some lists by a function.
Example:
crossLists (x:y: "${toString x}${toString y}") [[1 2] [3 4]]
=> [ "13" "14" "23" "24" ]
*/
/* FIXME(zimbatm) Not used anywhere
*/
crossLists = f: foldl (fs: args: concatMap (f: map f args) fs) [f];
/* Remove duplicate elements from the list. O(n^2) complexity.
Type: unique :: [a] -> [a]
Example:
unique [ 3 2 3 4 ]
=> [ 3 2 4 ]
*/

668
lib/maintainers.nix Normal file
View File

@@ -0,0 +1,668 @@
{ ...}:
/* List of NixOS maintainers. The format is:
handle = "Real Name <address@example.org>";
where <handle> is preferred to be your GitHub username (so it's easy
to ping a package @<handle>), and <Real Name> is your real name, not
a pseudonym. Please keep the list alphabetically sorted. */
{
a1russell = "Adam Russell <adamlr6+pub@gmail.com>";
aaronschif = "Aaron Schif <aaronschif@gmail.com>";
abaldeau = "Andreas Baldeau <andreas@baldeau.net>";
abbradar = "Nikolay Amiantov <ab@fmap.me>";
abigailbuccaneer = "Abigail Bunyan <abigailbuccaneer@gmail.com>";
aboseley = "Adam Boseley <adam.boseley@gmail.com>";
abuibrahim = "Ruslan Babayev <ruslan@babayev.com>";
acowley = "Anthony Cowley <acowley@gmail.com>";
adelbertc = "Adelbert Chang <adelbertc@gmail.com>";
adev = "Adrien Devresse <adev@adev.name>";
adisbladis = "Adam Hose <adis@blad.is>";
Adjective-Object = "Maxwell Huang-Hobbs <mhuan13@gmail.com>";
adnelson = "Allen Nelson <ithinkican@gmail.com>";
adolfogc = "Adolfo E. García Castro <adolfo.garcia.cr@gmail.com>";
aespinosa = "Allan Espinosa <allan.espinosa@outlook.com>";
aflatter = "Alexander Flatter <flatter@fastmail.fm>";
afldcr = "James Alexander Feldman-Crough <alex@fldcr.com>";
aforemny = "Alexander Foremny <alexanderforemny@googlemail.com>";
afranchuk = "Alex Franchuk <alex.franchuk@gmail.com>";
aherrmann = "Andreas Herrmann <andreash87@gmx.ch>";
ahmedtd = "Taahir Ahmed <ahmed.taahir@gmail.com>";
ak = "Alexander Kjeldaas <ak@formalprivacy.com>";
akaWolf = "Artjom Vejsel <akawolf0@gmail.com>";
akc = "Anders Claesson <akc@akc.is>";
algorith = "Dries Van Daele <dries_van_daele@telenet.be>";
alibabzo = "Alistair Bill <alistair.bill@gmail.com>";
all = "Nix Committers <nix-commits@lists.science.uu.nl>";
alunduil = "Alex Brandt <alunduil@alunduil.com>";
ambrop72 = "Ambroz Bizjak <ambrop7@gmail.com>";
amiddelk = "Arie Middelkoop <amiddelk@gmail.com>";
amiloradovsky = "Andrew Miloradovsky <miloradovsky@gmail.com>";
amorsillo = "Andrew Morsillo <andrew.morsillo@gmail.com>";
AndersonTorres = "Anderson Torres <torres.anderson.85@gmail.com>";
anderspapitto = "Anders Papitto <anderspapitto@gmail.com>";
andres = "Andres Loeh <ksnixos@andres-loeh.de>";
andrewrk = "Andrew Kelley <superjoe30@gmail.com>";
andsild = "Anders Sildnes <andsild@gmail.com>";
aneeshusa = "Aneesh Agrawal <aneeshusa@gmail.com>";
ankhers = "Justin Wood <justin.k.wood@gmail.com>";
antono = "Antono Vasiljev <self@antono.info>";
apeschar = "Albert Peschar <albert@peschar.net>";
apeyroux = "Alexandre Peyroux <alex@px.io>";
ardumont = "Antoine R. Dumont <eniotna.t@gmail.com>";
aristid = "Aristid Breitkreuz <aristidb@gmail.com>";
arobyn = "Alexei Robyn <shados@shados.net>";
artuuge = "Artur E. Ruuge <artuuge@gmail.com>";
ashalkhakov = "Artyom Shalkhakov <artyom.shalkhakov@gmail.com>";
aske = "Kirill Boltaev <aske@fmap.me>";
asppsa = "Alastair Pharo <asppsa@gmail.com>";
astsmtl = "Alexander Tsamutali <astsmtl@yandex.ru>";
asymmetric = "Lorenzo Manacorda <lorenzo@mailbox.org>";
aszlig = "aszlig <aszlig@redmoonstudios.org>";
auntie = "Jonathan Glines <auntieNeo@gmail.com>";
avnik = "Alexander V. Nikolaev <avn@avnik.info>";
aycanirican = "Aycan iRiCAN <iricanaycan@gmail.com>";
bachp = "Pascal Bach <pascal.bach@nextrem.ch>";
badi = "Badi' Abdul-Wahid <abdulwahidc@gmail.com>";
balajisivaraman = "Balaji Sivaraman<sivaraman.balaji@gmail.com>";
barrucadu = "Michael Walker <mike@barrucadu.co.uk>";
basvandijk = "Bas van Dijk <v.dijk.bas@gmail.com>";
Baughn = "Svein Ove Aas <sveina@gmail.com>";
bcarrell = "Brandon Carrell <brandoncarrell@gmail.com>";
bcdarwin = "Ben Darwin <bcdarwin@gmail.com>";
bdimcheff = "Brandon Dimcheff <brandon@dimcheff.com>";
benley = "Benjamin Staffin <benley@gmail.com>";
bennofs = "Benno Fünfstück <benno.fuenfstueck@gmail.com>";
benwbooth = "Ben Booth <benwbooth@gmail.com>";
berdario = "Dario Bertini <berdario@gmail.com>";
bergey = "Daniel Bergey <bergey@teallabs.org>";
bhipple = "Benjamin Hipple <bhipple@protonmail.com>";
binarin = "Alexey Lebedeff <binarin@binarin.ru>";
bjg = "Brian Gough <bjg@gnu.org>";
bjornfor = "Bjørn Forsman <bjorn.forsman@gmail.com>";
bluescreen303 = "Mathijs Kwik <mathijs@bluescreen303.nl>";
bobakker = "Bo Bakker <bobakk3r@gmail.com>";
bobvanderlinden = "Bob van der Linden <bobvanderlinden@gmail.com>";
bodil = "Bodil Stokke <nix@bodil.org>";
boothead = "Ben Ford <ben@perurbis.com>";
bosu = "Boris Sukholitko <boriss@gmail.com>";
bradediger = "Brad Ediger <brad@bradediger.com>";
bramd = "Bram Duvigneau <bram@bramd.nl>";
bstrik = "Berno Strik <dutchman55@gmx.com>";
bzizou = "Bruno Bzeznik <Bruno@bzizou.net>";
c0dehero = "CodeHero <codehero@nerdpol.ch>";
calbrecht = "Christian Albrecht <christian.albrecht@mayflower.de>";
calrama = "Moritz Maxeiner <moritz@ucworks.org>";
calvertvl = "Victor Calvert <calvertvl@gmail.com>";
campadrenalin = "Philip Horger <campadrenalin@gmail.com>";
canndrew = "Andrew Cann <shum@canndrew.org>";
carlsverre = "Carl Sverre <accounts@carlsverre.com>";
casey = "Casey Rodarmor <casey@rodarmor.net>";
caugner = "Claas Augner <nixos@caugner.de>";
cdepillabout = "Dennis Gosnell <cdep.illabout@gmail.com>";
cfouche = "Chaddaï Fouché <chaddai.fouche@gmail.com>";
changlinli = "Changlin Li <mail@changlinli.com>";
chaoflow = "Florian Friesdorf <flo@chaoflow.net>";
chattered = "Phil Scott <me@philscotted.com>";
choochootrain = "Hurshal Patel <hurshal@imap.cc>";
chris-martin = "Chris Martin <ch.martin@gmail.com>";
chrisjefferson = "Christopher Jefferson <chris@bubblescope.net>";
christopherpoole = "Christopher Mark Poole <mail@christopherpoole.net>";
ciil = "Simon Lackerbauer <simon@lackerbauer.com>";
ckampka = "Christian Kampka <christian@kampka.net>";
cko = "Christine Koppelt <christine.koppelt@gmail.com>";
cleverca22 = "Michael Bishop <cleverca22@gmail.com>";
cmcdragonkai = "Roger Qiu <roger.qiu@matrix.ai>";
cmfwyp = "cmfwyp <cmfwyp@riseup.net>";
coconnor = "Corey O'Connor <coreyoconnor@gmail.com>";
codsl = "codsl <codsl@riseup.net>";
codyopel = "Cody Opel <codyopel@gmail.com>";
colemickens = "Cole Mickens <cole.mickens@gmail.com>";
colescott = "Cole Scott <colescottsf@gmail.com>";
copumpkin = "Dan Peebles <pumpkingod@gmail.com>";
corngood = "David McFarland <corngood@gmail.com>";
coroa = "Jonas Hörsch <jonas@chaoflow.net>";
couchemar = "Andrey Pavlov <couchemar@yandex.ru>";
cpages = "Carles Pagès <page@ruiec.cat>";
cransom = "Casey Ransom <cransom@hubns.net>";
cryptix = "Henry Bubert <cryptix@riseup.net>";
CrystalGamma = "Jona Stubbe <nixos@crystalgamma.de>";
cstrahan = "Charles Strahan <charles@cstrahan.com>";
cwoac = "Oliver Matthews <oliver@codersoffortune.net>";
DamienCassou = "Damien Cassou <damien@cassou.me>";
danbst = "Danylo Hlynskyi <abcz2.uprola@gmail.com>";
dancek = "Hannu Hartikainen <hannu.hartikainen@gmail.com>";
danielfullmer = "Daniel Fullmer <danielrf12@gmail.com>";
dasuxullebt = "Christoph-Simon Senjak <christoph.senjak@googlemail.com>";
davidak = "David Kleuker <post@davidak.de>";
davidrusu = "David Rusu <davidrusu.me@gmail.com>";
davorb = "Davor Babic <davor@davor.se>";
dbohdan = "Danyil Bohdan <danyil.bohdan@gmail.com>";
dbrock = "Daniel Brockman <daniel@brockman.se>";
deepfire = "Kosyrev Serge <_deepfire@feelingofgreen.ru>";
demin-dmitriy = "Dmitriy Demin <demindf@gmail.com>";
derchris = "Christian Gerbrandt <derchris@me.com>";
DerGuteMoritz = "Moritz Heidkamp <moritz@twoticketsplease.de>";
dermetfan = "Robin Stumm <serverkorken@gmail.com>";
DerTim1 = "Tim Digel <tim.digel@active-group.de>";
desiderius = "Didier J. Devroye <didier@devroye.name>";
devhell = "devhell <\"^\"@regexmail.net>";
dezgeg = "Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>";
dfordivam = "Divam <dfordivam+nixpkgs@gmail.com>";
dfoxfranke = "Daniel Fox Franke <dfoxfranke@gmail.com>";
dgonyeo = "Derek Gonyeo <derek@gonyeo.com>";
dipinhora = "Dipin Hora <dipinhora+github@gmail.com>";
disassembler = "Samuel Leathers <disasm@gmail.com>";
dmalikov = "Dmitry Malikov <malikov.d.y@gmail.com>";
DmitryTsygankov = "Dmitry Tsygankov <dmitry.tsygankov@gmail.com>";
dmjio = "David Johnson <djohnson.m@gmail.com>";
dochang = "Desmond O. Chang <dochang@gmail.com>";
domenkozar = "Domen Kozar <domen@dev.si>";
dotlambda = "Robert Schütz <rschuetz17@gmail.com>";
doublec = "Chris Double <chris.double@double.co.nz>";
dpaetzel = "David Pätzel <david.a.paetzel@gmail.com>";
drets = "Dmytro Rets <dmitryrets@gmail.com>";
drewkett = "Andrew Burkett <burkett.andrew@gmail.com>";
dsferruzza = "David Sferruzza <david.sferruzza@gmail.com>";
dtzWill = "Will Dietz <nix@wdtz.org>";
dywedir = "Vladyslav M. <dywedir@protonmail.ch>";
e-user = "Alexander Kahl <nixos@sodosopa.io>";
ebzzry = "Rommel Martinez <ebzzry@gmail.com>";
edanaher = "Evan Danaher <nixos@edanaher.net>";
edef = "edef <edef@edef.eu>";
ederoyd46 = "Matthew Brown <matt@ederoyd.co.uk>";
eduarrrd = "Eduard Bachmakov <e.bachmakov@gmail.com>";
edwtjo = "Edward Tjörnhammar <ed@cflags.cc>";
eelco = "Eelco Dolstra <eelco.dolstra@logicblox.com>";
ehegnes = "Eric Hegnes <eric.hegnes@gmail.com>";
ehmry = "Emery Hemingway <emery@vfemail.net>";
eikek = "Eike Kettner <eike.kettner@posteo.de>";
ekleog = "Leo Gaspard <leo@gaspard.io>";
elasticdog = "Aaron Bull Schaefer <aaron@elasticdog.com>";
eleanor = "Dejan Lukan <dejan@proteansec.com>";
elijahcaine = "Elijah Caine <elijahcainemv@gmail.com>";
elitak = "Eric Litak <elitak@gmail.com>";
ellis = "Ellis Whitehead <nixos@ellisw.net>";
eperuffo = "Emanuele Peruffo <info@emanueleperuffo.com>";
epitrochoid = "Mabry Cervin <mpcervin@uncg.edu>";
ericbmerritt = "Eric Merritt <eric@afiniate.com>";
ericsagnes = "Eric Sagnes <eric.sagnes@gmail.com>";
erikryb = "Erik Rybakken <erik.rybakken@math.ntnu.no>";
ertes = "Ertugrul Söylemez <esz@posteo.de>";
ethercrow = "Dmitry Ivanov <ethercrow@gmail.com>";
etu = "Elis Hirwing <elis@hirwing.se>";
exi = "Reno Reckling <nixos@reckling.org>";
exlevan = "Alexey Levan <exlevan@gmail.com>";
expipiplus1 = "Joe Hermaszewski <nix@monoid.al>";
fadenb = "Tristan Helmich <tristan.helmich+nixos@gmail.com>";
fare = "Francois-Rene Rideau <fahree@gmail.com>";
falsifian = "James Cook <james.cook@utoronto.ca>";
florianjacob = "Florian Jacob <projects+nixos@florianjacob.de>";
flosse = "Markus Kohlhase <mail@markus-kohlhase.de>";
fluffynukeit = "Daniel Austin <dan@fluffynukeit.com>";
fmthoma = "Franz Thoma <f.m.thoma@googlemail.com>";
forkk = "Andrew Okin <forkk@forkk.net>";
fornever = "Friedrich von Never <friedrich@fornever.me>";
fpletz = "Franz Pletz <fpletz@fnordicwalking.de>";
fps = "Florian Paul Schmidt <mista.tapas@gmx.net>";
fridh = "Frederik Rietdijk <fridh@fridh.nl>";
frlan = "Frank Lanitz <frank@frank.uvena.de>";
fro_ozen = "fro_ozen <fro_ozen@gmx.de>";
ftrvxmtrx = "Siarhei Zirukin <ftrvxmtrx@gmail.com>";
funfunctor = "Edward O'Callaghan <eocallaghan@alterapraxis.com>";
fuuzetsu = "Mateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk>";
fuzzy-id = "Thomas Bach <hacking+nixos@babibo.de>";
fxfactorial = "Edgar Aroutiounian <edgar.factorial@gmail.com>";
gabesoft = "Gabriel Adomnicai <gabesoft@gmail.com>";
gal_bolle = "Florent Becker <florent.becker@ens-lyon.org>";
garbas = "Rok Garbas <rok@garbas.si>";
garrison = "Jim Garrison <jim@garrison.cc>";
gavin = "Gavin Rogers <gavin@praxeology.co.uk>";
gebner = "Gabriel Ebner <gebner@gebner.org>";
geistesk = "Alvar Penning <post@0x21.biz>";
georgewhewell = "George Whewell <georgerw@gmail.com>";
gilligan = "Tobias Pflug <tobias.pflug@gmail.com>";
giogadi = "Luis G. Torres <lgtorres42@gmail.com>";
gleber = "Gleb Peregud <gleber.p@gmail.com>";
glenns = "Glenn Searby <glenn.searby@gmail.com>";
globin = "Robin Gloster <mail@glob.in>";
gnidorah = "Alex Ivanov <yourbestfriend@opmbx.org>";
goibhniu = "Cillian de Róiste <cillian.deroiste@gmail.com>";
Gonzih = "Max Gonzih <gonzih@gmail.com>";
goodrone = "Andrew Trachenko <goodrone@gmail.com>";
gpyh = "Yacine Hmito <yacine.hmito@gmail.com>";
grahamc = "Graham Christensen <graham@grahamc.com>";
grburst = "Julius Elias <grburst@openmailbox.org>";
gridaphobe = "Eric Seidel <eric@seidel.io>";
guibert = "David Guibert <david.guibert@gmail.com>";
guillaumekoenig = "Guillaume Koenig <guillaume.edward.koenig@gmail.com>";
guyonvarch = "Joris Guyonvarch <joris@guyonvarch.me>";
hakuch = "Jesse Haber-Kucharsky <hakuch@gmail.com>";
hamhut1066 = "Hamish Hutchings <github@hamhut1066.com>";
havvy = "Ryan Scheel <ryan.havvy@gmail.com>";
hbunke = "Hendrik Bunke <bunke.hendrik@gmail.com>";
hce = "Hans-Christian Esperer <hc@hcesperer.org>";
hectorj = "Hector Jusforgues <hector.jusforgues+nixos@gmail.com>";
heel = "Sergii Paryzhskyi <parizhskiy@gmail.com>";
henrytill = "Henry Till <henrytill@gmail.com>";
hhm = "hhm <heehooman+nixpkgs@gmail.com>";
hinton = "Tom Hinton <t@larkery.com>";
hodapp = "Chris Hodapp <hodapp87@gmail.com>";
hrdinka = "Christoph Hrdinka <c.nix@hrdinka.at>";
htr = "Hugo Tavares Reis <hugo@linux.com>";
iand675 = "Ian Duncan <ian@iankduncan.com>";
ianwookim = "Ian-Woo Kim <ianwookim@gmail.com>";
igsha = "Igor Sharonov <igor.sharonov@gmail.com>";
ikervagyok = "Balázs Lengyel <ikervagyok@gmail.com>";
infinisil = "Silvan Mosberger <infinisil@icloud.com>";
ironpinguin = "Michele Catalano <michele@catalano.de>";
ivan-tkatchev = "Ivan Tkatchev <tkatchev@gmail.com>";
j-keck = "Jürgen Keck <jhyphenkeck@gmail.com>";
jagajaga = "Arseniy Seroka <ars.seroka@gmail.com>";
jammerful = "jammerful <jammerful@gmail.com>";
jansol = "Jan Solanti <jan.solanti@paivola.fi>";
javaguirre = "Javier Aguirre <contacto@javaguirre.net>";
jb55 = "William Casarin <jb55@jb55.com>";
jbedo = "Justin Bedő <cu@cua0.org>";
jcumming = "Jack Cummings <jack@mudshark.org>";
jdagilliland = "Jason Gilliland <jdagilliland@gmail.com>";
jefdaj = "Jeffrey David Johnson <jefdaj@gmail.com>";
jensbin = "Jens Binkert <jensbin@protonmail.com>";
jerith666 = "Matt McHenry <github@matt.mchenryfamily.org>";
jfb = "James Felix Black <james@yamtime.com>";
jfrankenau = "Johannes Frankenau <johannes@frankenau.net>";
jgeerds = "Jascha Geerds <jascha@jgeerds.name>";
jgertm = "Tim Jaeger <jger.tm@gmail.com>";
jgillich = "Jakob Gillich <jakob@gillich.me>";
jhhuh = "Ji-Haeng Huh <jhhuh.note@gmail.com>";
jirkamarsik = "Jirka Marsik <jiri.marsik89@gmail.com>";
jlesquembre = "José Luis Lafuente <jl@lafuente.me>";
jluttine = "Jaakko Luttinen <jaakko.luttinen@iki.fi>";
joachifm = "Joachim Fasting <joachifm@fastmail.fm>";
joamaki = "Jussi Maki <joamaki@gmail.com>";
joelmo = "Joel Moberg <joel.moberg@gmail.com>";
joelteon = "Joel Taylor <me@joelt.io>";
johbo = "Johannes Bornhold <johannes@bornhold.name>";
johnramsden = "John Ramsden <johnramsden@riseup.net>";
joko = "Ioannis Koutras <ioannis.koutras@gmail.com>";
jonafato = "Jon Banafato <jon@jonafato.com>";
jpbernardy = "Jean-Philippe Bernardy <jeanphilippe.bernardy@gmail.com>";
jpierre03 = "Jean-Pierre PRUNARET <nix@prunetwork.fr>";
jpotier = "Martin Potier <jpo.contributes.to.nixos@marvid.fr>";
jraygauthier = "Raymond Gauthier <jraygauthier@gmail.com>";
jtojnar = "Jan Tojnar <jtojnar@gmail.com>";
juliendehos = "Julien Dehos <dehos@lisic.univ-littoral.fr>";
jwiegley = "John Wiegley <johnw@newartisans.com>";
jwilberding = "Jordan Wilberding <jwilberding@afiniate.com>";
jzellner = "Jeff Zellner <jeffz@eml.cc>";
kaiha = "Kai Harries <kai.harries@gmail.com>";
kamilchm = "Kamil Chmielewski <kamil.chm@gmail.com>";
kampfschlaefer = "Arnold Krille <arnold@arnoldarts.de>";
kentjames = "James Kent <jameschristopherkent@gmail.com";
kevincox = "Kevin Cox <kevincox@kevincox.ca>";
khumba = "Bryan Gardiner <bog@khumba.net>";
KibaFox = "Kiba Fox <kiba.fox@foxypossibilities.com>";
kierdavis = "Kier Davis <kierdavis@gmail.com>";
kiloreux = "Kiloreux Emperex <kiloreux@gmail.com>";
kkallio = "Karn Kallio <tierpluspluslists@gmail.com>";
knedlsepp = "Josef Kemetmüller <josef.kemetmueller@gmail.com>";
konimex = "Muhammad Herdiansyah <herdiansyah@netc.eu>";
koral = "Koral <koral@mailoo.org>";
kovirobi = "Kovacsics Robert <kovirobi@gmail.com>";
kragniz = "Louis Taylor <louis@kragniz.eu>";
kristoff3r = "Kristoffer Søholm <k.soeholm@gmail.com>";
ktosiek = "Tomasz Kontusz <tomasz.kontusz@gmail.com>";
lassulus = "Lassulus <lassulus@gmail.com>";
layus = "Guillaume Maudoux <layus.on@gmail.com>";
ldesgoui = "Lucas Desgouilles <ldesgoui@gmail.com>";
league = "Christopher League <league@contrapunctus.net>";
lebastr = "Alexander Lebedev <lebastr@gmail.com>";
leemachin = "Lee Machin <me@mrl.ee>";
leenaars = "Michiel Leenaars <ml.software@leenaa.rs>";
leonardoce = "Leonardo Cecchi <leonardo.cecchi@gmail.com>";
lethalman = "Luca Bruno <lucabru@src.gnome.org>";
lewo = "Antoine Eiche <lewo@abesis.fr>";
lheckemann = "Linus Heckemann <git@sphalerite.org>";
lhvwb = "Nathaniel Baxter <nathaniel.baxter@gmail.com>";
lihop = "Leroy Hopson <nixos@leroy.geek.nz>";
linquize = "Linquize <linquize@yahoo.com.hk>";
linus = "Linus Arver <linusarver@gmail.com>";
lluchs = "Lukas Werling <lukas.werling@gmail.com>";
lnl7 = "Daiderd Jordan <daiderd@gmail.com>";
loskutov = "Ignat Loskutov <ignat.loskutov@gmail.com>";
lovek323 = "Jason O'Conal <jason@oconal.id.au>";
lowfatcomputing = "Andreas Wagner <andreas.wagner@lowfatcomputing.org>";
lsix = "Lancelot SIX <lsix@lancelotsix.com>";
lucas8 = "Luc Chabassier <luc.linux@mailoo.org>";
ludo = "Ludovic Courtès <ludo@gnu.org>";
lufia = "Kyohei Kadota <lufia@lufia.org>";
luispedro = "Luis Pedro Coelho <luis@luispedro.org>";
lukego = "Luke Gorrie <luke@snabb.co>";
lw = "Sergey Sofeychuk <lw@fmap.me>";
lyt = "Tim Liou <wheatdoge@gmail.com>";
m3tti = "Mathaeus Sander <mathaeus.peter.sander@gmail.com>";
ma27 = "Maximilian Bosch <maximilian@mbosch.me>";
madjar = "Georges Dubus <georges.dubus@compiletoi.net>";
magnetophon = "Bart Brouns <bart@magnetophon.nl>";
mahe = "Matthias Herrmann <matthias.mh.herrmann@gmail.com>";
makefu = "Felix Richter <makefu@syntax-fehler.de>";
malyn = "Michael Alyn Miller <malyn@strangeGizmo.com>";
manveru = "Michael Fellinger <m.fellinger@gmail.com>";
marcweber = "Marc Weber <marco-oweber@gmx.de>";
markus1189 = "Markus Hauck <markus1189@gmail.com>";
markWot = "Markus Wotringer <markus@wotringer.de>";
martijnvermaat = "Martijn Vermaat <martijn@vermaat.name>";
martingms = "Martin Gammelsæter <martin@mg.am>";
matejc = "Matej Cotman <cotman.matej@gmail.com>";
mathnerd314 = "Mathnerd314 <mathnerd314.gph+hs@gmail.com>";
matthewbauer = "Matthew Bauer <mjbauer95@gmail.com>";
matthiasbeyer = "Matthias Beyer <mail@beyermatthias.de>";
maurer = "Matthew Maurer <matthew.r.maurer+nix@gmail.com>";
mbakke = "Marius Bakke <mbakke@fastmail.com>";
mbbx6spp = "Susan Potter <me@susanpotter.net>";
mbe = "Brandon Edens <brandonedens@gmail.com>";
mboes = "Mathieu Boespflug <mboes@tweag.net>";
mbrgm = "Marius Bergmann <marius@yeai.de>";
mcmtroffaes = "Matthias C. M. Troffaes <matthias.troffaes@gmail.com>";
mdaiter = "Matthew S. Daiter <mdaiter8121@gmail.com>";
meditans = "Carlo Nucera <meditans@gmail.com>";
meisternu = "Matt Miemiec <meister@krutt.org>";
metabar = "Celine Mercier <softs@metabarcoding.org>";
mguentner = "Maximilian Güntner <code@klandest.in>";
mic92 = "Jörg Thalheim <joerg@thalheim.io>";
michaelpj = "Michael Peyton Jones <michaelpj@gmail.com>";
michalrus = "Michal Rus <m@michalrus.com>";
michelk = "Michel Kuhlmann <michel@kuhlmanns.info>";
midchildan = "midchildan <midchildan+nix@gmail.com>";
mikefaille = "Michaël Faille <michael@faille.io>";
miltador = "Vasiliy Solovey <miltador@yandex.ua>";
mimadrid = "Miguel Madrid <mimadrid@ucm.es>";
mingchuan = "Ming Chuan <ming@culpring.com>";
mirdhyn = "Merlin Gaillard <mirdhyn@gmail.com>";
mirrexagon = "Andrew Abbott <mirrexagon@mirrexagon.com>";
mjanczyk = "Marcin Janczyk <m@dragonvr.pl>";
mlieberman85 = "Michael Lieberman <mlieberman85@gmail.com>";
modulistic = "Pablo Costa <modulistic@gmail.com>";
mog = "Matthew O'Gorman <mog-lists@rldn.net>";
montag451 = "montag451 <montag451@laposte.net>";
moosingin3space = "Nathan Moos <moosingin3space@gmail.com>";
moretea = "Maarten Hoogendoorn <maarten@moretea.nl>";
mornfall = "Petr Ročkai <me@mornfall.net>";
MostAwesomeDude = "Corbin Simpson <cds@corbinsimpson.com>";
mounium = "Katona László <muoniurn@gmail.com>";
MP2E = "Cray Elliott <MP2E@archlinux.us>";
mpcsh = "Mark Cohen <m@mpc.sh>";
mpscholten = "Marc Scholten <marc@mpscholten.de>";
mpsyco = "Francis St-Amour <fr.st-amour@gmail.com>";
msackman = "Matthew Sackman <matthew@wellquite.org>";
mschristiansen = "Mikkel Christiansen <mikkel@rheosystems.com>";
msteen = "Matthijs Steen <emailmatthijs@gmail.com>";
mt-caret = "Masayuki Takeda <mtakeda.enigsol@gmail.com>";
mtreskin = "Max Treskin <zerthurd@gmail.com>";
mudri = "James Wood <lamudri@gmail.com>";
muflax = "Stefan Dorn <mail@muflax.com>";
myrl = "Myrl Hex <myrl.0xf@gmail.com>";
namore = "Roman Naumann <namor@hemio.de>";
nand0p = "Fernando Jose Pando <nando@hex7.com>";
Nate-Devv = "Nathan Moore <natedevv@gmail.com>";
nathan-gs = "Nathan Bijnens <nathan@nathan.gs>";
nckx = "Tobias Geerinckx-Rice <github@tobias.gr>";
ndowens = "Nathan Owens <ndowens04@gmail.com>";
neeasade = "Nathan Isom <nathanisom27@gmail.com>";
nequissimus = "Tim Steinbach <tim@nequissimus.com>";
nfjinjing = "Jinjing Wang <nfjinjing@gmail.com>";
nh2 = "Niklas Hambüchen <mail@nh2.me>";
nhooyr = "Anmol Sethi <anmol@aubble.com>";
nickhu = "Nick Hu <me@nickhu.co.uk>";
nicknovitski = "Nick Novitski <nixpkgs@nicknovitski.com>";
nico202 = "Nicolò Balzarotti <anothersms@gmail.com>";
NikolaMandic = "Ratko Mladic <nikola@mandic.email>";
nixy = "Andrew R. M. <andrewmiller237@gmail.com>";
nocoolnametom = "Tom Doggett <nocoolnametom@gmail.com>";
notthemessiah = "Brian Cohen <brian.cohen.88@gmail.com>";
np = "Nicolas Pouillard <np.nix@nicolaspouillard.fr>";
nslqqq = "Nikita Mikhailov <nslqqq@gmail.com>";
nthorne = "Niklas Thörne <notrupertthorne@gmail.com>";
nyarly = "Judson Lester <nyarly@gmail.com>";
obadz = "obadz <obadz-nixos@obadz.com>";
ocharles = "Oliver Charles <ollie@ocharles.org.uk>";
odi = "Oliver Dunkl <oliver.dunkl@gmail.com>";
offline = "Jaka Hudoklin <jakahudoklin@gmail.com>";
oida = "oida <oida@posteo.de>";
okasu = "Okasu <oka.sux@gmail.com>";
olcai = "Erik Timan <dev@timan.info>";
olejorgenb = "Ole Jørgen Brønner <olejorgenb@yahoo.no>";
olynch = "Owen Lynch <owen@olynch.me>";
orbekk = "KJ Ørbekk <kjetil.orbekk@gmail.com>";
orbitz = "Malcolm Matalka <mmatalka@gmail.com>";
orivej = "Orivej Desh <orivej@gmx.fr>";
osener = "Ozan Sener <ozan@ozansener.com>";
otwieracz = "Slawomir Gonet <slawek@otwiera.cz>";
oxij = "Jan Malakhovski <oxij@oxij.org>";
paholg = "Paho Lurie-Gregg <paho@paholg.com>";
pakhfn = "Fedor Pakhomov <pakhfn@gmail.com>";
palo = "Ingolf Wanger <palipalo9@googlemail.com>";
panaeon = "Vitalii Voloshyn <vitalii.voloshyn@gmail.com";
paperdigits = "Mica Semrick <mica@silentumbrella.com>";
pashev = "Igor Pashev <pashev.igor@gmail.com>";
patternspandemic = "Brad Christensen <patternspandemic@live.com>";
pawelpacana = "Paweł Pacana <pawel.pacana@gmail.com>";
pbogdan = "Piotr Bogdan <ppbogdan@gmail.com>";
periklis = "theopompos@gmail.com";
pesterhazy = "Paulus Esterhazy <pesterhazy@gmail.com>";
peterhoeg = "Peter Hoeg <peter@hoeg.com>";
peti = "Peter Simons <simons@cryp.to>";
philandstuff = "Philip Potter <philip.g.potter@gmail.com>";
phile314 = "Philipp Hausmann <nix@314.ch>";
Phlogistique = "Noé Rubinstein <noe.rubinstein@gmail.com>";
phreedom = "Evgeny Egorochkin <phreedom@yandex.ru>";
phunehehe = "Hoang Xuan Phu <phunehehe@gmail.com>";
pierrer = "Pierre Radermecker <pierrer@pi3r.be>";
pierron = "Nicolas B. Pierron <nixos@nbp.name>";
piotr = "Piotr Pietraszkiewicz <ppietrasa@gmail.com>";
pjbarnoy = "Perry Barnoy <pjbarnoy@gmail.com>";
pjones = "Peter Jones <pjones@devalot.com>";
pkmx = "Chih-Mao Chen <pkmx.tw@gmail.com>";
plcplc = "Philip Lykke Carlsen <plcplc@gmail.com>";
plumps = "Maksim Bronsky <maks.bronsky@web.de";
pmahoney = "Patrick Mahoney <pat@polycrystal.org>";
pmiddend = "Philipp Middendorf <pmidden@secure.mailbox.org>";
polyrod = "Maurizio Di Pietro <dc1mdp@gmail.com>";
pradeepchhetri = "Pradeep Chhetri <pradeep.chhetri89@gmail.com>";
prikhi = "Pavan Rikhi <pavan.rikhi@gmail.com>";
primeos = "Michael Weiss <dev.primeos@gmail.com>";
profpatsch = "Profpatsch <mail@profpatsch.de>";
proglodyte = "Proglodyte <proglodyte23@gmail.com>";
pshendry = "Paul Hendry <paul@pshendry.com>";
psibi = "Sibi <sibi@psibi.in>";
pstn = "Philipp Steinpaß <philipp@xndr.de>";
pSub = "Pascal Wittmann <mail@pascal-wittmann.de>";
puffnfresh = "Brian McKenna <brian@brianmckenna.org>";
pxc = "Patrick Callahan <patrick.callahan@latitudeengineering.com>";
qknight = "Joachim Schiele <js@lastlog.de>";
ragge = "Ragnar Dahlen <r.dahlen@gmail.com>";
ralith = "Benjamin Saunders <ben.e.saunders@gmail.com>";
ramkromberg = "Ram Kromberg <ramkromberg@mail.com>";
rardiol = "Ricardo Ardissone <ricardo.ardissone@gmail.com>";
rasendubi = "Alexey Shmalko <rasen.dubi@gmail.com>";
raskin = "Michael Raskin <7c6f434c@mail.ru>";
rbasso = "Rafael Basso <rbasso@sharpgeeks.net>";
redbaron = "Maxim Ivanov <ivanov.maxim@gmail.com>";
redvers = "Redvers Davies <red@infect.me>";
refnil = "Martin Lavoie <broemartino@gmail.com>";
regnat = "Théophane Hufschmitt <regnat@regnat.ovh>";
relrod = "Ricky Elrod <ricky@elrod.me>";
renzo = "Renzo Carbonara <renzocarbonara@gmail.com>";
retrry = "Tadas Barzdžius <retrry@gmail.com>";
rht = "rht <rhtbot@protonmail.com>";
richardipsum = "Richard Ipsum <richardipsum@fastmail.co.uk>";
rick68 = "Wei-Ming Yang <rick68@gmail.com>";
rickynils = "Rickard Nilsson <rickynils@gmail.com>";
ris = "Robert Scott <code@humanleg.org.uk>";
rlupton20 = "Richard Lupton <richard.lupton@gmail.com>";
rnhmjoj = "Michele Guerini Rocco <micheleguerinirocco@me.com>";
rob = "Rob Vermaas <rob.vermaas@gmail.com>";
robberer = "Longrin Wischnewski <robberer@freakmail.de>";
robbinch = "Robbin C. <robbinch33@gmail.com>";
roberth = "Robert Hensing <nixpkgs@roberthensing.nl>";
robgssp = "Rob Glossop <robgssp@gmail.com>";
roblabla = "Robin Lambertz <robinlambertz+dev@gmail.com>";
roconnor = "Russell O'Connor <roconnor@theorem.ca>";
romildo = "José Romildo Malaquias <malaquias@gmail.com>";
rongcuid = "Rongcui Dong <rongcuid@outlook.com>";
rszibele = "Richard Szibele <richard@szibele.com>";
rtreffer = "Rene Treffer <treffer+nixos@measite.de>";
rushmorem = "Rushmore Mushambi <rushmore@webenchanter.com>";
rvl = "Rodney Lorrimar <dev+nix@rodney.id.au>";
rvlander = "Gaëtan André <rvlander@gaetanandre.eu>";
rvolosatovs = "Roman Volosatovs <rvolosatovs@riseup.net";
ryanartecona = "Ryan Artecona <ryanartecona@gmail.com>";
ryansydnor = "Ryan Sydnor <ryan.t.sydnor@gmail.com>";
ryantm = "Ryan Mulligan <ryan@ryantm.com>";
rybern = "Ryan Bernstein <ryan.bernstein@columbia.edu>";
rycee = "Robert Helgesson <robert@rycee.net>";
ryneeverett = "Ryne Everett <ryneeverett@gmail.com>";
rzetterberg = "Richard Zetterberg <richard.zetterberg@gmail.com>";
s1lvester = "Markus Silvester <s1lvester@bockhacker.me>";
samuelrivas = "Samuel Rivas <samuelrivas@gmail.com>";
sander = "Sander van der Burg <s.vanderburg@tudelft.nl>";
sargon = "Daniel Ehlers <danielehlers@mindeye.net>";
sauyon = "Sauyon Lee <s@uyon.co>";
schmitthenner = "Fabian Schmitthenner <development@schmitthenner.eu>";
schneefux = "schneefux <schneefux+nixos_pkg@schneefux.xyz>";
schristo = "Scott Christopher <schristopher@konputa.com>";
scolobb = "Sergiu Ivanov <sivanov@colimite.fr>";
sdll = "Sasha Illarionov <sasha.delly@gmail.com>";
sepi = "Raffael Mancini <raffael@mancini.lu>";
seppeljordan = "Sebastian Jordan <sebastian.jordan.mail@googlemail.com>";
shanemikel = "Shane Pearlman <shanemikel1@gmail.com>";
shawndellysse = "Shawn Dellysse <sdellysse@gmail.com>";
sheenobu = "Sheena Artrip <sheena.artrip@gmail.com>";
sheganinans = "Aistis Raulinaitis <sheganinans@gmail.com>";
shell = "Shell Turner <cam.turn@gmail.com>";
shlevy = "Shea Levy <shea@shealevy.com>";
siddharthist = "Langston Barrett <langston.barrett@gmail.com>";
sigma = "Yann Hodique <yann.hodique@gmail.com>";
simonvandel = "Simon Vandel Sillesen <simon.vandel@gmail.com>";
sjagoe = "Simon Jagoe <simon@simonjagoe.com>";
sjmackenzie = "Stewart Mackenzie <setori88@gmail.com>";
sjourdois = "Stéphane kwisatz Jourdois <sjourdois@gmail.com>";
skeidel = "Sven Keidel <svenkeidel@gmail.com>";
skrzyp = "Jakub Skrzypnik <jot.skrzyp@gmail.com>";
sleexyz = "Sean Lee <freshdried@gmail.com>";
smironov = "Sergey Mironov <grrwlf@gmail.com>";
snyh = "Xia Bin <snyh@snyh.org>";
solson = "Scott Olson <scott@solson.me>";
sorpaas = "Wei Tang <hi@that.world>";
spacefrogg = "Michael Raitza <spacefrogg-nixos@meterriblecrew.net>";
spencerjanssen = "Spencer Janssen <spencerjanssen@gmail.com>";
spinus = "Tomasz Czyż <tomasz.czyz@gmail.com>";
sprock = "Roger Mason <rmason@mun.ca>";
spwhitt = "Spencer Whitt <sw@swhitt.me>";
srhb = "Sarah Brofeldt <sbrofeldt@gmail.com>";
SShrike = "Severen Redwood <severen@shrike.me>";
stephenmw = "Stephen Weinberg <stephen@q5comm.com>";
sternenseemann = "Lukas Epple <post@lukasepple.de>";
stesie = "Stefan Siegl <stesie@brokenpipe.de>";
steveej = "Stefan Junker <mail@stefanjunker.de>";
SuprDewd = "Bjarki Ágúst Guðmundsson <suprdewd@gmail.com>";
swarren83 = "Shawn Warren <shawn.w.warren@gmail.com>";
swflint = "Samuel W. Flint <swflint@flintfam.org>";
swistak35 = "Rafał Łasocha <me@swistak35.com>";
szczyp = "Szczyp <qb@szczyp.com>";
sztupi = "Attila Sztupak <attila.sztupak@gmail.com>";
taeer = "Taeer Bar-Yam <taeer@necsi.edu>";
tailhook = "Paul Colomiets <paul@colomiets.name>";
takikawa = "Asumu Takikawa <asumu@igalia.com>";
taktoa = "Remy Goldschmidt <taktoa@gmail.com>";
taku0 = "Takuo Yonezawa <mxxouy6x3m_github@tatapa.org>";
tari = "Peter Marheine <peter@taricorp.net>";
tavyc = "Octavian Cerna <octavian.cerna@gmail.com>";
ltavard = "Laure Tavard <laure.tavard@univ-grenoble-alpes.fr>";
teh = "Tom Hunger <tehunger@gmail.com>";
teto = "Matthieu Coudron <mcoudron@hotmail.com>";
telotortium = "Robert Irelan <rirelan@gmail.com>";
thall = "Niclas Thall <niclas.thall@gmail.com>";
thammers = "Tobias Hammerschmidt <jawr@gmx.de>";
the-kenny = "Moritz Ulrich <moritz@tarn-vedra.de>";
theuni = "Christian Theune <ct@flyingcircus.io>";
thoughtpolice = "Austin Seipp <aseipp@pobox.com>";
timbertson = "Tim Cuthbertson <tim@gfxmonk.net>";
titanous = "Jonathan Rudenberg <jonathan@titanous.com>";
tnias = "Philipp Bartsch <phil@grmr.de>";
tohl = "Tomas Hlavaty <tom@logand.com>";
tokudan = "Daniel Frank <git@danielfrank.net>";
tomberek = "Thomas Bereknyei <tomberek@gmail.com>";
tomsmeets = "Tom Smeets <tom@tsmeets.nl>";
travisbhartwell = "Travis B. Hartwell <nafai@travishartwell.net>";
trevorj = "Trevor Joynson <nix@trevor.joynson.io>";
trino = "Hubert Mühlhans <muehlhans.hubert@ekodia.de>";
tstrobel = "Thomas Strobel <4ZKTUB6TEP74PYJOPWIR013S2AV29YUBW5F9ZH2F4D5UMJUJ6S@hash.domains>";
ttuegel = "Thomas Tuegel <ttuegel@mailbox.org>";
tv = "Tomislav Viljetić <tv@shackspace.de>";
tvestelind = "Tomas Vestelind <tomas.vestelind@fripost.org>";
tvorog = "Marsel Zaripov <marszaripov@gmail.com>";
tweber = "Thorsten Weber <tw+nixpkgs@360vier.de>";
twey = "James Twey Kay <twey@twey.co.uk>";
uralbash = "Svintsov Dmitry <root@uralbash.ru>";
utdemir = "Utku Demir <me@utdemir.com>";
#urkud = "Yury G. Kudryashov <urkud+nix@ya.ru>"; inactive since 2012
uwap = "uwap <me@uwap.name>";
vaibhavsagar = "Vaibhav Sagar <vaibhavsagar@gmail.com>";
vandenoever = "Jos van den Oever <jos@vandenoever.info>";
vanschelven = "Klaas van Schelven <klaas@vanschelven.com>";
vanzef = "Ivan Solyankin <vanzef@gmail.com>";
vbgl = "Vincent Laporte <Vincent.Laporte@gmail.com>";
vbmithr = "Vincent Bernardoff <vb@luminar.eu.org>";
vcunat = "Vladimír Čunát <vcunat@gmail.com>";
vdemeester = "Vincent Demeester <vincent@sbr.pm>";
veprbl = "Dmitry Kalinkin <veprbl@gmail.com>";
vifino = "Adrian Pistol <vifino@tty.sh>";
vinymeuh = "VinyMeuh <vinymeuh@gmail.com>";
viric = "Lluís Batlle i Rossell <viric@viric.name>";
vizanto = "Danny Wilson <danny@prime.vc>";
vklquevs = "vklquevs <vklquevs@gmail.com>";
vlstill = "Vladimír Štill <xstill@fi.muni.cz>";
vmandela = "Venkateswara Rao Mandela <venkat.mandela@gmail.com>";
vmchale = "Vanessa McHale <tmchale@wisc.edu>";
valeriangalliat = "Valérian Galliat <val@codejam.info>";
volhovm = "Mikhail Volkhov <volhovm.cs@gmail.com>";
volth = "Jaroslavas Pocepko <jaroslavas@volth.com>";
vozz = "Oliver Hunt <oliver.huntuk@gmail.com>";
vrthra = "Rahul Gopinath <rahul@gopinath.org>";
vyp = "vyp <elisp.vim@gmail.com>";
wedens = "wedens <kirill.wedens@gmail.com>";
willibutz = "Willi Butz <willibutz@posteo.de>";
willtim = "Tim Philip Williams <tim.williams.public@gmail.com>";
winden = "Antonio Vargas Gonzalez <windenntw@gmail.com>";
wizeman = "Ricardo M. Correia <rcorreia@wizy.org>";
wjlroe = "William Roe <willroe@gmail.com>";
wkennington = "William A. Kennington III <william@wkennington.com>";
wmertens = "Wout Mertens <Wout.Mertens@gmail.com>";
woffs = "Frank Doepper <github@woffs.de>";
womfoo = "Kranium Gikos Mendoza <kranium@gikos.net>";
wscott = "Wayne Scott <wsc9tt@gmail.com>";
wyvie = "Elijah Rum <elijahrum@gmail.com>";
xnwdd = "Guillermo NWDD <nwdd+nixos@no.team>";
xvapx = "Marti Serra <marti.serra.coscollano@gmail.com>";
xwvvvvwx = "David Terry <davidterry@posteo.de>";
yarr = "Dmitry V. <savraz@gmail.com>";
yegortimoshenko = "Yegor Timoshenko <yegortimoshenko@gmail.com>";
yochai = "Yochai <yochai@titat.info>";
yorickvp = "Yorick van Pelt <yorickvanpelt@gmail.com>";
yuriaisaka = "Yuri Aisaka <yuri.aisaka+nix@gmail.com>";
yurrriq = "Eric Bailey <eric@ericb.me>";
z77z = "Marco Maggesi <maggesi@math.unifi.it>";
zagy = "Christian Zagrodnick <cz@flyingcircus.io>";
zalakain = "Unai Zalakain <contact@unaizalakain.info>";
zarelit = "David Costa <david@zarel.net>";
zauberpony = "Elmar Athmer <elmar@athmer.org>";
zef = "Zef Hemel <zef@zef.me>";
zimbatm = "zimbatm <zimbatm@zimbatm.com>";
Zimmi48 = "Théo Zimmermann <theo.zimmermann@univ-paris-diderot.fr>";
zohl = "Al Zohali <zohl@fmap.me>";
zoomulator = "Kim Simmons <zoomulator@gmail.com>";
zraexy = "David Mell <zraexy@gmail.com>";
zx2c4 = "Jason A. Donenfeld <Jason@zx2c4.com>";
zzamboni = "Diego Zamboni <diego@zzamboni.org>";
}

View File

@@ -41,18 +41,16 @@ rec {
let x = builtins.parseDrvName name; in "${x.name}-${suffix}-${x.version}");
/* Apply a function to each derivation and only to derivations in an attrset.
/* Apply a function to each derivation and only to derivations in an attrset
*/
mapDerivationAttrset = f: set: lib.mapAttrs (name: pkg: if lib.isDerivation pkg then (f pkg) else pkg) set;
/* Set the nix-env priority of the package.
*/
setPrio = priority: addMetaAttrs { inherit priority; };
/* Decrease the nix-env priority of the package, i.e., other
versions/variants of the package will be preferred.
*/
lowPrio = setPrio 10;
lowPrio = drv: addMetaAttrs { priority = 10; } drv;
/* Apply lowPrio to an attrset with derivations
*/
@@ -62,29 +60,11 @@ rec {
/* Increase the nix-env priority of the package, i.e., this
version/variant of the package will be preferred.
*/
hiPrio = setPrio (-10);
hiPrio = drv: addMetaAttrs { priority = -10; } drv;
/* Apply hiPrio to an attrset with derivations
*/
hiPrioSet = set: mapDerivationAttrset hiPrio set;
/* Check to see if a platform is matched by the given `meta.platforms`
element.
A `meta.platform` pattern is either
1. (legacy) a system string.
2. (modern) a pattern for the platform `parsed` field.
We can inject these into a patten for the whole of a structured platform,
and then match that.
*/
platformMatch = platform: elem: let
pattern =
if builtins.isString elem
then { system = elem; }
else { parsed = elem; };
in lib.matchAttrs pattern platform;
}

View File

@@ -1,2 +1,2 @@
# Expose the minimum required version for evaluating Nixpkgs
"2.0"
"1.11"

View File

@@ -59,7 +59,7 @@ rec {
};
};
closed = closeModules (modules ++ [ internalModule ]) ({ inherit config options lib; } // specialArgs);
closed = closeModules (modules ++ [ internalModule ]) ({ inherit config options; lib = import ./.; } // specialArgs);
options = mergeModules prefix (reverseList (filterModules (specialArgs.modulesPath or "") closed));
@@ -155,11 +155,11 @@ rec {
# a module will resolve strictly the attributes used as argument but
# not their values. The values are forwarding the result of the
# evaluation of the option.
requiredArgs = builtins.attrNames (lib.functionArgs f);
requiredArgs = builtins.attrNames (builtins.functionArgs f);
context = name: ''while evaluating the module argument `${name}' in "${key}":'';
extraArgs = builtins.listToAttrs (map (name: {
inherit name;
value = builtins.addErrorContext (context name)
value = addErrorContext (context name)
(args.${name} or config._module.args.${name});
}) requiredArgs);
@@ -192,55 +192,29 @@ rec {
(concatMap (m: map (config: { inherit (m) file; inherit config; }) (pushDownProperties m.config)) modules);
mergeModules' = prefix: options: configs:
let
/* byName is like foldAttrs, but will look for attributes to merge in the
specified attribute name.
byName "foo" (module: value: ["module.hidden=${module.hidden},value=${value}"])
[
{
hidden="baz";
foo={qux="bar"; gla="flop";};
}
{
hidden="fli";
foo={qux="gne"; gli="flip";};
}
]
===>
{
gla = [ "module.hidden=baz,value=flop" ];
gli = [ "module.hidden=fli,value=flip" ];
qux = [ "module.hidden=baz,value=bar" "module.hidden=fli,value=gne" ];
}
*/
byName = attr: f: modules:
foldl' (acc: module:
acc // (mapAttrs (n: v:
(acc.${n} or []) ++ f module v
) module.${attr}
)
) {} modules;
# an attrset 'name' => list of submodules that declare name.
declsByName = byName "options" (module: option:
[{ inherit (module) file; options = option; }]
) options;
# an attrset 'name' => list of submodules that define name.
defnsByName = byName "config" (module: value:
map (config: { inherit (module) file; inherit config; }) (pushDownProperties value)
) configs;
# extract the definitions for each loc
defnsByName' = byName "config" (module: value:
[{ inherit (module) file; inherit value; }]
) configs;
in
(flip mapAttrs declsByName (name: decls:
listToAttrs (map (name: {
# We're descending into attribute name.
inherit name;
value =
let
loc = prefix ++ [name];
defns = defnsByName.${name} or [];
defns' = defnsByName'.${name} or [];
# Get all submodules that declare name.
decls = concatMap (m:
if m.options ? ${name}
then [ { inherit (m) file; options = m.options.${name}; } ]
else []
) options;
# Get all submodules that define name.
defns = concatMap (m:
if m.config ? ${name}
then map (config: { inherit (m) file; inherit config; })
(pushDownProperties m.config.${name})
else []
) configs;
nrOptions = count (m: isOption m.options) decls;
# Extract the definitions for this loc
defns' = map (m: { inherit (m) file; value = m.config.${name}; })
(filter (m: m.config ? ${name}) configs);
in
if nrOptions == length decls then
let opt = fixupOptionType loc (mergeOptionDecls loc decls);
@@ -252,8 +226,8 @@ rec {
in
throw "The option `${showOption loc}' in `${firstOption.file}' is a prefix of options in `${firstNonOption.file}'."
else
mergeModules' loc decls defns
))
mergeModules' loc decls defns;
}) (concatMap (m: attrNames m.options) options))
// { _definedNames = map (m: { inherit (m) file; names = attrNames m.config; }) configs; };
/* Merge multiple option declarations into a single declaration. In
@@ -335,8 +309,7 @@ rec {
res.mergedValue;
in opt //
{ value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
inherit (res.defsFinal') highestPrio;
{ value = addErrorContext "while evaluating the option `${showOption loc}':" value;
definitions = map (def: def.value) res.defsFinal;
files = map (def: def.file) res.defsFinal;
inherit (res) isDefined;
@@ -344,7 +317,7 @@ rec {
# Merge definitions of a value of a given type.
mergeDefinitions = loc: type: defs: rec {
defsFinal' =
defsFinal =
let
# Process mkMerge and mkIf properties.
defs' = concatMap (m:
@@ -352,24 +325,20 @@ rec {
) defs;
# Process mkOverride properties.
defs'' = filterOverrides' defs';
defs'' = filterOverrides defs';
# Sort mkOrder properties.
defs''' =
# Avoid sorting if we don't have to.
if any (def: def.value._type or "" == "order") defs''.values
then sortProperties defs''.values
else defs''.values;
in {
values = defs''';
inherit (defs'') highestPrio;
};
defsFinal = defsFinal'.values;
if any (def: def.value._type or "" == "order") defs''
then sortProperties defs''
else defs'';
in defs''';
# Type-check the remaining definitions, and merge them.
mergedValue = foldl' (res: def:
if type.check def.value then res
else throw "The option value `${showOption loc}' in `${def.file}' is not of type `${type.description}'.")
else throw "The option value `${showOption loc}' in `${def.file}' is not a ${type.description}.")
(type.merge loc defsFinal) defsFinal;
isDefined = defsFinal != [];
@@ -447,17 +416,13 @@ rec {
Note that "z" has the default priority 100.
*/
filterOverrides = defs: (filterOverrides' defs).values;
filterOverrides' = defs:
filterOverrides = defs:
let
getPrio = def: if def.value._type or "" == "override" then def.value.priority else defaultPriority;
defaultPrio = 100;
getPrio = def: if def.value._type or "" == "override" then def.value.priority else defaultPrio;
highestPrio = foldl' (prio: def: min (getPrio def) prio) 9999 defs;
strip = def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def;
in {
values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
inherit highestPrio;
};
in concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
/* Sort a list of properties. The sort priority of a property is
1000 by default, but can be overridden by wrapping the property
@@ -476,8 +441,22 @@ rec {
optionSet to options of type submodule. FIXME: remove
eventually. */
fixupOptionType = loc: opt:
if opt.type.getSubModules or null == null
then opt // { type = opt.type or types.unspecified; }
let
options = opt.options or
(throw "Option `${showOption loc'}' has type optionSet but has no option attribute, in ${showFiles opt.declarations}.");
f = tp:
let optionSetIn = type: (tp.name == type) && (tp.functor.wrapped.name == "optionSet");
in
if tp.name == "option set" || tp.name == "submodule" then
throw "The option ${showOption loc} uses submodules without a wrapping type, in ${showFiles opt.declarations}."
else if optionSetIn "attrsOf" then types.attrsOf (types.submodule options)
else if optionSetIn "loaOf" then types.loaOf (types.submodule options)
else if optionSetIn "listOf" then types.listOf (types.submodule options)
else if optionSetIn "nullOr" then types.nullOr (types.submodule options)
else tp;
in
if opt.type.getSubModules or null == null
then opt // { type = f (opt.type or types.unspecified); }
else opt // { type = opt.type.substSubModules opt.options; options = []; };
@@ -503,7 +482,7 @@ rec {
inherit priority content;
};
mkOptionDefault = mkOverride 1500; # priority of option defaults
mkOptionDefault = mkOverride 1001; # priority of option defaults
mkDefault = mkOverride 1000; # used in config sections of non-user modules to set a default
mkForce = mkOverride 50;
mkVMOverride = mkOverride 10; # used by nixos-rebuild build-vm
@@ -520,8 +499,6 @@ rec {
mkBefore = mkOrder 500;
mkAfter = mkOrder 1500;
# The default priority for things that don't have a priority specified.
defaultPriority = 100;
# Convenient property used to transfer all definitions and their
# properties from one option to another. This property is useful for
@@ -544,20 +521,10 @@ rec {
#
mkAliasDefinitions = mkAliasAndWrapDefinitions id;
mkAliasAndWrapDefinitions = wrap: option:
mkAliasIfDef option (wrap (mkMerge option.definitions));
mkMerge
(optional (isOption option && option.isDefined)
(wrap (mkMerge option.definitions)));
# Similar to mkAliasAndWrapDefinitions but copies over the priority from the
# option as well.
#
# If a priority is not set, it assumes a priority of defaultPriority.
mkAliasAndWrapDefsWithPriority = wrap: option:
let
prio = option.highestPrio or defaultPriority;
defsWithPrio = map (mkOverride prio) option.definitions;
in mkAliasIfDef option (wrap (mkMerge defsWithPrio));
mkAliasIfDef = option:
mkIf (isOption option && option.isDefined);
/* Compatibility. */
fixMergeModules = modules: args: evalModules { inherit modules args; check = false; };
@@ -596,9 +563,6 @@ rec {
forwards any definitions of boot.copyKernels to
boot.loader.grub.copyKernels while printing a warning.
This also copies over the priority from the aliased option to the
non-aliased option.
*/
mkRenamedOptionModule = from: to: doRename {
inherit from to;
@@ -693,28 +657,22 @@ rec {
use = id;
};
doRename = { from, to, visible, warn, use, withPriority ? true }:
{ config, options, ... }:
doRename = { from, to, visible, warn, use }:
let
fromOpt = getAttrFromPath from options;
toOf = attrByPath to
(abort "Renaming error: option `${showOption to}' does not exist.");
(abort "Renaming error: option `${showOption to}' does not exists.");
in
{
options = setAttrByPath from (mkOption {
inherit visible;
description = "Alias of <option>${showOption to}</option>.";
apply = x: use (toOf config);
});
config = mkMerge [
{
warnings = optional (warn && fromOpt.isDefined)
"The option `${showOption from}' defined in ${showFiles fromOpt.files} has been renamed to `${showOption to}'.";
}
(if withPriority
then mkAliasAndWrapDefsWithPriority (setAttrByPath to) fromOpt
else mkAliasAndWrapDefinitions (setAttrByPath to) fromOpt)
];
};
{ config, options, ... }:
{ options = setAttrByPath from (mkOption {
description = "Alias of <option>${showOption to}</option>.";
apply = x: use (toOf config);
});
config = {
warnings =
let opt = getAttrFromPath from options; in
optional (warn && opt.isDefined)
"The option `${showOption from}' defined in ${showFiles opt.files} has been renamed to `${showOption to}'.";
} // setAttrByPath to (mkAliasDefinitions (getAttrFromPath from options));
};
}

View File

@@ -8,70 +8,32 @@ with lib.strings;
rec {
/* Returns true when the given argument is an option
Type: isOption :: a -> bool
Example:
isOption 1 // => false
isOption (mkOption {}) // => true
*/
isOption = lib.isType "option";
/* Creates an Option attribute set. mkOption accepts an attribute set with the following keys:
All keys default to `null` when not given.
Example:
mkOption { } // => { _type = "option"; }
mkOption { defaultText = "foo"; } // => { _type = "option"; defaultText = "foo"; }
*/
mkOption =
{
# Default value used when no definition is given in the configuration.
default ? null,
# Textual representation of the default, for the manual.
defaultText ? null,
# Example value used in the manual.
example ? null,
# String describing the option.
description ? null,
# Related packages used in the manual (see `genRelatedPackages` in ../nixos/doc/manual/default.nix).
relatedPackages ? null,
# Option type, providing type-checking and value merging.
type ? null,
# Function that converts the option value to something else.
apply ? null,
# Whether the option is for NixOS developers only.
internal ? null,
# Whether the option shows up in the manual.
visible ? null,
# Whether the option can be set only once
readOnly ? null,
{ default ? null # Default value used when no definition is given in the configuration.
, defaultText ? null # Textual representation of the default, for in the manual.
, example ? null # Example value used in the manual.
, description ? null # String describing the option.
, type ? null # Option type, providing type-checking and value merging.
, apply ? null # Function that converts the option value to something else.
, internal ? null # Whether the option is for NixOS developers only.
, visible ? null # Whether the option shows up in the manual.
, readOnly ? null # Whether the option can be set only once
, options ? null # Obsolete, used by types.optionSet.
} @ attrs:
attrs // { _type = "option"; };
/* Creates an Option attribute set for a boolean value option i.e an
option to be toggled on or off:
Example:
mkEnableOption "foo"
=> { _type = "option"; default = false; description = "Whether to enable foo."; example = true; type = { ... }; }
*/
mkEnableOption =
# Name for the created option
name: mkOption {
mkEnableOption = name: mkOption {
default = false;
example = true;
description = "Whether to enable ${name}.";
type = lib.types.bool;
};
/* This option accepts anything, but it does not produce any result.
This is useful for sharing a module across different module sets
without having to implement similar features as long as the
values of the options are not accessed. */
# This option accept anything, but it does not produce any result. This
# is useful for sharing a module across different module sets without
# having to implement similar features as long as the value of the options
# are not expected.
mkSinkUndeclaredOptions = attrs: mkOption ({
internal = true;
visible = false;
@@ -111,26 +73,10 @@ rec {
else
val) (head defs).value defs;
/* Extracts values of all "value" keys of the given list.
Type: getValues :: [ { value :: a } ] -> [a]
Example:
getValues [ { value = 1; } { value = 2; } ] // => [ 1 2 ]
getValues [ ] // => [ ]
*/
getValues = map (x: x.value);
/* Extracts values of all "file" keys of the given list
Type: getFiles :: [ { file :: a } ] -> [a]
Example:
getFiles [ { file = "file1"; } { file = "file2"; } ] // => [ "file1" "file2" ]
getFiles [ ] // => [ ]
*/
getFiles = map (x: x.file);
# Generate documentation template from the list of option declaration like
# the set generated with filterOptionSets.
optionAttrSetToDocList = optionAttrSetToDocList' [];
@@ -139,7 +85,6 @@ rec {
concatMap (opt:
let
docOption = rec {
loc = opt.loc;
name = showOption opt.loc;
description = opt.description or (throw "Option `${name}' has no description.");
declarations = filter (x: x != unknownModule) opt.declarations;
@@ -148,10 +93,9 @@ rec {
readOnly = opt.readOnly or false;
type = opt.type.description or null;
}
// optionalAttrs (opt ? example) { example = scrubOptionValue opt.example; }
// optionalAttrs (opt ? default) { default = scrubOptionValue opt.default; }
// optionalAttrs (opt ? defaultText) { default = opt.defaultText; }
// optionalAttrs (opt ? relatedPackages && opt.relatedPackages != null) { inherit (opt) relatedPackages; };
// (if opt ? example then { example = scrubOptionValue opt.example; } else {})
// (if opt ? default then { default = scrubOptionValue opt.default; } else {})
// (if opt ? defaultText then { default = opt.defaultText; } else {});
subOptions =
let ss = opt.type.getSubOptions opt.loc;
@@ -161,13 +105,10 @@ rec {
/* This function recursively removes all derivation attributes from
`x` except for the `name` attribute.
This is to make the generation of `options.xml` much more
efficient: the XML representation of derivations is very large
(on the order of megabytes) and is not actually used by the
manual generator.
*/
`x' except for the `name' attribute. This is to make the
generation of `options.xml' much more efficient: the XML
representation of derivations is very large (on the order of
megabytes) and is not actually used by the manual generator. */
scrubOptionValue = x:
if isDerivation x then
{ type = "derivation"; drvPath = x.name; outPath = x.name; name = x.name; }
@@ -176,29 +117,15 @@ rec {
else x;
/* For use in the `example` option attribute. It causes the given
text to be included verbatim in documentation. This is necessary
for example values that are not simple values, e.g., functions.
*/
/* For use in the example option attribute. It causes the given
text to be included verbatim in documentation. This is necessary
for example values that are not simple values, e.g.,
functions. */
literalExample = text: { _type = "literalExample"; inherit text; };
# Helper functions.
/* Convert an option, described as a list of the option parts in to a
safe, human readable version.
Example:
(showOption ["foo" "bar" "baz"]) == "foo.bar.baz"
(showOption ["foo" "bar.baz" "tux"]) == "foo.\"bar.baz\".tux"
*/
showOption = parts: let
escapeOptionPart = part:
let
escaped = lib.strings.escapeNixString part;
in if escaped == "\"${part}\""
then part
else escaped;
in (concatStringsSep ".") (map escapeOptionPart parts);
/* Helper functions. */
showOption = concatStringsSep ".";
showFiles = files: concatStringsSep " and " (map (f: "`${f}'") files);
unknownModule = "<unknown-file>";

48
lib/sandbox.nix Normal file
View File

@@ -0,0 +1,48 @@
{ lib }:
with lib.strings;
/* Helpers for creating lisp S-exprs for the Apple sandbox
lib.sandbox.allowFileRead [ "/usr/bin/file" ];
# => "(allow file-read* (literal \"/usr/bin/file\"))";
lib.sandbox.allowFileRead {
literal = [ "/usr/bin/file" ];
subpath = [ "/usr/lib/system" ];
}
# => "(allow file-read* (literal \"/usr/bin/file\") (subpath \"/usr/lib/system\"))"
*/
let
sexp = tokens: "(" + builtins.concatStringsSep " " tokens + ")";
generateFileList = files:
if builtins.isList files
then concatMapStringsSep " " (x: sexp [ "literal" ''"${x}"'' ]) files
else if builtins.isString files
then generateFileList [ files ]
else concatStringsSep " " (
(map (x: sexp [ "literal" ''"${x}"'' ]) (files.literal or [])) ++
(map (x: sexp [ "subpath" ''"${x}"'' ]) (files.subpath or []))
);
applyToFiles = f: act: files: f "${act} ${generateFileList files}";
genActions = actionName: let
action = feature: sexp [ actionName feature ];
self = {
"${actionName}" = action;
"${actionName}File" = applyToFiles action "file*";
"${actionName}FileRead" = applyToFiles action "file-read*";
"${actionName}FileReadMetadata" = applyToFiles action "file-read-metadata";
"${actionName}DirectoryList" = self."${actionName}FileReadMetadata";
"${actionName}FileWrite" = applyToFiles action "file-write*";
"${actionName}FileWriteMetadata" = applyToFiles action "file-write-metadata";
};
in self;
in
genActions "allow" // genActions "deny" // {
importProfile = derivation: ''
(import "${derivation}")
'';
}

View File

@@ -26,39 +26,14 @@ rec {
(type == "symlink" && lib.hasPrefix "result" baseName)
);
# Filters a source tree removing version control files and directories using cleanSourceWith
#
# Example:
# cleanSource ./.
cleanSource = src: cleanSourceWith { filter = cleanSourceFilter; inherit src; };
# Like `builtins.filterSource`, except it will compose with itself,
# allowing you to chain multiple calls together without any
# intermediate copies being put in the nix store.
#
# lib.cleanSourceWith f (lib.cleanSourceWith g ./.) # Succeeds!
# builtins.filterSource f (builtins.filterSource g ./.) # Fails!
cleanSourceWith = { filter, src }:
let
isFiltered = src ? _isLibCleanSourceWith;
origSrc = if isFiltered then src.origSrc else src;
filter' = if isFiltered then name: type: filter name type && src.filter name type else filter;
in {
inherit origSrc;
filter = filter';
outPath = builtins.filterSource filter' origSrc;
_isLibCleanSourceWith = true;
};
cleanSource = builtins.filterSource cleanSourceFilter;
# Filter sources by a list of regular expressions.
#
# E.g. `src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]`
sourceByRegex = src: regexes: cleanSourceWith {
filter = (path: type:
let relPath = lib.removePrefix (toString src + "/") (toString path);
in lib.any (re: builtins.match re relPath != null) regexes);
inherit src;
};
sourceByRegex = src: regexes: builtins.filterSource (path: type:
let relPath = lib.removePrefix (toString src + "/") (toString path);
in lib.any (re: builtins.match re relPath != null) regexes) src;
# Get all files ending with the specified suffices from the given
# directory or its descendants. E.g. `sourceFilesBySuffices ./dir
@@ -67,13 +42,13 @@ rec {
let filter = name: type:
let base = baseNameOf (toString name);
in type == "directory" || lib.any (ext: lib.hasSuffix ext base) exts;
in cleanSourceWith { inherit filter; src = path; };
in builtins.filterSource filter path;
# Get the commit id of a git repo
# Example: commitIdFromGitRepo <nixpkgs/.git>
commitIdFromGitRepo =
let readCommitFromFile = file: path:
let readCommitFromFile = path: file:
with builtins;
let fileName = toString path + "/" + file;
packedRefsName = toString path + "/packed-refs";
@@ -85,7 +60,7 @@ rec {
matchRef = match "^ref: (.*)$" fileContent;
in if isNull matchRef
then fileContent
else readCommitFromFile (lib.head matchRef) path
else readCommitFromFile path (lib.head matchRef)
# Sometimes, the file isn't there at all and has been packed away in the
# packed-refs file, so we have to grep through it:
else if lib.pathExists packedRefsName
@@ -96,9 +71,5 @@ rec {
then throw ("Could not find " + file + " in " + packedRefsName)
else lib.head matchRef
else throw ("Not a .git directory: " + path);
in readCommitFromFile "HEAD";
pathHasContext = builtins.hasContext or (lib.hasPrefix builtins.storeDir);
canCleanSource = src: src ? _isLibCleanSourceWith || !(pathHasContext (toString src));
in lib.flip readCommitFromFile "HEAD";
}

View File

@@ -12,8 +12,6 @@ rec {
/* Concatenate a list of strings.
Type: concatStrings :: [string] -> string
Example:
concatStrings ["foo" "bar"]
=> "foobar"
@@ -22,19 +20,15 @@ rec {
/* Map a function over a list and concatenate the resulting strings.
Type: concatMapStrings :: (a -> string) -> [a] -> string
Example:
concatMapStrings (x: "a" + x) ["foo" "bar"]
=> "afooabar"
*/
concatMapStrings = f: list: concatStrings (map f list);
/* Like `concatMapStrings` except that the f functions also gets the
/* Like `concatMapStrings' except that the f functions also gets the
position as a parameter.
Type: concatImapStrings :: (int -> a -> string) -> [a] -> string
Example:
concatImapStrings (pos: x: "${toString pos}-${x}") ["foo" "bar"]
=> "1-foo2-bar"
@@ -43,25 +37,17 @@ rec {
/* Place an element between each element of a list
Type: intersperse :: a -> [a] -> [a]
Example:
intersperse "/" ["usr" "local" "bin"]
=> ["usr" "/" "local" "/" "bin"].
*/
intersperse =
# Separator to add between elements
separator:
# Input list
list:
intersperse = separator: list:
if list == [] || length list == 1
then list
else tail (lib.concatMap (x: [separator x]) list);
/* Concatenate a list of strings with a separator between each element
Type: concatStringsSep :: string -> [string] -> string
Example:
concatStringsSep "/" ["usr" "local" "bin"]
=> "usr/local/bin"
@@ -69,77 +55,43 @@ rec {
concatStringsSep = builtins.concatStringsSep or (separator: list:
concatStrings (intersperse separator list));
/* Maps a function over a list of strings and then concatenates the
result with the specified separator interspersed between
elements.
Type: concatMapStringsSep :: string -> (string -> string) -> [string] -> string
/* First maps over the list and then concatenates it.
Example:
concatMapStringsSep "-" (x: toUpper x) ["foo" "bar" "baz"]
=> "FOO-BAR-BAZ"
*/
concatMapStringsSep =
# Separator to add between elements
sep:
# Function to map over the list
f:
# List of input strings
list: concatStringsSep sep (map f list);
concatMapStringsSep = sep: f: list: concatStringsSep sep (map f list);
/* Same as `concatMapStringsSep`, but the mapping function
additionally receives the position of its argument.
Type: concatMapStringsSep :: string -> (int -> string -> string) -> [string] -> string
/* First imaps over the list and then concatenates it.
Example:
concatImapStringsSep "-" (pos: x: toString (x / pos)) [ 6 6 6 ]
=> "6-3-2"
*/
concatImapStringsSep =
# Separator to add between elements
sep:
# Function that receives elements and their positions
f:
# List of input strings
list: concatStringsSep sep (lib.imap1 f list);
concatImapStringsSep = sep: f: list: concatStringsSep sep (lib.imap1 f list);
/* Construct a Unix-style, colon-separated search path consisting of
the given `subDir` appended to each of the given paths.
Type: makeSearchPath :: string -> [string] -> string
/* Construct a Unix-style search path consisting of each `subDir"
directory of the given list of packages.
Example:
makeSearchPath "bin" ["/root" "/usr" "/usr/local"]
=> "/root/bin:/usr/bin:/usr/local/bin"
makeSearchPath "bin" [""]
=> "/bin"
makeSearchPath "bin" ["/"]
=> "//bin"
*/
makeSearchPath =
# Directory name to append
subDir:
# List of base paths
paths:
concatStringsSep ":" (map (path: path + "/" + subDir) (builtins.filter (x: x != null) paths));
makeSearchPath = subDir: packages:
concatStringsSep ":" (map (path: path + "/" + subDir) packages);
/* Construct a Unix-style search path by appending the given
`subDir` to the specified `output` of each of the packages. If no
output by the given name is found, fallback to `.out` and then to
the default.
Type: string -> string -> [package] -> string
/* Construct a Unix-style search path, using given package output.
If no output is found, fallback to `.out` and then to the default.
Example:
makeSearchPathOutput "dev" "bin" [ pkgs.openssl pkgs.zlib ]
=> "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r-dev/bin:/nix/store/wwh7mhwh269sfjkm6k5665b5kgp7jrk2-zlib-1.2.8/bin"
*/
makeSearchPathOutput =
# Package output to use
output:
# Directory name to append
subDir:
# List of packages
pkgs: makeSearchPath subDir (map (lib.getOutput output) pkgs);
makeSearchPathOutput = output: subDir: pkgs: makeSearchPath subDir (map (lib.getOutput output) pkgs);
/* Construct a library search path (such as RPATH) containing the
libraries for a set of packages
@@ -162,80 +114,55 @@ rec {
*/
makeBinPath = makeSearchPathOutput "bin" "bin";
/* Construct a perl search path (such as $PERL5LIB)
FIXME(zimbatm): this should be moved in perl-specific code
Example:
pkgs = import <nixpkgs> { }
makePerlPath [ pkgs.perlPackages.NetSMTP ]
=> "/nix/store/n0m1fk9c960d8wlrs62sncnadygqqc6y-perl-Net-SMTP-1.25/lib/perl5/site_perl"
*/
makePerlPath = makeSearchPathOutput "lib" "lib/perl5/site_perl";
/* Depending on the boolean `cond', return either the given string
or the empty string. Useful to concatenate against a bigger string.
Type: optionalString :: bool -> string -> string
Example:
optionalString true "some-string"
=> "some-string"
optionalString false "some-string"
=> ""
*/
optionalString =
# Condition
cond:
# String to return if condition is true
string: if cond then string else "";
optionalString = cond: string: if cond then string else "";
/* Determine whether a string has given prefix.
Type: hasPrefix :: string -> string -> bool
Example:
hasPrefix "foo" "foobar"
=> true
hasPrefix "foo" "barfoo"
=> false
*/
hasPrefix =
# Prefix to check for
pref:
# Input string
str: substring 0 (stringLength pref) str == pref;
hasPrefix = pref: str:
substring 0 (stringLength pref) str == pref;
/* Determine whether a string has given suffix.
Type: hasSuffix :: string -> string -> bool
Example:
hasSuffix "foo" "foobar"
=> false
hasSuffix "foo" "barfoo"
=> true
*/
hasSuffix =
# Suffix to check for
suffix:
# Input string
content:
hasSuffix = suffix: content:
let
lenContent = stringLength content;
lenSuffix = stringLength suffix;
in lenContent >= lenSuffix &&
substring (lenContent - lenSuffix) lenContent content == suffix;
/* Determine whether a string contains the given infix
Type: hasInfix :: string -> string -> bool
Example:
hasInfix "bc" "abcd"
=> true
hasInfix "ab" "abcd"
=> true
hasInfix "cd" "abcd"
=> true
hasInfix "foo" "abcd"
=> false
*/
hasInfix = infix: content:
let
drop = x: substring 1 (stringLength x) x;
in hasPrefix infix content
|| content != "" && hasInfix infix (drop content);
/* Convert a string to a list of characters (i.e. singleton strings).
This allows you to, e.g., map a function over each character. However,
note that this will likely be horribly inefficient; Nix is not a
@@ -244,8 +171,6 @@ rec {
Also note that Nix treats strings as a list of bytes and thus doesn't
handle unicode.
Type: stringtoCharacters :: string -> [string]
Example:
stringToCharacters ""
=> [ ]
@@ -260,25 +185,18 @@ rec {
/* Manipulate a string character by character and replace them by
strings before concatenating the results.
Type: stringAsChars :: (string -> string) -> string -> string
Example:
stringAsChars (x: if x == "a" then "i" else x) "nax"
=> "nix"
*/
stringAsChars =
# Function to map over each individual character
f:
# Input string
s: concatStrings (
stringAsChars = f: s:
concatStrings (
map f (stringToCharacters s)
);
/* Escape occurrence of the elements of `list` in `string` by
/* Escape occurrence of the elements of list in string by
prefixing it with a backslash.
Type: escape :: [string] -> string -> string
Example:
escape ["(" ")"] "(foo)"
=> "\\(foo\\)"
@@ -287,8 +205,6 @@ rec {
/* Quote string to be used safely within the Bourne shell.
Type: escapeShellArg :: string -> string
Example:
escapeShellArg "esc'ape\nme"
=> "'esc'\\''ape\nme'"
@@ -297,25 +213,13 @@ rec {
/* Quote all arguments to be safely passed to the Bourne shell.
Type: escapeShellArgs :: [string] -> string
Example:
escapeShellArgs ["one" "two three" "four'five"]
=> "'one' 'two three' 'four'\\''five'"
*/
escapeShellArgs = concatMapStringsSep " " escapeShellArg;
/* Turn a string into a Nix expression representing that string
Type: string -> string
Example:
escapeNixString "hello\${}\n"
=> "\"hello\\\${}\\n\""
*/
escapeNixString = s: escape ["$"] (builtins.toJSON s);
# Obsolete - use replaceStrings instead.
/* Obsolete - use replaceStrings instead. */
replaceChars = builtins.replaceStrings or (
del: new: s:
let
@@ -335,8 +239,6 @@ rec {
/* Converts an ASCII string to lower-case.
Type: toLower :: string -> string
Example:
toLower "HOME"
=> "home"
@@ -345,8 +247,6 @@ rec {
/* Converts an ASCII string to upper-case.
Type: toUpper :: string -> string
Example:
toUpper "home"
=> "HOME"
@@ -356,7 +256,7 @@ rec {
/* Appends string context from another string. This is an implementation
detail of Nix.
Strings in Nix carry an invisible `context` which is a list of strings
Strings in Nix carry an invisible `context' which is a list of strings
representing store paths. If the string is later used in a derivation
attribute, the derivation will properly populate the inputDrvs and
inputSrcs.
@@ -402,9 +302,8 @@ rec {
in
recurse 0 0;
/* Return a string without the specified prefix, if the prefix matches.
Type: string -> string -> string
/* Return the suffix of the second argument if the first argument matches
its prefix.
Example:
removePrefix "foo." "foo.bar.baz"
@@ -412,23 +311,18 @@ rec {
removePrefix "xxx" "foo.bar.baz"
=> "foo.bar.baz"
*/
removePrefix =
# Prefix to remove if it matches
prefix:
# Input string
str:
removePrefix = pre: s:
let
preLen = stringLength prefix;
sLen = stringLength str;
preLen = stringLength pre;
sLen = stringLength s;
in
if hasPrefix prefix str then
substring preLen (sLen - preLen) str
if hasPrefix pre s then
substring preLen (sLen - preLen) s
else
str;
s;
/* Return a string without the specified suffix, if the suffix matches.
Type: string -> string -> string
/* Return the prefix of the second argument if the first argument matches
its suffix.
Example:
removeSuffix "front" "homefront"
@@ -436,21 +330,17 @@ rec {
removeSuffix "xxx" "homefront"
=> "homefront"
*/
removeSuffix =
# Suffix to remove if it matches
suffix:
# Input string
str:
removeSuffix = suf: s:
let
sufLen = stringLength suffix;
sLen = stringLength str;
sufLen = stringLength suf;
sLen = stringLength s;
in
if sufLen <= sLen && suffix == substring (sLen - sufLen) sufLen str then
substring 0 (sLen - sufLen) str
if sufLen <= sLen && suf == substring (sLen - sufLen) sufLen s then
substring 0 (sLen - sufLen) s
else
str;
s;
/* Return true if string v1 denotes a version older than v2.
/* Return true iff string v1 denotes a version older than v2.
Example:
versionOlder "1.1" "1.2"
@@ -460,7 +350,7 @@ rec {
*/
versionOlder = v1: v2: builtins.compareVersions v2 v1 == 1;
/* Return true if string v1 denotes a version equal to or newer than v2.
/* Return true iff string v1 denotes a version equal to or newer than v2.
Example:
versionAtLeast "1.1" "1.0"
@@ -503,7 +393,7 @@ rec {
components = splitString "/" url;
filename = lib.last components;
name = builtins.head (splitString sep filename);
in assert name != filename; name;
in assert name != filename; name;
/* Create an --{enable,disable}-<feat> string that can be passed to
standard GNU Autoconf scripts.
@@ -516,47 +406,9 @@ rec {
*/
enableFeature = enable: feat: "--${if enable then "enable" else "disable"}-${feat}";
/* Create an --{enable-<feat>=<value>,disable-<feat>} string that can be passed to
standard GNU Autoconf scripts.
Example:
enableFeature true "shared" "foo"
=> "--enable-shared=foo"
enableFeature false "shared" (throw "ignored")
=> "--disable-shared"
*/
enableFeatureAs = enable: feat: value: enableFeature enable feat + optionalString enable "=${value}";
/* Create an --{with,without}-<feat> string that can be passed to
standard GNU Autoconf scripts.
Example:
withFeature true "shared"
=> "--with-shared"
withFeature false "shared"
=> "--without-shared"
*/
withFeature = with_: feat: "--${if with_ then "with" else "without"}-${feat}";
/* Create an --{with-<feat>=<value>,without-<feat>} string that can be passed to
standard GNU Autoconf scripts.
Example:
with_Feature true "shared" "foo"
=> "--with-shared=foo"
with_Feature false "shared" (throw "ignored")
=> "--without-shared"
*/
withFeatureAs = with_: feat: value: withFeature with_ feat + optionalString with_ "=${value}";
/* Create a fixed width string with additional prefix to match
required width.
This function will fail if the input string is longer than the
requested length.
Type: fixedWidthString :: int -> string -> string
Example:
fixedWidthString 5 "0" (toString 15)
=> "00015"
@@ -566,10 +418,7 @@ rec {
strw = lib.stringLength str;
reqWidth = width - (lib.stringLength filler);
in
assert lib.assertMsg (strw <= width)
"fixedWidthString: requested string length (${
toString width}) must not be shorter than actual length (${
toString strw})";
assert strw <= width;
if strw == width then str else filler + fixedWidthString reqWidth filler str;
/* Format a number adding leading zeroes up to fixed width.
@@ -580,13 +429,6 @@ rec {
*/
fixedWidthNumber = width: n: fixedWidthString width "0" (toString n);
/* Check whether a value can be coerced to a string */
isCoercibleToString = x:
builtins.elem (builtins.typeOf x) [ "path" "string" "null" "int" "float" "bool" ] ||
(builtins.isList x && lib.all isCoercibleToString x) ||
x ? outPath ||
x ? __toString;
/* Check whether a value is a store path.
Example:
@@ -600,16 +442,12 @@ rec {
=> false
*/
isStorePath = x:
if isCoercibleToString x then
let str = toString x; in
builtins.substring 0 1 str == "/"
&& dirOf str == builtins.storeDir
else
false;
builtins.isString x
&& builtins.substring 0 1 (toString x) == "/"
&& dirOf (builtins.toPath x) == builtins.storeDir;
/* Parse a string string as an int.
Type: string -> int
/* Convert string to int
Obviously, it is a bit hacky to use fromJSON that way.
Example:
toInt "1337"
@@ -619,18 +457,17 @@ rec {
toInt "3.14"
=> error: floating point JSON numbers are not supported
*/
# Obviously, it is a bit hacky to use fromJSON this way.
toInt = str:
let may_be_int = builtins.fromJSON str; in
if builtins.isInt may_be_int
then may_be_int
else throw "Could not convert ${str} to int.";
/* Read a list of paths from `file`, relative to the `rootPath`.
Lines beginning with `#` are treated as comments and ignored.
Whitespace is significant.
/* Read a list of paths from `file', relative to the `rootPath'. Lines
beginning with `#' are treated as comments and ignored. Whitespace
is significant.
NOTE: This function is not performant and should be avoided.
NOTE: this function is not performant and should be avoided
Example:
readPathsFromFile /prefix
@@ -643,17 +480,16 @@ rec {
*/
readPathsFromFile = rootPath: file:
let
root = toString rootPath;
lines = lib.splitString "\n" (builtins.readFile file);
removeComments = lib.filter (line: line != "" && !(lib.hasPrefix "#" line));
relativePaths = removeComments lines;
absolutePaths = builtins.map (path: rootPath + "/${path}") relativePaths;
absolutePaths = builtins.map (path: builtins.toPath (root + "/" + path)) relativePaths;
in
absolutePaths;
/* Read the contents of a file removing the trailing \n
Type: fileContents :: path -> string
Example:
$ echo "1.0" > ./version

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