diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,19 @@
+# Revision History for cabal2nix
+
+## 2.18.0
+
+* Support GHC 9.0.x and Cabal 3.4.0.0,
+  **API breaking change**
+  (See [#503](https://github.com/NixOS/cabal2nix/pull/503))
+* Fix fetching remote _archives_: Previously they weren't properly
+  unpacked, **API breaking change**
+  (See [#455](https://github.com/NixOS/cabal2nix/pull/455))
+* Resolution of system dependency attribute names in nixpkgs
+  * Update changed upstream attribute names, reflect deprecations
+  * Fix hackage2nix not resolving certain attribute names if multiple
+    attribute names referred to the same derivation.
+    (See [#492](https://github.com/NixOS/cabal2nix/pull/492) and
+    [distribution-nixpkgs#10](https://github.com/NixOS/distribution-nixpkgs/pull/10))
+* hackage2nix: accept multiple config files at the command
+  line given by specifying `--config` more than once
+  (See [#494](https://github.com/NixOS/cabal2nix/pull/494))
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -68,16 +68,47 @@
 
 ## Building
 
-For ease of contribution, we support these methods to build `cabal2nix`:
+`cabal2nix` is built using [`cabal-install`](https://www.haskell.org/cabal/),
+like you'd expect, and you are free to use your favourite way of setting up
+a Haskell development environment.
 
-* `stack build` if you have [_Stack_](http://haskellstack.org/)
-  * The Stack build can use system dependencies from a pinned nixpkgs
-    version for increased reproducibility (see [`stack.yaml`](./stack.yaml)).
-    On NixOS this happens automatically.
-    On non-NixOS, use `stack --nix build` for that.
-* `cabal install` if you have [_cabal-install_](https://www.haskell.org/cabal/)
-  installed
-* TODO: Add a build method that requires only `nix` preinstalled,
-  also pins nixpkgs, and is thus fully reproducible.
+Since `cabal2nix` is quite intertwined with the packages `distribution-nixpkgs`
+and `hackage-db`, we recommend setting up a shared development environment
+for the three packages like so:
 
-When making changes, please ensure that all these methods continue to work.
+```console
+$ mkdir /path/to/cabal2nix-root && cd /path/to/cabal2nix-root
+$ # clone repositories, note that you may need to checkout an
+$ # older tag for some depending on breaking changes on master.
+$ git clone https://github.com/NixOS/cabal2nix.git
+$ git clone https://github.com/NixOS/hackage-db.git
+$ git clone https://github.com/NixOS/distribution-nixpkgs.git
+$ # setup development environment with shellFor
+$ cat > shell.nix << EOF
+# assumes nix{os,pkgs}-unstable
+{ pkgs ? import <nixpkgs> {} }:
+
+pkgs.haskellPackages.shellFor {
+  packages = p: [
+    p.cabal2nix-unstable
+    p.distribution-nixpkgs
+    p.hackage-db
+  ];
+
+  # for running doctests locally
+  nativeBuildInputs = [
+    pkgs.haskellPackages.doctest
+  ];
+
+  # set environment variable, so the development version of
+  # distribution-nixpkgs finds derivation-attr-paths.nix
+  distribution_nixpkgs_datadir = toString ./distribution-nixpkgs;
+}
+EOF
+$ # tell cabal about local packages
+$ cat > cabal.project << EOF
+packages: ./*/*.cabal
+EOF
+$ # test our new development environment
+$ nix-shell --run "cabal v2-build exe:cabal2nix exe:hackage2nix"
+```
diff --git a/cabal2nix.cabal b/cabal2nix.cabal
--- a/cabal2nix.cabal
+++ b/cabal2nix.cabal
@@ -1,5 +1,5 @@
 name:               cabal2nix
-version:            2.17.0
+version:            2.18.0
 synopsis:           Convert Cabal files into Nix build instructions.
 description:
   Convert Cabal files into Nix build instructions. Users of Nix can install the latest
@@ -8,31 +8,17 @@
   > nix-env -i cabal2nix
 license:            BSD3
 license-file:       LICENSE
-author:             Peter Simons, Andres Loeh, Benno Fünfstück, Mateusz Kowalczyk,
-                    Michael Alan Dorman, Tom Smalley, Mathijs Kwik, Shea Levy, Dmitry
-                    Malikov, Eric Seidel, Jacob Mitchell, Graham Christensen,
-                    Hamish Mackenzie, Nikolay Amiantov, Aycan iRiCAN, Bryan
-                    Gardiner, Joe Hermaszewski, John Wiegley, Philipp Hausmann,
-                    Spencer Janssen, Tom Hunger, William Casarin, koral,
-                    ksaric, Adam Vogt, Alexey Shmalko, Corey O'Connor, Cray
-                    Elliott, David Johnson, Dmitry Bushev, Domen Kožar, Felix
-                    Kunzmann, Gabriel Ebner, Gergely Risko, Joachim Fasting,
-                    John Albietz, John Chee, Jussi Maki, Lisanna Dettwyler,
-                    Mark Laws, Mark Wotton, Matthew Pickering, Matthew Stewart,
-                    Matvey Aksenov, Nicholas Clarke, Nicolas Rolland, Oliver
-                    Charles, Pascal Wittmann, Patrick John Wheeler, Phil de
-                    Joux, Piotr Bogdan, Profpatsch, Raymond Gauthier, Renzo
-                    Carbonara, Rodney Lorrimar, Sibi, Sukant Hajra, Tanner
-                    Doshier, Vaibhav Sagar, Viktar Basharymau, danbst, karsten
-                    gebbert, laMudri, Александр Цамутали
-maintainer:         Peter Simons <simons@cryp.to>
+author:             Peter Simons <simons@cryp.to>
+-- list all contributors: git log --pretty='%an' | sort | uniq
+maintainer:         sternenseemann <sternenseemann@systemli.org>
 stability:          stable
-tested-with:        GHC == 8.10.3
+tested-with:        GHC == 8.10.4 || == 9.0.1
 category:           Distribution, Nix
 homepage:           https://github.com/nixos/cabal2nix#readme
 bug-reports:        https://github.com/nixos/cabal2nix/issues
 build-type:         Simple
 extra-source-files: README.md
+                    CHANGELOG.md
                     test/golden-test-cases/*.cabal
                     test/golden-test-cases/*.nix.golden
 cabal-version:      1.24
@@ -114,7 +100,7 @@
                     , cabal2nix
                     , containers
                     , directory
-                    , distribution-nixpkgs >= 1.2
+                    , distribution-nixpkgs >= 1.6
                     , filepath
                     , hopenssl             >= 2
                     , language-nix
diff --git a/hackage2nix/Main.hs b/hackage2nix/Main.hs
--- a/hackage2nix/Main.hs
+++ b/hackage2nix/Main.hs
@@ -29,6 +29,7 @@
 import Distribution.Package
 import Distribution.PackageDescription hiding ( options, extraLibs, buildTools, homepage )
 import Distribution.System
+import Distribution.Types.PackageVersionConstraint
 import Distribution.Text
 import Distribution.Version
 import Language.Nix
@@ -37,6 +38,9 @@
 import System.FilePath
 import System.IO
 import Text.PrettyPrint.HughesPJClass hiding ( (<>) )
+import Data.List.NonEmpty (NonEmpty)
+import Data.Semigroup (sconcat)
+import Options.Applicative.NonEmpty (some1)
 
 type PackageSet = Map PackageName Version
 type PackageMultiSet = Map PackageName (Set Version)
@@ -45,7 +49,7 @@
   { hackageRepository :: FilePath
   , preferredVersionsFile :: Maybe FilePath
   , nixpkgsRepository :: FilePath
-  , configFile :: FilePath
+  , configFiles :: NonEmpty FilePath
   , targetPlatform :: Platform
   }
   deriving (Show)
@@ -57,7 +61,7 @@
         <$> strOption (long "hackage" <> help "path to Hackage git repository" <> value "hackage" <> showDefaultWith id <> metavar "PATH")
         <*> optional (strOption (long "preferred-versions" <> help "path to Hackage preferred-versions file" <> value "hackage/preferred-versions" <> showDefault <> metavar "PATH"))
         <*> strOption (long "nixpkgs" <> help "path to Nixpkgs repository" <> value "nixpkgs" <> showDefaultWith id <> metavar "PATH")
-        <*> strOption (long "config" <> help "path to configuration file inside of Nixpkgs" <> value "pkgs/development/haskell-modules/configuration-hackage2nix.yaml" <> showDefaultWith id <> metavar "PATH")
+        <*> some1 (strOption (long "config" <> help "path to configuration file inside of Nixpkgs" <> metavar "PATH"))
         <*> option (fmap fromString str) (long "platform" <> help "target platform to generate package set for" <> value "x86_64-linux" <> showDefaultWith display <> metavar "PLATFORM")
 
       pinfo :: ParserInfo CLI
@@ -71,8 +75,8 @@
               )
   CLI {..} <- execParser pinfo
 
-  config <- readConfiguration (nixpkgsRepository </>  configFile)
-  nixpkgs <- readNixpkgPackageMap ["-f", nixpkgsRepository, "--arg", "config", "{ allowAliases = false; }"]
+  config <- sconcat <$> mapM (\file -> readConfiguration (nixpkgsRepository </> file)) configFiles
+  nixpkgs <- readNixpkgPackageMap nixpkgsRepository (Just "{ config = { allowAliases = false; }; }")
   preferredVersions <- readPreferredVersions (fromMaybe (hackageRepository </> "preferred-versions") preferredVersionsFile)
   let fixup = Map.delete "acme-everything"      -- TODO: https://github.com/NixOS/cabal2nix/issues/164
             . Map.delete "som"                  -- TODO: https://github.com/NixOS/cabal2nix/issues/164
@@ -94,7 +98,7 @@
       latestVersionSet = Map.map Set.findMax (Map.filter (not . Set.null) (Map.mapWithKey (enforcePreferredVersions preferredVersions) hackage))
 
       defaultPackageOverridesSet :: PackageSet
-      defaultPackageOverridesSet = Map.fromList [ (name, resolveConstraint c hackage) | c@(Dependency name _ _) <- defaultPackageOverrides config ]
+      defaultPackageOverridesSet = Map.fromList [ (name, resolveConstraint c hackage) | c@(PackageVersionConstraint name _) <- defaultPackageOverrides config ]
 
       generatedDefaultPackageSet :: PackageSet
       generatedDefaultPackageSet = (defaultPackageOverridesSet `Map.union` latestVersionSet) `Map.difference` corePackageSet
@@ -107,7 +111,7 @@
 
       extraPackageSet :: PackageMultiSet
       extraPackageSet = Map.unionsWith Set.union
-                          [ Map.singleton name (Set.singleton (resolveConstraint c hackage)) | c@(Dependency name _ _) <- extraPackages config ]
+                          [ Map.singleton name (Set.singleton (resolveConstraint c hackage)) | c@(PackageVersionConstraint name _) <- extraPackages config ]
 
       db :: PackageMultiSet
       db = Map.unionsWith Set.union [ Map.map Set.singleton generatedDefaultPackageSet
@@ -116,8 +120,8 @@
                                     , extraPackageSet
                                     ]
 
-      haskellResolver :: Dependency -> Bool
-      haskellResolver (Dependency name vrange _)
+      haskellResolver :: HaskellResolver
+      haskellResolver (PackageVersionConstraint name vrange)
         | Just v <- Map.lookup name corePackageSet                = v `withinRange` vrange
         | Just v <- Map.lookup name generatedDefaultPackageSet    = v `withinRange` vrange
         | otherwise                                               = False
@@ -139,7 +143,7 @@
       let isInDefaultPackageSet, isHydraEnabled, isBroken :: Bool
           isInDefaultPackageSet = (== Just v) (Map.lookup name generatedDefaultPackageSet)
           isHydraEnabled = isInDefaultPackageSet && not (isBroken || name `Set.member` dontDistributePackages config)
-          isBroken = any (withinRange v) [ vr | Dependency pn vr _ <- brokenPackages config, pn == name ]
+          isBroken = any (withinRange v) [ vr | PackageVersionConstraint pn vr <- brokenPackages config, pn == name ]
 
           droppedPlatforms :: Set Platform
           droppedPlatforms = Map.findWithDefault mempty name (unsupportedPlatforms config)
@@ -206,7 +210,7 @@
                       ]
 
 resolveConstraint' :: Constraint -> Hackage -> Maybe Version
-resolveConstraint' (Dependency name vrange _) hackage
+resolveConstraint' (PackageVersionConstraint name vrange) hackage
   | Just vset' <- Map.lookup name hackage
   , vset <- Set.filter (`withinRange` vrange) vset'
   , not (Set.null vset)         = Just (Set.findMax vset)
diff --git a/src/Distribution/Nixpkgs/Fetch.hs b/src/Distribution/Nixpkgs/Fetch.hs
--- a/src/Distribution/Nixpkgs/Fetch.hs
+++ b/src/Distribution/Nixpkgs/Fetch.hs
@@ -108,11 +108,12 @@
 fetch optSubModules f = runMaybeT . fetchers where
   fetchers :: Source -> MaybeT IO (DerivationSource, a)
   fetchers source = msum . (fetchLocal source :) $ map (\fetcher -> fetchWith fetcher source >>= process)
-    [ (False, "url", [])
-    , (True, "git", ["--fetch-submodules" | optSubModules ])
-    , (True, "hg", [])
-    , (True, "svn", [])
-    , (True, "bzr", [])
+    [ (False, "url", Nothing, [])
+    , (False, "zip", Just "nix-prefetch-url", ["--unpack"])
+    , (True, "git", Nothing, ["--fetch-submodules" | optSubModules ])
+    , (True, "hg", Nothing, [])
+    , (True, "svn", Nothing, [])
+    , (True, "bzr", Nothing, [])
     ]
 
   -- | Remove '/' from the end of the path. Nix doesn't accept paths that
@@ -133,7 +134,7 @@
   localArchive :: FilePath -> MaybeT IO (DerivationSource, a)
   localArchive path = do
     absolutePath <- liftIO $ canonicalizePath path
-    unpacked <- snd <$> fetchWith (False, "url", ["--unpack"]) (Source ("file://" ++ absolutePath) "" UnknownHash ".")
+    unpacked <- snd <$> fetchWith (False, "url", Nothing, ["--unpack"]) (Source ("file://" ++ absolutePath) "" UnknownHash ".")
     process (localDerivationSource absolutePath, unpacked)
 
   process :: (DerivationSource, FilePath) -> MaybeT IO (DerivationSource, a)
@@ -142,8 +143,8 @@
   localDerivationSource p = DerivationSource "" p "" "" Nothing
 
 -- | Like 'fetch', but allows to specify which script to use.
-fetchWith :: (Bool, String, [String]) -> Source -> MaybeT IO (DerivationSource, FilePath)
-fetchWith (supportsRev, kind, addArgs) source = do
+fetchWith :: (Bool, String, Maybe String, [String]) -> Source -> MaybeT IO (DerivationSource, FilePath)
+fetchWith (supportsRev, kind, command, addArgs) source = do
   unless ((sourceRevision source /= "") || isUnknown (sourceHash source) || not supportsRev) $
     liftIO (hPutStrLn stderr "** need a revision for VCS when the hash is given. skipping.") >> mzero
 
@@ -173,14 +174,14 @@
                                               , derivHash = BS.unpack (head ls)
                                               , derivSubmodule = Nothing
                                               }
-                            , sourceUrl source))
+                            , BS.unpack l))
           _ -> case eitherDecode buf' of
                  Left err -> error ("invalid JSON: " ++ err ++ " in " ++ show buf')
                  Right ds -> return (Just (ds { derivKind = kind }, BS.unpack l))
  where
 
    script :: String
-   script = "nix-prefetch-" ++ kind
+   script = fromMaybe ("nix-prefetch-" ++ kind) command
 
    args :: [String]
    args = addArgs ++ sourceUrl source : [ sourceRevision source | supportsRev ] ++ hashToList (sourceHash source)
diff --git a/src/Distribution/Nixpkgs/Haskell/Constraint.hs b/src/Distribution/Nixpkgs/Haskell/Constraint.hs
--- a/src/Distribution/Nixpkgs/Haskell/Constraint.hs
+++ b/src/Distribution/Nixpkgs/Haskell/Constraint.hs
@@ -1,15 +1,19 @@
 module Distribution.Nixpkgs.Haskell.Constraint
-  ( Constraint, satisfiesConstraint, satisfiesConstraints
+  ( Constraint, constraintPkgName, satisfiesConstraint, satisfiesConstraints
   ) where
 
 import Distribution.Package
 import Distribution.Version
+import Distribution.Types.PackageVersionConstraint
 import Distribution.Nixpkgs.Haskell.OrphanInstances ( )
 
-type Constraint = Dependency
+type Constraint = PackageVersionConstraint
 
+constraintPkgName :: Constraint -> PackageName
+constraintPkgName (PackageVersionConstraint n _) = n
+
 satisfiesConstraint :: PackageIdentifier -> Constraint -> Bool
-satisfiesConstraint (PackageIdentifier pn v) (Dependency cn vr _) = (pn /= cn) || (v `withinRange` vr)
+satisfiesConstraint (PackageIdentifier pn v) (PackageVersionConstraint cn vr) = (pn /= cn) || (v `withinRange` vr)
 
 satisfiesConstraints :: PackageIdentifier -> [Constraint] -> Bool
 satisfiesConstraints p = all (satisfiesConstraint p)
diff --git a/src/Distribution/Nixpkgs/Haskell/FromCabal.hs b/src/Distribution/Nixpkgs/Haskell/FromCabal.hs
--- a/src/Distribution/Nixpkgs/Haskell/FromCabal.hs
+++ b/src/Distribution/Nixpkgs/Haskell/FromCabal.hs
@@ -26,6 +26,7 @@
 import qualified Distribution.PackageDescription as Cabal
 import Distribution.PackageDescription.Configuration as Cabal
 import Distribution.System
+import Distribution.Types.PackageVersionConstraint
 import Distribution.Text ( display )
 import Distribution.Types.ComponentRequestedSpec as Cabal
 import Distribution.Types.ExeDependency as Cabal
@@ -36,7 +37,7 @@
 import Distribution.Version
 import Language.Nix
 
-type HaskellResolver = Dependency -> Bool
+type HaskellResolver = PackageVersionConstraint -> Bool
 type NixpkgsResolver = Identifier -> Maybe Binding
 
 fromGenericPackageDescription :: HaskellResolver -> NixpkgsResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> Derivation
@@ -48,10 +49,26 @@
 finalizeGenericPackageDescription :: HaskellResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> (PackageDescription, [Dependency])
 finalizeGenericPackageDescription haskellResolver arch compiler flags constraints genDesc =
   let
+    -- finalizePD incooperates the 'LibraryName' of a dependency
+    -- which we always ignore, so the Cabal-compatible resolver
+    -- is a simple wrapper around our 'HaskellResolver'
+    makeCabalResolver :: HaskellResolver -> Dependency -> Bool
+    makeCabalResolver r (Dependency n v _) = r (PackageVersionConstraint n v)
+
+    -- the finalizePD API changed in Cabal 3.4.0.0, so we need to do some plumbing.
+    -- See https://github.com/haskell/cabal/issues/5570
+#if MIN_VERSION_Cabal(3,4,0)
+    makeCabalConstraints :: [Constraint] -> [PackageVersionConstraint]
+    makeCabalConstraints = id
+#else
+    makeCabalConstraints :: [Constraint] -> [Dependency]
+    makeCabalConstraints = map $ \(PackageVersionConstraint n v) -> Dependency n v mempty
+#endif
+
     -- We have to call the Cabal finalizer several times with different resolver
     -- functions, and this convenience function makes our code shorter.
     finalize :: HaskellResolver -> Either [Dependency] (PackageDescription,FlagAssignment)
-    finalize resolver = finalizePD flags requestedComponents resolver arch compiler constraints genDesc
+    finalize resolver = finalizePD flags requestedComponents (makeCabalResolver resolver) arch compiler (makeCabalConstraints constraints) genDesc
 
     requestedComponents :: ComponentRequestedSpec
     requestedComponents = ComponentRequestedSpec
@@ -60,10 +77,10 @@
                           }
 
     jailbroken :: HaskellResolver -> HaskellResolver
-    jailbroken resolver (Dependency pkg _ _) = resolver (Dependency pkg anyVersion mempty)
+    jailbroken resolver (PackageVersionConstraint pkg _) = resolver (PackageVersionConstraint pkg anyVersion)
 
     withInternalLibs :: HaskellResolver -> HaskellResolver
-    withInternalLibs resolver d = depPkgName d `elem` internalNames || resolver d
+    withInternalLibs resolver c = constraintPkgName c `elem` internalNames || resolver c
 
     internalNames :: [PackageName]
     internalNames =    [ unqualComponentNameToPackageName n | (n,_) <- condSubLibraries genDesc ]
@@ -152,7 +169,7 @@
       | otherwise                        = bindNull i
 
     resolveInHackageThenNixpkgs :: Identifier -> Binding
-    resolveInHackageThenNixpkgs i | haskellResolver (Dependency (mkPackageName (i^.ident)) anyVersion mempty) = resolveInHackage i
+    resolveInHackageThenNixpkgs i | haskellResolver (PackageVersionConstraint (mkPackageName (i^.ident)) anyVersion) = resolveInHackage i
                                   | otherwise = resolveInNixpkgs i
 
     internalLibNames :: [PackageName]
diff --git a/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs b/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs
--- a/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs
+++ b/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs
@@ -66,6 +66,17 @@
 
 instance NFData Configuration
 
+instance Semigroup Configuration where
+  l <> r = Configuration { compilerInfo = compilerInfo l
+                         , corePackages = corePackages l <> corePackages r
+                         , defaultPackageOverrides = defaultPackageOverrides l <> defaultPackageOverrides r
+                         , extraPackages = extraPackages l <> extraPackages r
+                         , packageMaintainers = packageMaintainers l <> packageMaintainers r
+                         , unsupportedPlatforms = unsupportedPlatforms l <> unsupportedPlatforms r
+                         , dontDistributePackages = dontDistributePackages l <> dontDistributePackages r
+                         , brokenPackages = brokenPackages l <> brokenPackages r
+                         }
+
 instance FromJSON Configuration where
   parseJSON (Object o) = Configuration
         <$> o .:? "compiler" .!= unknownCompilerInfo buildCompilerId NoAbiTag
@@ -98,7 +109,7 @@
 assertConsistency cfg@Configuration {..} = do
   let report msg = fail ("*** configuration error: " ++ msg)
       maintainedPackages = Set.unions (Map.elems packageMaintainers)
-      disabledPackages = dontDistributePackages `Set.union` Set.fromList (depPkgName <$> brokenPackages)
+      disabledPackages = dontDistributePackages `Set.union` Set.fromList (constraintPkgName <$> brokenPackages)
       disabledMaintainedPackages = maintainedPackages `Set.intersection` disabledPackages
   unless (Set.null disabledMaintainedPackages) $
     report ("disabled packages that have a maintainer: " ++ show disabledMaintainedPackages)
diff --git a/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs b/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs
--- a/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs
+++ b/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs
@@ -23,11 +23,11 @@
 libNixName :: String -> [Identifier]
 libNixName ""                                   = []
 libNixName "adns"                               = return "adns"
-libNixName "alsa"                               = return "alsaLib"
+libNixName "alsa"                               = return "alsa-lib"
 libNixName "alut"                               = return "freealut"
 libNixName "appindicator-0.1"                   = return "libappindicator-gtk2"
 libNixName "appindicator3-0.1"                  = return "libappindicator-gtk3"
-libNixName "asound"                             = return "alsaLib"
+libNixName "asound"                             = return "alsa-lib"
 libNixName "b2"                                 = return "libb2"
 libNixName "boost_context"                      = return "boost"
 libNixName "bz2"                                = return "bzip2"
@@ -111,11 +111,13 @@
 libNixName "libzip"                             = return "libzip"
 libNixName "libzmq"                             = return "zeromq"
 libNixName "liquid"                             = return "liquid-dsp"
+libNixName "lzma"                               = return "xz"
 libNixName "m"                                  = []  -- in stdenv
 libNixName "magic"                              = return "file"
 libNixName "MagickWand"                         = return "imagemagick"
 libNixName "mnl"                                = return "libmnl"
 libNixName "mpi"                                = return "openmpi"
+libNixName "mysql"                              = return "mariadb"
 libNixName "ncursesw"                           = return "ncurses"
 libNixName "netsnmp"                            = return "net_snmp"
 libNixName "nix-expr"                           = return "nix"
@@ -187,6 +189,7 @@
 libNixName "Xpm"                                = return "libXpm"
 libNixName "Xrandr"                             = return "libXrandr"
 libNixName "Xrender"                            = return "libXrender"
+libNixName "xscrnsaver"                         = return "libXScrnSaver"
 libNixName "Xss"                                = return "libXScrnSaver"
 libNixName "Xtst"                               = return "libXtst"
 libNixName "Xxf86vm"                            = return "libXxf86vm"
@@ -211,6 +214,7 @@
 buildToolNixName "nix-hash"                     = return "nix"
 buildToolNixName "nix-instantiate"              = return "nix"
 buildToolNixName "nix-store"                    = return "nix"
+buildToolNixName "utillinux"                    = return "util-linux"
 buildToolNixName x                              = return (fromString x)
 
 -- | Helper function to extract the package name from a String that may or may
diff --git a/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs b/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs
--- a/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs
+++ b/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs
@@ -16,13 +16,14 @@
 import Distribution.Nixpkgs.License
 import Distribution.Package
 import Distribution.System
+import Distribution.Types.PackageVersionConstraint
 import Distribution.Text
 import Distribution.Version
 import Language.Nix
 
 postProcess :: Derivation -> Derivation
 postProcess deriv =
- foldr (.) id [ f | (Dependency n vr _, f) <- hooks, packageName deriv == n, packageVersion deriv `withinRange` vr ]
+ foldr (.) id [ f | (PackageVersionConstraint n vr, f) <- hooks, packageName deriv == n, packageVersion deriv `withinRange` vr ]
  . fixGtkBuilds
  . fixBuildDependsForTools
  $ deriv
@@ -70,7 +71,7 @@
                   ]
   ]
 
-hooks :: [(Dependency, Derivation -> Derivation)]
+hooks :: [(PackageVersionConstraint, Derivation -> Derivation)]
 hooks =
   [ ("Agda < 2.5", set (executableDepends . tool . contains (pkg "emacs")) True . set phaseOverrides agdaPostInstall)
   , ("Agda >= 2.5 && < 2.6", set (executableDepends . tool . contains (pkg "emacs")) True . set phaseOverrides agda25PostInstall)
@@ -120,7 +121,7 @@
   , ("gtk3", gtk3Hook)
   , ("gtkglext", gtkglextHook)
   , ("haddock", haddockHook) -- https://github.com/haskell/haddock/issues/511
-  , ("hakyll", set (testDepends . tool . contains (pkg "utillinux")) True) -- test suite depends on "rev"
+  , ("hakyll", set (testDepends . tool . contains (pkg "util-linux")) True) -- test suite depends on "rev"
   , ("haskell-src-exts", set doCheck False)
   , ("hfsevents", hfseventsOverrides)
   , ("HFuse", set phaseOverrides hfusePreConfigure)
@@ -141,12 +142,12 @@
   , ("js-jquery", set doCheck False)            -- attempts to access the network
   , ("libconfig", over (libraryDepends . system) (replace "config = null" (pkg "libconfig")))
   , ("libxml", set (configureFlags . contains "--extra-include-dir=${libxml2.dev}/include/libxml2") True)
-  , ("liquid-fixpoint", set (executableDepends . system . contains (pkg "ocaml")) True . set (testDepends . system . contains (pkg "z3")) True . set (testDepends . system . contains (pkg "nettools")) True . set (testDepends . system . contains (pkg "git")) True . set doCheck False)
+  , ("liquid-fixpoint", set (testDepends . system . contains (pkg "z3")) True . set (testDepends . system . contains (pkg "nettools")) True . set (testDepends . system . contains (pkg "git")) True . set doCheck False)
   , ("liquidhaskell", set (testDepends . system . contains (pkg "z3")) True)
   , ("lzma-clib", over (metaSection . platforms) (Set.filter (\(Platform _  os) -> os == Windows)) . set (libraryDepends . haskell . contains (self "only-buildable-on-windows")) False)
   , ("MFlow < 4.6", set (libraryDepends . tool . contains (self "cpphs")) True)
   , ("mwc-random", set doCheck False)
-  , ("mysql", set (libraryDepends . system . contains (pkg "mysql")) True)
+  , ("mysql", set (libraryDepends . system . contains (pkg "libmysqlclient")) True)
   , ("network-attoparsec", set doCheck False) -- test suite requires network access
   , ("numeric-qq", set doCheck False) -- test suite doesn't finish even after 1+ days
   , ("opencv", opencvOverrides)
diff --git a/src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs b/src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs
--- a/src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs
+++ b/src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs
@@ -11,6 +11,7 @@
 import Distribution.Package
 import Distribution.Parsec
 import Distribution.System
+import Distribution.Types.PackageVersionConstraint
 import Distribution.Pretty as Cabal
 import qualified Data.Version as Base
 import Distribution.Version
@@ -28,8 +29,8 @@
 instance IsString PackageIdentifier where
   fromString = text2isString "PackageIdentifier"
 
-instance IsString Dependency where
-  fromString = text2isString "Dependency"
+instance IsString PackageVersionConstraint where
+  fromString = text2isString "PackageVersionConstraint"
 
 instance IsString CompilerId where
   fromString = text2isString "CompilerId"
@@ -58,9 +59,9 @@
   parseJSON (String s) = return (fromString (T.unpack s))
   parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Cabal VersionRange")
 
-instance FromJSON Dependency where
+instance FromJSON PackageVersionConstraint where
   parseJSON (String s) = return (fromString (T.unpack s))
-  parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Haskell Dependency")
+  parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Haskell PackageVersionConstraint")
 
 instance FromJSON CompilerInfo where
   parseJSON (String s) = return (unknownCompilerInfo (fromString (T.unpack s)) NoAbiTag)
diff --git a/src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs b/src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs
--- a/src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs
+++ b/src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs
@@ -160,7 +160,7 @@
       seq (length hash) $
       urlDerivationSource url hash <$ writeFile cacheFile hash
     UnknownHash -> do
-      maybeHash <- runMaybeT (derivHash . fst <$> fetchWith (False, "url", []) (Source url "" UnknownHash cabalDir))
+      maybeHash <- runMaybeT (derivHash . fst <$> fetchWith (False, "url", Nothing, []) (Source url "" UnknownHash cabalDir))
       case maybeHash of
         Just hash ->
           seq (length hash) $
@@ -208,7 +208,7 @@
 onlyCabalFromDirectory dir errMsg = do
   cabals <- liftIO $ getDirectoryContents dir >>= filterM doesFileExist . map (dir </>) . filter (".cabal" `isSuffixOf`)
   case cabals of
-    [] -> fail errMsg
+    [] -> liftIO $ fail errMsg
     [cabalFile] -> (,) False <$> cabalFromFile True cabalFile
     _ -> liftIO $ fail ("*** found more than one cabal file (" ++ show cabals ++ "). Exiting.")
 
diff --git a/test/golden-test-cases/hakyll.nix.golden b/test/golden-test-cases/hakyll.nix.golden
--- a/test/golden-test-cases/hakyll.nix.golden
+++ b/test/golden-test-cases/hakyll.nix.golden
@@ -5,7 +5,7 @@
 , pandoc-citeproc, parsec, process, QuickCheck, random, regex-base
 , regex-tdfa, resourcet, scientific, system-filepath, tagsoup
 , tasty, tasty-hunit, tasty-quickcheck, text, time
-, time-locale-compat, unordered-containers, utillinux, vector, wai
+, time-locale-compat, unordered-containers, util-linux, vector, wai
 , wai-app-static, warp, yaml
 }:
 mkDerivation {
@@ -35,7 +35,7 @@
     time time-locale-compat unordered-containers vector wai
     wai-app-static warp yaml
   ];
-  testToolDepends = [ utillinux ];
+  testToolDepends = [ util-linux ];
   homepage = "http://jaspervdj.be/hakyll";
   description = "A static website compiler library";
   license = lib.licenses.bsd3;
