Buildout recipe for creating Nix expressions from eggs list
Project description
collective.recipe.nix
This is an experimental buildout recipe for creating nix expression from a buildout eggs list. This is work in progress. Please, contribute.
The minimal buildout part should include recipe and eggs:
[releaser]
recipe = collective.recipe.nix
eggs = zest.releaser[recommended]
The recipe generates three kind of expressions:
mkDerivation based [name].nix usable with nix-shell and nix-build
buildEnv based [name]-env.nix usable with nix-build
buildPythonPackage based [name]-[package].nix usable with nix-env -i -f
Note: For large projects like Plone, it’s recommended to use a local mirrored package index / find-links to avoid connection issues when recipe is resolving each package fetchurl information. In emergency, setting allow-from-cache to true would allow recipe to use configured buildout download cache (and create file:// urls) and avoid extra network traffic.
Recipe options
- eggs
list of packages to generate expressions for
- name
string to define the used based filename in generated outputs (defaults to part name)
- version
version string write into mkDerivation based expression (defaults to 1.0.0)
- prefix
string to set prefix (or path) for generated outputs (defaults to working directory)
- parts
list of existing buildout sections to install in mkDerivation based expression (defaults to all but the current section)
- outputs
list of full generated expression filenames to filter outputs to be generated (defaults to nothing to generate all)
- allow-from-cache
boolean (true) to allow generated expression to use package from buildout download cache (defaults to false)
- build-inputs
list of additional build-inputs from nixpkgs for generated expressions (to be available in nix-shell environment) or list of package=nixpkgsPackage mappings to inject build-inputs for each package’s buildPythonPackage-expression
- propagated-build-inputs
list of package=other.package mappings to inject additional requirements for packages (usually to enable some additional features)
- nixpkgs
list of package=pythonPackages.package mappings to use existing packages from nixpkgs instead of generating custom buildPythonPackage (useful with package like Pillow, which need additional care to get built properly)
- urls
list of package=url#md5=hash mappings to explicitly define package download URL and MD5 checksum for cases where the recipe fails to resolve it automatically
Example of generic use
At first, define ./default.nix with buildout:
with import <nixpkgs> {}; { myEnv = stdenv.mkDerivation { name = "myEnv"; buildInputs = [ pythonPackages.ldap pythonPackages.pillow pythonPackages.readline pythonPackages.zc_buildout_nix ]; shellHook = '' export SSL_CERT_FILE=~/.nix-profile/etc/ca-bundle.crt ''; }; }
And example ./buildout.cfg:
[buildout]
parts = releaser
[releaser]
recipe = collective.recipe.nix
eggs = zest.releaser[recommended]
Run the buildout:
$ nix-shell --run buildout-nix
Now you should be able to run zest.releaser with recommended plugins with:
$ nix-shell releaser.nix --run fullrelease
Or install zest.releaser into your current Nix profile with:
$ nix-env -i -f releaser-zest_releaser.nix
Example of building Plone
Together with nixpkgs optimized buildout version (available in nixpkgs), this recipe can be used to build a Nix derivation using buildout install as in Nix derivation builder (see the generated mkDerivation based expression for current example implementation):
[buildout]
extends = https://dist.plone.org/release/4-latest/versions.cfg
parts = plone
versions = versions
[instance]
recipe = plone.recipe.zope2instance
eggs =
Plone
plone.app.ldap
user = admin:admin
var = /tmp
[plone]
recipe = collective.recipe.nix
parts = instance
eggs = ${instance:eggs}
outputs = plone.nix
[versions]
zc.buildout =
setuptools =
Pillow =
$ nix-shell --run "buildout-nix plone:allow-from-cache=true"
$ nix-build plone.nix
$ results/bin/instance fg
Note: Currently buildout extends are not cached into Nix expression making the expression not completely pure.
Changelog
0.14.0 (2015-07-24)
Remove default nixpkgs mapping for lxml to allow custom lxml versions by default [datakurre]
0.13.2 (2015-07-24)
Fix regression where Nix-installed packages where thought to be developed packages [datakurre]
0.13.1 (2015-07-23)
Fix issue where generated expression was missing $src [datakurre]
0.13.0 (2015-07-23)
Fix to exclude developed packages from created expressions [datakurre]
Add zc.buildout -> zc_buildout_nix to default nixpkgs mapping [datakurre]
0.12.1 (2015-07-23)
Cleanup generated [name].nix expression [datakurre]
0.12.0 (2015-07-23)
Add support for installing the configured buildout with nix in the generated [name].nix expression [datakurre]
0.11.0 (2015-07-23)
Change package lookup to use setuptools package index [datakurre]
Add allow-from-cache option to distributions from from download-cache [datakurre]
Add prefix option to control output paths [datakurre]
Add outputs option to filter generated outputs [datakurre]
Fix issue where nixpkgs mapping lookup failed because of non-normalize preconfigured mappings [datakurre]
0.10.1 (2015-07-23)
Fix typo [datakurre]
0.10.0 (2015-07-22)
Fix issue where nixpkgs mappings lookup failed because of non-normalized lookup [datakurre]
Add support for name option to change the base name for created expressions [datakurre]
0.9.3 (2015-07-22)
Fix a few more issues where package was not found at PyPI [datakurre]
0.9.2 (2015-07-12)
Fix a few issues where package was not found at PyPI [datakurre]
0.9.1 (2015-07-11)
Fix issue where package requirement in wrong case caused error
Fix issue where buildout propagated-build-inputs did not support cyclic requirements (required for injecting ‘add-on’ packages) [datakurre]
0.9.0 (2015-07-10)
Refactor to handle properly setuptools requires extras [datakurre]
0.8.0 (2015-07-10)
Add support for comma separated list for inline build-inputs, propagated-build-inputs and nixpkgs [datakurre]
0.7.0 (2015-07-10)
Add option to inject propagatedBuildInputs to enable extra package-dependent additional features [datakurre]
0.6.0 (2015-07-10)
Add to create installable python package expression for each listed egg [datakurre]
0.5.0 (2015-07-09)
Fix to resolve cyclic dependencies by letting the first seen dependency win and persist into resulting expression [datakurre]
0.4.0 (2015-07-09)
Change to produce {name}-env.nix instead of {name}.env.nix as buildable derivations [datakurre]
0.3.0 (2015-07-08)
Change resulting derivation to be buildEnv with python.buildEnv to make it also nix-buildable [datakurre]
0.2.0 (2015-07-08)
Add buildout-based configuration [datakurre]
Back to development: 0.1.2 [datakurre]
0.1.1 (2015-07-08)
Add support for plone.app.ldap [datakurre]
0.1.0 (2015-07-08)
Proof of concept release.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for collective.recipe.nix-0.14.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7afed393b2698db9aa0dcb8ae94495c782348be35ae789848e86c84482bb0f72 |
|
MD5 | b1fb502b3e9860d1b5456df0449dbbfe |
|
BLAKE2b-256 | 569fdfddcb99189490a30bb80c2fe07e61818bfd09fbb628eb4032e4f7ebc63d |