1{ pkgs, stdenv, ghc
2, compilerConfig ? (self: super: {})
3, packageSetConfig ? (self: super: {})
4, overrides ? (self: super: {})
5}:
6
7let
8
9 fix = f: let x = f x // { __unfix__ = f; }; in x;
10
11 extend = rattrs: f: self: let super = rattrs self; in super // f self super;
12
13 haskellPackages = self:
14 let
15
16 mkDerivation = pkgs.callPackage ./generic-builder.nix {
17 inherit stdenv;
18 inherit (pkgs) fetchurl pkgconfig glibcLocales coreutils gnugrep gnused;
19 inherit (self) ghc jailbreak-cabal;
20 hscolour = overrideCabal self.hscolour (drv: {
21 isLibrary = false;
22 doHaddock = false;
23 hyperlinkSource = false; # Avoid depending on hscolour for this build.
24 postFixup = "rm -rf $out/lib $out/share $out/nix-support";
25 });
26 cpphs = overrideCabal (self.cpphs.overrideScope (self: super: {
27 mkDerivation = drv: super.mkDerivation (drv // {
28 enableSharedExecutables = false;
29 enableSharedLibraries = false;
30 doHaddock = false;
31 useCpphs = false;
32 });
33 })) (drv: {
34 isLibrary = false;
35 postFixup = "rm -rf $out/lib $out/share $out/nix-support";
36 });
37 };
38
39 overrideCabal = drv: f: drv.override (args: args // {
40 mkDerivation = drv: args.mkDerivation (drv // f drv);
41 });
42
43 callPackageWithScope = scope: drv: args: (stdenv.lib.callPackageWith scope drv args) // {
44 overrideScope = f: callPackageWithScope (mkScope (fix (extend scope.__unfix__ f))) drv args;
45 };
46
47 mkScope = scope: pkgs // pkgs.xorg // pkgs.gnome // scope;
48 defaultScope = mkScope self;
49 callPackage = drv: args: callPackageWithScope defaultScope drv args;
50
51 withPackages = packages: callPackage ./with-packages-wrapper.nix {
52 inherit (self) llvmPackages;
53 haskellPackages = self;
54 inherit packages;
55 };
56
57 in
58 import ./hackage-packages.nix { inherit pkgs stdenv callPackage; } self // {
59
60 inherit mkDerivation callPackage;
61
62 ghcWithPackages = selectFrom: withPackages (selectFrom self);
63
64 ghcWithHoogle = selectFrom:
65 let
66 packages = selectFrom self;
67 hoogle = callPackage ./hoogle.nix { inherit packages; };
68 in withPackages (packages ++ [ hoogle ]);
69
70 ghc = ghc // {
71 withPackages = self.ghcWithPackages;
72 withHoogle = self.ghcWithHoogle;
73 };
74
75 };
76
77 commonConfiguration = import ./configuration-common.nix { inherit pkgs; };
78
79in
80
81 fix (extend (extend (extend (extend haskellPackages commonConfiguration) compilerConfig) packageSetConfig) overrides)