Skip to main content

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. Possible remedies include setting allow-from-cache to true to allow recipe to use configured buildout download cache (and create file:// urls), or just running the buildout again with help of recipe created cumulative cache ([~/][.]collective.recipe.nix.cfg).

Recipe options

eggs

list of packages to generate expressions for

name

string to define the name used in the resulting derivation and in the generated filenames (defaults to part name)

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

See the project repository for configuration examples.

Example of generic use

At first, define ./default.nix with buildout:

with import <nixpkgs> {}; {
  myEnv = stdenv.mkDerivation {
    name = "myEnv";
    buildInputs = [
      libxml2
      libxslt
      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

See the project repository for more configuration examples.

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/5-latest/versions.cfg
parts = plone
versions = versions

[instance]
recipe = plone.recipe.zope2instance
eggs = Plone
user = admin:admin
var = /tmp

[plone]
recipe = collective.recipe.nix
parts = instance
eggs = ${instance:eggs}
outputs = plone.nix

[versions]
Pillow =
setuptools =
zc.buildout =
zc.recipe.egg =
$ nix-shell --run buildout-nix
$ nix-build plone.nix -o plone
$ plone/bin/instance fg

Changelog

0.18.2 (2015-07-26)

  • Cleanup generated expression [datakurre]

0.18.0 (2015-07-26)

  • Remove version option, because both name and version should be really be included in the name option [datakurre]

  • Fix the name option to also affect the resulting derivation name [datakurre]

0.17.1 (2015-07-26)

  • Cleanup generated expression [datakurre]

0.17.0 (2015-07-26)

  • Fix to embed resolved buildout into expression and run builder’s buildout in offline mode to make expression deterministic [datakurre]

0.16.0 (2015-07-25)

  • Add hooks-option to inject build hook scripts into expressions [datakurre]

0.15.1 (2015-07-25)

  • Cleanup generated expression [datakurre]

0.15.0 (2015-07-25)

  • Fix to cache resolved fetchurl details between builds into [~/][.]collective.recipe.nix.cfg to ease creating expressions for large projects [datakurre]

  • Add support for Python 3 [datakurre]

0.14.1 (2015-07-24)

  • Fix issue where buildout provided propagatedBuildInputs were not always included [datakurre]

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

collective.recipe.nix-0.18.2.tar.gz (13.9 kB view details)

Uploaded Source

File details

Details for the file collective.recipe.nix-0.18.2.tar.gz.

File metadata

File hashes

Hashes for collective.recipe.nix-0.18.2.tar.gz
Algorithm Hash digest
SHA256 e8c7df8e175a59ea7a86435c73f6e8caf58ebdd2135f742978edf876b2062897
MD5 07118d97354636e5ebee41f6b48e7d67
BLAKE2b-256 d6ae3864a1249ea72bda2cd08dacf098716a5f5b36f74a7e1b8bb89b27f949bd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page