@@ -1,22 +1,60 @@
1+{-# LANGUAGE OverloadedStrings, GeneralizedNewtypeDeriving #-}
2+{-# LANGUAGE RecordWildCards #-}
1module Distribution.Nixpkgs.Haskell.Stack where
4module Distribution.Nixpkgs.Haskell.Stack where
3−import Text.PrettyPrint
6+import Language.Nix
7+import Language.Nix.PrettyPrinting
9+data StackConfig = StackConfig
10+ { stackageVersion :: String }
12+data OverrideConfig = OverrideConfig
13+ { stackageCompilerConfig :: FilePath
14+ -- ^ Nixpkgs compiler config for Stackage packages set
15+ , stackagePackagesConfig :: FilePath
16+ -- ^ Nixpkgs packages config for Stackage packages set
17+ , haskellPackagesOverride :: Identifier
18+ -- ^ 'pkgs.haskell.packages.<compiler>' to override
21+overrideConfigFixture :: OverrideConfig
22+overrideConfigFixture = OverrideConfig
23+ { stackageCompilerConfig = "./haskell-modules/configuration-6_30.nix"
24+ , stackagePackagesConfig = "./haskell-modules/packages-6_30.nix"
25+ , haskellPackagesOverride = "ghc7103" }
27+stackageCompilerConfigFun :: FilePath -> Doc
28+stackageCompilerConfigFun p =
29+ funargs [text "superPkgs"] $$ "import" <+> string p
31+ <+> text "inherit (superPkgs) pkgs;"
34+nixLet :: [Doc] -> Doc
5−nixpkgsOverride :: Doc
40+nixpkgsOverride :: OverrideConfig -> Doc
6−nixpkgsOverride = vcat
41+nixpkgsOverride OverrideConfig {..} = vcat
7 [ text "{ nixpkgs ? import <nixpkgs> {}, compiler ? \"default\" }: "
42 [ text "{ nixpkgs ? import <nixpkgs> {}, compiler ? \"default\" }: "
9− , text "let"
44+ , nixLet
10− , text " inherit (nixpkgs.stdenv.lib) extends;"
45+ [ text "inherit (nixpkgs.stdenv.lib) extends;"
46+ , attr "stackageCompilerConfig" $ stackageCompilerConfigFun stackageCompilerConfig
47+ , attr "stackagePackagesConfig" $ stackageCompilerConfigFun stackagePackagesConfig
11− , text " packageOverrides = super: let self = super.pkgs; in"
48+ , text "packageOverrides = super: let self = super.pkgs; in"
12− , text " {"
49+ , text "{"
13− , text " pkgs = super.pkgs // {"
50+ , text " pkgs = super.pkgs // {"
14− , text " haskell = super.pkgs.haskell // {"
51+ , text " haskell = super.pkgs.haskell // {"
15− , text " packages = super.pkgs.haskell.packages // {"
52+ , text " packages = super.pkgs.haskell.packages // {"
16− , text " ${compiler} = super.pkgs.haskell.packages.ghc7103.override {};"
53+ , text " \"${compiler}\" = super.pkgs.haskell.packages." <> disp haskellPackagesOverride <> ".override {};"
17− , text " };"
54+ , text " };"
18− , text " };"
55+ , text " };"
19− , text " };"
56+ , text " };"
20− , text " };"
57+ , text "};"
21− , text "in packageOverrides nixpkgs"
58+ , text "in packageOverrides nixpkgs"