1/*
2 If user need access to more haskell package for building his
3 diagrams, he simply has to pass these package through the
4 extra packages function as follow in `config.nix`:
5
6 ~~~
7 diagrams-builder.override {
8 extraPackages = self : [myHaskellPackage];
9 }
10 ~~~
11*/
12
13{
14 lib,
15 stdenv,
16 ghcWithPackages,
17 makeWrapper,
18 diagrams-builder,
19 extraPackages ? (self: [ ]),
20}:
21
22let
23
24 # Used same technique as for the yiCustom package.
25 wrappedGhc = ghcWithPackages (self: [ diagrams-builder ] ++ extraPackages self);
26 ghc = lib.getExe' wrappedGhc "ghc";
27
28 exeWrapper = backend: ''
29 makeWrapper \
30 "${diagrams-builder}/bin/diagrams-builder-${backend}" "$out/bin/diagrams-builder-${backend}" \
31 --set NIX_GHC ${ghc} \
32 --set NIX_GHC_LIBDIR "$(${ghc} --print-libdir)"
33 '';
34
35 backends = [
36 "svg"
37 "cairo"
38 "ps"
39 ];
40
41in
42
43stdenv.mkDerivation {
44 name = "diagrams-builder";
45
46 nativeBuildInputs = [ makeWrapper ];
47
48 buildCommand = lib.concatStringsSep "\n" (map exeWrapper backends);
49
50 # Will be faster to build the wrapper locally then to fetch it from a binary cache.
51 preferLocalBuild = true;
52 meta = diagrams-builder.meta;
53}