Files
haskell.nix/docs/tutorials/pkg-map.md
T
paumr a045d79264 Updated system-nixpkgs-map.nix and a default for X11 package (fixes #984) (#988)
After investigating adding a project argument to override the
mapping of libs to packages we realised we could fix the X11
package by updating `modules/configuration-nix.nix`.

We also updated `system-nixpkgs-map.nix` to allow multiple
packages to be mapped for a single library (turned out not
to be necessary for X11).

Co-authored-by: Rodney Lorrimar <rodney.lorrimar@iohk.io>
Co-authored-by: Hamish Mackenzie <Hamish.Mackenzie@iohk.io>
2021-01-08 13:10:00 +13:00

69 lines
2.4 KiB
Markdown

# Mapping non-Haskell dependencies to Nixpkgs
Cabal files may contain dependencies to external non-Haskell
dependencies via:
* [`build-tool-depends`](https://cabal.readthedocs.io/en/latest/developing-packages.html#pkg-field-build-tool-depends)
* [`pkgconfig-depends`](https://cabal.readthedocs.io/en/latest/developing-packages.html#pkg-field-pkgconfig-depends)
* [`frameworks`](https://cabal.readthedocs.io/en/latest/developing-packages.html#pkg-field-frameworks)
* [`extra-libraries`](https://cabal.readthedocs.io/en/latest/developing-packages.html#pkg-field-extra-libraries)
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:
```nix
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:
``` nix
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.
* [`lib/pkgconf-nixpkgs-map.nix`](https://github.com/input-output-hk/haskell.nix/blob/master/lib/pkgconf-nixpkgs-map.nix)
— for `pkgconfig-depends`.
Each mapping entry is a list of packages.
* [`lib/system-nixpkgs-map.nix`](https://github.com/input-output-hk/haskell.nix/blob/master/lib/system-nixpkgs-map.nix)
— for `build-tool-depends`, `frameworks`, `extra-libraries`, etc.
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`.
!!! tip "Open a PR"
Please go ahead and open a [pull request](https://github.com/input-output-hk/haskell.nix/pulls)
to improve the package mappings.