cabal2nix: Convert Cabal files into Nix build instructions.

[ bsd3, distribution, library, nix, program ] [ Propose Tags ] [ Report a vulnerability ]
Versions [RSS] 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19, 1.20, 1.21, 1.23, 1.24, 1.25, 1.26, 1.27, 1.28, 1.29, 1.30, 1.31, 1.32, 1.33, 1.34, 1.35, 1.37, 1.38, 1.39, 1.40, 1.41, 1.42, 1.43, 1.44, 1.45, 1.46, 1.47, 1.48, 1.49, 1.50, 1.51, 1.52, 1.53, 1.54, 1.55, 1.56, 1.57, 1.58, 1.59, 1.60, 1.61, 1.63, 1.64, 1.65, 1.66, 1.67, 1.68, 1.69, 1.70, 1.71, 1.72, 1.73, 2.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.1, 2.1.1, 2.2, 2.2.1, 2.3, 2.3.1, 2.4, 2.4.1, 2.5, 2.6, 2.7, 2.7.1, 2.7.2, 2.8, 2.8.1, 2.8.2, 2.9, 2.9.1, 2.9.2, 2.9.3, 2.10.0, 2.10.1, 2.10.2, 2.11, 2.11.1, 2.12, 2.13, 2.14, 2.14.1, 2.14.2, 2.14.3, 2.14.4, 2.15.0, 2.15.1, 2.15.2, 2.15.3, 2.15.4, 2.15.5, 2.15.6, 2.16.0, 2.17.0, 2.18.0, 2.19.0, 2.19.1 (info)
Change log CHANGELOG.md
Dependencies aeson (>1), ansi-wl-pprint, base (>4.11 && <5), bytestring, Cabal (>=3.0), cabal2nix, containers (>=0.5.9), deepseq (>=1.4), directory, distribution-nixpkgs (>=1.7 && <1.8), filepath, hackage-db (>=2.0.1), hopenssl (>=2), hpack (>=0.29.6), language-nix, lens, monad-par, monad-par-extras, mtl, optparse-applicative, pretty (>=1.1.2), process, split, text, time, transformers, yaml [details]
Tested with ghc ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.2
License BSD-3-Clause
Author Peter Simons <simons@cryp.to>
Maintainer sternenseemann <sternenseemann@systemli.org>
Category Distribution, Nix
Home page https://github.com/nixos/cabal2nix#readme
Bug tracker https://github.com/nixos/cabal2nix/issues
Source repo head: git clone https://github.com/nixos/cabal2nix(cabal2nix)
Uploaded by sternenseemann at 2022-10-23T22:27:55Z
Distributions LTSHaskell:2.19.1, NixOS:2.19.1, Stackage:2.19.1
Reverse Dependencies 4 direct, 0 indirect [details]
Executables hackage2nix, cabal2nix
Downloads 98529 total (140 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-10-24 [all 1 reports]

Readme for cabal2nix-2.19.1

[back to package description]

Cabal2nix

hackage release stackage LTS package stackage Nightly package Continous Integration

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

$ cabal2nix cabal://mtl
{ mkDerivation, base, lib, 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 = 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://haskell4nix.readthedocs.io/nixpkgs-users-guide.html#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, lib, 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 = 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/ directory, the tool to update the Haskell packages in nixpkgs. It has its own README there.