Mapping non-Haskell dependencies to Nixpkgs

Cabal files may contain dependencies to external non-Haskell dependencies via:

If there is a pkgs attribute in Nixpkgs that matches the name given in the Cabal file, then it will be added as a dependency (see the output of cabal-to-nix). Otherwise, there needs to be a mapping from Cabal file names (decided by the package author) to Nix package identifiers.

Nixpkgs overlay

The user may solve it by themself by overriding Nixpkgs and adding a package alias. For example:

nixpkgs.overlays = [
  (self: super: {
    icuuc = self.icu;
    icui18n = self.icu;
    icudata = self.icu;
  })
];

Replace libraries of components

If a component is missing a dependency it can be added via modules. For example:

project = pkgs.haskell-nix.project' {
  src = self;
  compiler-nix-name = "ghc8102";
  modules = [{
    # Replace `extra-libraries` dependencies
    packages.X11.components.library.libs = pkgs.lib.mkForce (with pkgs.xorg;
        [ libX11 libXrandr libXext libXScrnSaver libXinerama ]);
  }];
};

Mapping in Haskell.nix

Alternatively, if the name is commonly used, an alias can be added to the Haskell.nix sources, so that it's solved for all users.

Each mapping entry is a list of packages.

Each name can be mapped to: 1. A single package from nixkpgs. 2. null — eliminates the dependency 3. A list of packages — sometimes needed for dependencies such as X11.

Open a PR

Please go ahead and open a pull request to improve the package mappings.