@@ -531,7 +531,7 @@ final: prev: {
531531 tools = final.buildPackages.haskell-nix.tools pkg-set.config.compiler.nix-name;
532532 roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
533533 projectFunction = haskell-nix: haskell-nix.cabalProject';
534− inherit projectModule;
534+ inherit projectModule args;
535535 };
536536 in project);
537537
@@ -793,7 +793,7 @@ final: prev: {
793793 tools = final.buildPackages.haskell-nix.tools pkg-set.config.compiler.nix-name;
794794 roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
795795 projectFunction = haskell-nix: haskell-nix.stackProject';
796− inherit projectModule;
796+ inherit projectModule args;
797797 };
798798 in project);
799799
@@ -809,9 +809,17 @@ final: prev: {
809809 # selected file ends in a `.yaml` it is assumed to be for `stackProject`.
810810 # If neither `stack.yaml` nor `cabal.project` exist `cabalProject` is
811811 # used (as it will use a default `cabal.project`).
812− project' = { src, projectFileName ? null, ... }@args':
812+ project' = projectModule:
813813 let
814− args = { caller = "project'"; } // final.lib.filterAttrs (n: _: n != "projectFileName") args';
814+ projectModule' = if builtins.isList projectModule then projectModule else [projectModule];
815+ inherit ((final.lib.evalModules {
816+ modules = [
817+ (import ../modules/project-common.nix)
818+ (import ../modules/stack-project.nix)
819+ (import ../modules/cabal-project.nix)
820+ (import ../modules/project.nix)
821+ ] ++ projectModule';
822+ }).config) src projectFileName;
815823 dir = __readDir (src.origSrcSubDir or src);
816824 exists = fileName: builtins.elem (dir.${fileName} or "") ["regular" "symlink"];
817825 stackYamlExists = exists "stack.yaml";
@@ -829,15 +837,19 @@ final: prev: {
829837 else "cabal.project"; # the cabal.project file is optional
830838 in
831839 if final.lib.hasSuffix ".yaml" selectedFileName
832− then stackProject' (args // { stackYaml = selectedFileName; })
833− else cabalProject' (args // { cabalProjectFileName = selectedFileName; });
840+ then stackProject' ([
841+ (import ../modules/project.nix)
842+ { caller = "project'"; stackYaml = selectedFileName; }
843+ ] ++ projectModule'
844+ )
845+ else cabalProject' ([
846+ (import ../modules/project.nix)
847+ { caller = "project'"; cabalProjectFileName = selectedFileName; }
848+ ] ++ projectModule');
834849
835850 # This is the same as the `cabalPackage` and `stackPackage` wrappers
836851 # for `cabalPackage` and `stackPackage`.
837− project = args':
838− let
839− args = { caller = "project"; } // args';
840− p = project' args;
852+ project = args: let p = project' args;
841853 in p.hsPkgs // p;
842854
843855 # Like `cabalProject'`, but for building the GHCJS compiler.