{ makeEnv ? false, config ? { allowBroken = true; }, ... }: let # fetch pinned version of nixpkgs nixpkgs = import ( builtins.fetchTarball { # fetch latest nixpkgs https://github.com/NixOS/nixpkgs-channels/tree/nixos-20.03 as of Tue 18 Aug 2020 02:51:27 PM UTC url = "https://github.com/NixOS/nixpkgs-channels/archive/cb1996818edf506c0d1665ab147c253c558a7426.tar.gz"; sha256 = "0lb6idvg2aj61nblr41x0ixwbphih2iz8xxc05m69hgsn261hk3j"; } ) { inherit config; }; # override haskell compiler version, add and override dependencies in nixpkgs haskellPackages = nixpkgs.haskell.packages."ghc8101".override ( old: { all-cabal-hashes = nixpkgs.fetchurl { # fetch latest cabal hashes https://github.com/commercialhaskell/all-cabal-hashes/tree/hackage as of Tue 18 Aug 2020 02:51:27 PM UTC url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/112fef7b4bf392d4d4c36fbbe00ed061685ba26c.tar.gz"; sha256 = "0x0mkpwnndw7n62l089gimd76n9gy749giban9pacf5kxbsfxrdc"; }; overrides = self: super: with nixpkgs.haskell.lib; rec { mkDerivation = args: super.mkDerivation ( args // { doCheck = false; doHaddock = false; jailbreak = true; } ); # test dependencies git = overrideCabal (self.callHackage "git" "0.3.0" {}) ( old: { patches = [ ./git-0.3.0_fix-monad-fail-for-ghc-8.10.1.patch ]; # git-0.3.0 defines a Monad a fail function, which is incompatible with ghc-8.10.1 https://hackage.haskell.org/package/git-0.3.0/docs/src/Data.Git.Monad.html#line-240 } ); # build dependencies; using latest hackage releases as of Tue 18 Aug 2020 02:51:27 PM UTC memory = self.callHackage "memory" "0.15.0" {}; }; } ); # function to bring devtools in to a package environment devtools = old: { nativeBuildInputs = old.nativeBuildInputs ++ [ nixpkgs.cabal-install nixpkgs.ghcid ]; }; # ghc and hpack are automatically included # ignore files specified by gitignore in nix-build source = nixpkgs.nix-gitignore.gitignoreSource [] ./.; # use overridden-haskellPackages to call gitignored-source drv = nixpkgs.haskell.lib.overrideCabal (haskellPackages.callCabal2nix "liquid-fixpoint" source {}) ( old: { buildTools = [ nixpkgs.z3 ]; doCheck = true; doHaddock = true; preCheck = ''export PATH="$PWD/dist/build/fixpoint:$PATH"''; # bring the `fixpoint` binary into scope for tests run by nix-build } ); in if makeEnv then drv.env.overrideAttrs devtools else drv