{ pkgs ? import {} , compiler ? "ghc8102" , hoogle ? true }: let src = pkgs.nix-gitignore.gitignoreSource [] ./.; # Any overrides we require to the specified haskell package set haskellPackages = with pkgs.haskell.lib; pkgs.haskell.packages.${compiler}.override { overrides = self: super: { } // pkgs.lib.optionalAttrs hoogle { ghc = super.ghc // { withPackages = super.ghc.withHoogle; }; ghcWithPackages = self.ghc.withPackages; }; }; # Any packages to appear in the environment provisioned by nix-shell extraEnvPackages = with haskellPackages; [ ]; # Generate a haskell derivation using the cabal2nix tool on `package.yaml` drv = haskellPackages.callCabal2nix "" src {}; # Insert the extra environment packages into the environment generated by # cabal2nix envWithExtras = pkgs.lib.overrideDerivation drv.env (attrs: { buildInputs = attrs.buildInputs ++ extraEnvPackages; } // pkgs.lib.optionalAttrs hoogle { shellHook = attrs.shellHook + '' export HIE_HOOGLE_DATABASE="$(cat $(which hoogle) | sed -n -e 's|.*--database \(.*\.hoo\).*|\1|p')" ''; }); in drv // { env = envWithExtras; }