From 01e047d0887ae4be165823109ebd095cd8025813 Mon Sep 17 00:00:00 2001 From: Shea Levy <shea@shealevy.com> Date: Sat, 10 Jun 2017 20:04:46 -0400 Subject: [PATCH] Add haskellPackages.developPackage for local development default.nixes --- pkgs/development/haskell-modules/default.nix | 12 +++++++----- .../haskell-modules/make-package-set.nix | 15 ++++++++++++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/pkgs/development/haskell-modules/default.nix b/pkgs/development/haskell-modules/default.nix index 8e7d19e089fd..6b5812cd07f5 100644 --- a/pkgs/development/haskell-modules/default.nix +++ b/pkgs/development/haskell-modules/default.nix @@ -12,17 +12,19 @@ let haskellPackages = makePackageSet { package-set = initialPackages; - inherit ghc; + inherit ghc extensible-self; }; commonConfiguration = import ./configuration-common.nix { inherit pkgs; }; nixConfiguration = import ./configuration-nix.nix { inherit pkgs; }; -in - - makeExtensible + extensible-self = makeExtensible (extends overrides (extends packageSetConfig (extends compilerConfig (extends commonConfiguration - (extends nixConfiguration haskellPackages))))) + (extends nixConfiguration haskellPackages))))); + +in + + extensible-self diff --git a/pkgs/development/haskell-modules/make-package-set.nix b/pkgs/development/haskell-modules/make-package-set.nix index 52988dc4cbbe..f933d6ebfeb9 100644 --- a/pkgs/development/haskell-modules/make-package-set.nix +++ b/pkgs/development/haskell-modules/make-package-set.nix @@ -7,7 +7,8 @@ # arguments: # * ghc package to use # * package-set: a function that takes { pkgs, stdenv, callPackage } as first arg and `self` as second -{ ghc, package-set }: +# * extensible-self: the final, fully overriden package set usable with the nixpkgs fixpoint overriding functionality +{ ghc, package-set, extensible-self }: # return value: a function from self to the package set self: let @@ -128,6 +129,18 @@ in package-set { inherit pkgs stdenv callPackage; } self // { else self.callHackage; in generateExprs name src {}) overrides; + # : { root : Path, source-overrides : Defaulted (Either Path VersionNumber } -> NixShellAwareDerivation + # Given a path to a haskell package directory whose cabal file is + # named the same as the directory name, and an optional set of + # source overrides as appropriate for the 'packageSourceOverrides' + # function, return a derivation appropriate for nix-build or nix-shell + # to build that package. + developPackage = { root, source-overrides ? {} }: + let name = builtins.baseNameOf root; + drv = + (extensible-self.extend (self.packageSourceOverrides source-overrides)).callCabal2nix name root {}; + in if pkgs.lib.inNixShell then drv.env else drv; + ghcWithPackages = selectFrom: withPackages (selectFrom self); ghcWithHoogle = selectFrom: