diff --git a/default.nix b/default.nix
index 2872c9e5473e278d96d76de64caeea5a8f46bd38..85743b914393847fa8adc383ade8d394f06fa7cd 100644
--- a/default.nix
+++ b/default.nix
@@ -44,8 +44,15 @@ let
     bootstrapHaskellPackages = self.haskell.packages.ghc865;
 
     haskellPackages =
-      let patchesOverrides = self.callPackage patches {};
-          patches = self.callPackage (import ./scripts/overrides.nix) { patches = ./patches; };
+      let patchesOverrides = self.callPackage patches {
+            extraDepends = import scripts/extra-depends.nix {
+              pkgs = self;
+              hsPkgs = haskellPackages;
+            };
+          };
+          patches = self.callPackage (import ./scripts/overrides.nix) {
+            patches = ./patches;
+          };
           overrides =
             self.lib.composeExtensions
               haskellOverrides
diff --git a/scripts/extra-depends.nix b/scripts/extra-depends.nix
new file mode 100644
index 0000000000000000000000000000000000000000..96f5bedbc96ff054a76f5a41c0dc72e6a613b58e
--- /dev/null
+++ b/scripts/extra-depends.nix
@@ -0,0 +1,5 @@
+{ pkgs, hsPkgs }:
+
+{
+  zlib = { inherit (pkgs) zlib; };
+}
diff --git a/scripts/generate-nix-overrides.hs b/scripts/generate-nix-overrides.hs
index 9096a05efd0e00a1a645d4d3d507e82450658f47..a70c519836f5dcb35ca15078fc4828006686d95b 100755
--- a/scripts/generate-nix-overrides.hs
+++ b/scripts/generate-nix-overrides.hs
@@ -29,19 +29,14 @@ generateOverrides prefix patchDir = do
 
 mkOverride :: (PackageName, [([Int], String)]) -> String
 mkOverride (display -> pName, patches) =
-  unlines $
-    [unwords [pName, "= if", superPname, "== null then", superPname]]
-     ++ packages ++
-    [ "else", superPname, ";"]
+  unlines [ unwords $ [ pName, "=" ] ++ packages ++ [";"] ]
   where
     superPname = "super." ++ pName
     quotes s = "\"" ++ s ++ "\""
     packages :: [String]
     packages = map mkPackages (sortBy (comparing fst) patches)
     mkPackages (version, patch) =
-      unwords ["else if", superPname ++ ".version == "
-                        ,  quotes (intercalate "." (map show version))
-                        ," then (", patch, ")"]
+      unwords ["(", patch, ")"]
 
 override :: FilePath -> FilePath -> FilePath -> String -> PatchType -> String
 override prefix patchDir extlessPath nixexpr ptype =
@@ -55,11 +50,7 @@ generateOverride prefix patchDir (patchExtless, patchTypes) = do
       version = versionNumbers (packageVersion pid)
       versionStr = intercalate "." (map show version)
       str x = "\""++x++"\""
-      --baseDrv = "super."++pname
-      --baseDrv = "(super.callHackage "++str pname++" "++str versionStr++" {})"
-      baseDrv =
-        let src = "fetchHackageTarball "++str pname++" "++str versionStr++" {})"
-        in "(super."++pname++".overrideAttrs (oldAttrs: { src="++str src++"; version="++str versionStr++"; }))"
+      baseDrv = "(super.callHackage "++str pname++" "++str versionStr++" (extraDepends."++pname++" or {}))"
   return . (packageName pid,) . (version,) $
     "haskell.lib.doJailbreak (dontRevise "
     ++ foldl' (override prefix patchDir patchExtless) baseDrv patchTypes ++ ")"
@@ -92,10 +83,9 @@ main = do
                 [prefix, dir] -> return (prefix, dir)
                 _     -> fail "Usage: generate-nix-overrides [<prefix>, patchdir]"
   overrides <- generateOverrides prefix patchDir
-  putStrLn "{haskell}:"
+  putStrLn "{ haskell, extraDepends ? {} }:"
   putStrLn "let dontRevise = pkg: haskell.lib.overrideCabal pkg (old: { editedCabalFile = null; }); in"
   putStrLn "let setCabalFile = pkg: file: haskell.lib.overrideCabal pkg (old: { postPatch = ''cp ${file} ${old.pname}.cabal''; }); in"
-  putStrLn "let fetchHackageTarball = pname: version: let component = haskellPackages.all-cabal-hashes-component pname version; v
   putStrLn "self: super: {\n"
   putStrLn overrides
   putStrLn "}"