Popularity
9.8
Growing
Activity
7.0
Growing
198
17
111

Monthly Downloads: 3,776
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags: Nix     Distribution     DevOps    
Latest version: v2.15.3

cabal2nix alternatives and similar packages

Based on the "Distribution" category

Do you think we are missing an alternative of cabal2nix or a related project?

Add another 'Distribution' Package

README

Cabal2nix

hackage release stackage LTS package stackage Nightly package travis build status

cabal2nix converts a single Cabal file into a single Nix build expression. For example:

$ cabal2nix cabal://mtl
{ mkDerivation, base, stdenv, transformers }:
mkDerivation {
  pname = "mtl";
  version = "2.2.1";
  sha256 = "1icdbj2rshzn0m1zz5wa7v3xvkf6qw811p4s7jgqwvx1ydwrvrfa";
  libraryHaskellDepends = [ base transformers ];
  homepage = "http://github.com/ekmett/mtl";
  description = "Monad classes, using functional dependencies";
  license = stdenv.lib.licenses.bsd3;
}

Cabal files can be referred to using the magic URL cabal://NAME-VERSION, which will automatically download the file from Hackage. Alternatively, a direct http://host/path/pkg.cabal URL can be provided, as well as a file:///local/path/pkg.cabal URI that doesn't depend on network access. However, if the source hash is not already in cabal2nix's cache or provided using the --sha256 option, cabal2nix still needs to download the source code to compute the hash, which still causes network traffic. Run the utility with --help to see the complete list of supported command-line flags.

Detailed instructions on how to use those generated files with Nix can be found at https://nixos.org/nixpkgs/manual/#how-to-create-nix-builds-for-your-own-private-haskell-packages.

cabal2nix can also build derivations for projects from other sources than Hackage. You only need to provide a URI that points to a cabal project. The most common use-case for this is probably to generate a derivation for a project on the local file system:

$ cabal get mtl-2.2.1 && cd mtl-2.2.1
$ cabal2nix .
{ mkDerivation, base, stdenv, transformers }:
mkDerivation {
  pname = "mtl";
  version = "2.2.1";
  src = ./.;
  libraryHaskellDepends = [ base transformers ];
  homepage = "http://github.com/ekmett/mtl";
  description = "Monad classes, using functional dependencies";
  license = stdenv.lib.licenses.bsd3;
}

This derivation will not fetch from hackage, but instead use the directory which contains the derivation as the source repository.

cabal2nix currently supports the following repository types:

  • directory
  • source archive (zip, tar.gz, ...) from http or https URL or local file.
  • git, mercurial, svn or bazaar repository

hackage2nix

This repository also contains, in the [hackage2nix/](./hackage2nix) directory, the tool to update the Haskell packages in nixpkgs. It has its own README there.

Building

For ease of contribution, we support these methods to build cabal2nix:

  • stack build if you have Stack
    • The Stack build can use system dependencies from a pinned nixpkgs version for increased reproducibility (see [stack.yaml](./stack.yaml)). On NixOS this happens automatically. On non-NixOS, use stack --nix build for that.
  • cabal install if you have cabal-install installed
  • TODO: Add a build method that requires only nix preinstalled, also pins nixpkgs, and is thus fully reproducible.

When making changes, please ensure that all these methods continue to work.


*Note that all licence references and agreements mentioned in the cabal2nix README section above are relevant to that project's source code only.