at v206 81 lines 2.7 kB view raw
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)