diff --git a/cabal2nix.cabal b/cabal2nix.cabal
--- a/cabal2nix.cabal
+++ b/cabal2nix.cabal
@@ -1,206 +1,204 @@
-name:           cabal2nix
-version:        2.9.3
-synopsis:       Convert Cabal files into Nix build instructions.
-category:       Distribution, Nix
-stability:      stable
-homepage:       https://github.com/nixos/cabal2nix#readme
-bug-reports:    https://github.com/nixos/cabal2nix/issues
-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>
-license:        BSD3
-license-file:   LICENSE
-tested-with:    GHC == 8.2.2, GHC == 8.4.3
-build-type:     Simple
-cabal-version:  1.24
-
+name:               cabal2nix
+version:            2.10.0
+synopsis:           Convert Cabal files into Nix build instructions.
 description:
-  Convert Cabal files into Nix build instructions. Users of Nix can install the
-  latest version by running:
+  Convert Cabal files into Nix build instructions. Users of Nix can install the latest
+  version by running:
   .
   > nix-env -i cabal2nix
-
-extra-source-files:
-  README.md
-  test/golden-test-cases/*.cabal
-  test/golden-test-cases/*.nix.golden
+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>
+stability:          stable
+tested-with:        GHC == 8.4.3
+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
+                    test/golden-test-cases/*.cabal
+                    test/golden-test-cases/*.nix.golden
+cabal-version:      1.24
 
 source-repository head
-  type: git
+  type:     git
   location: https://github.com/nixos/cabal2nix
 
 library
-  hs-source-dirs:       src
-  other-extensions:     CPP DeriveGeneric FlexibleInstances MultiParamTypeClasses
-                        OverloadedStrings RecordWildCards ScopedTypeVariables
-                        StandaloneDeriving TemplateHaskell
-  default-extensions:   MonadFailDesugaring
-  ghc-options:          -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
-                        -Wredundant-constraints
-  build-depends:
-      Cabal >2.2
-    , aeson
-    , ansi-wl-pprint
-    , base <5
-    , bytestring
-    , containers
-    , deepseq >=1.4
-    , directory
-    , distribution-nixpkgs >=1.1.1
-    , filepath
-    , hackage-db >=2.0.1
-    , hopenssl >=2
-    , hpack >= 0.26
-    , language-nix
-    , lens
-    , optparse-applicative
-    , pretty >=1.1.2
-    , process
-    , split
-    , text
-    , time
-    , transformers
-    , yaml
-  exposed-modules:
-      Cabal2nix
-      Distribution.Nixpkgs.Fetch
-      Distribution.Nixpkgs.Haskell
-      Distribution.Nixpkgs.Haskell.BuildInfo
-      Distribution.Nixpkgs.Haskell.Constraint
-      Distribution.Nixpkgs.Haskell.Derivation
-      Distribution.Nixpkgs.Haskell.FromCabal
-      Distribution.Nixpkgs.Haskell.FromCabal.Configuration
-      Distribution.Nixpkgs.Haskell.FromCabal.Flags
-      Distribution.Nixpkgs.Haskell.FromCabal.License
-      Distribution.Nixpkgs.Haskell.FromCabal.Name
-      Distribution.Nixpkgs.Haskell.FromCabal.Normalize
-      Distribution.Nixpkgs.Haskell.FromCabal.PostProcess
-      Distribution.Nixpkgs.Haskell.Hackage
-      Distribution.Nixpkgs.Haskell.OrphanInstances
-      Distribution.Nixpkgs.Haskell.PackageSourceSpec
-  other-modules:
-      Paths_cabal2nix
-  default-language: Haskell2010
+  exposed-modules:    Cabal2nix
+                      Distribution.Nixpkgs.Fetch
+                      Distribution.Nixpkgs.Haskell
+                      Distribution.Nixpkgs.Haskell.BuildInfo
+                      Distribution.Nixpkgs.Haskell.Constraint
+                      Distribution.Nixpkgs.Haskell.Derivation
+                      Distribution.Nixpkgs.Haskell.FromCabal
+                      Distribution.Nixpkgs.Haskell.FromCabal.Configuration
+                      Distribution.Nixpkgs.Haskell.FromCabal.Flags
+                      Distribution.Nixpkgs.Haskell.FromCabal.License
+                      Distribution.Nixpkgs.Haskell.FromCabal.Name
+                      Distribution.Nixpkgs.Haskell.FromCabal.Normalize
+                      Distribution.Nixpkgs.Haskell.FromCabal.PostProcess
+                      Distribution.Nixpkgs.Haskell.Hackage
+                      Distribution.Nixpkgs.Haskell.OrphanInstances
+                      Distribution.Nixpkgs.Haskell.PackageSourceSpec
+  other-modules:      Paths_cabal2nix
+  hs-source-dirs:     src
+  build-depends:      base                 < 5
+                    , Cabal                > 2.2
+                    , aeson
+                    , ansi-wl-pprint
+                    , bytestring
+                    , containers
+                    , deepseq              >= 1.4
+                    , directory
+                    , distribution-nixpkgs >= 1.1.1
+                    , filepath
+                    , hackage-db           >= 2.0.1
+                    , hopenssl             >= 2
+                    , hpack                >= 0.26
+                    , language-nix
+                    , lens
+                    , optparse-applicative
+                    , pretty               >= 1.1.2
+                    , process
+                    , split
+                    , text
+                    , time
+                    , transformers
+                    , yaml
+  default-language:   Haskell2010
+  default-extensions: MonadFailDesugaring
+  other-extensions:   MultiParamTypeClasses
+                      ScopedTypeVariables
+                      FlexibleInstances
+                      CPP
+                      TemplateHaskell
+                      StandaloneDeriving
+                      RecordWildCards
+                      OverloadedStrings
+                      DeriveGeneric
+  ghc-options:        -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
+                      -Wredundant-constraints
 
 executable cabal2nix
-  main-is: Main.hs
-  hs-source-dirs: cabal2nix
-  default-extensions:   MonadFailDesugaring
-  ghc-options:          -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
-                        -Wredundant-constraints
-  build-depends: base, cabal2nix
-  default-language: Haskell2010
+  main-is:            Main.hs
+  hs-source-dirs:     cabal2nix
+  build-depends:      base, cabal2nix
+  default-language:   Haskell2010
+  default-extensions: MonadFailDesugaring
+  ghc-options:        -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
+                      -Wredundant-constraints
 
 executable hackage2nix
-  main-is: Main.hs
-  hs-source-dirs: hackage2nix
-  default-extensions:   MonadFailDesugaring
-  ghc-options:          -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
-                        -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
-  build-depends:
-      Cabal >2.2
-    , aeson
-    , base <5
-    , bytestring
-    , cabal2nix
-    , containers
-    , directory
-    , distribution-nixpkgs >=1.1.1
-    , filepath
-    , hopenssl >=2
-    , language-nix
-    , lens
-    , monad-par
-    , monad-par-extras
-    , mtl
-    , optparse-applicative
-    , pretty >=1.1.2
-  other-modules:
-      Paths_cabal2nix
-      HackageGit
-  default-language: Haskell2010
+  main-is:            Main.hs
+  other-modules:      HackageGit
+                      Paths_cabal2nix
+  hs-source-dirs:     hackage2nix
+  build-depends:      base                 < 5
+                    , Cabal                > 2.2
+                    , aeson
+                    , bytestring
+                    , cabal2nix
+                    , containers
+                    , directory
+                    , distribution-nixpkgs >= 1.1.1
+                    , filepath
+                    , hopenssl             >= 2
+                    , language-nix
+                    , lens
+                    , monad-par
+                    , monad-par-extras
+                    , mtl
+                    , optparse-applicative
+                    , pretty               >= 1.1.2
+  default-language:   Haskell2010
+  default-extensions: MonadFailDesugaring
+  ghc-options:        -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
+                      -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
 
 test-suite regression-test
-  type:                 exitcode-stdio-1.0
-  main-is:              Main.hs
-  hs-source-dirs:       test
-  default-extensions:   MonadFailDesugaring
-  ghc-options:          -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
-                        -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
-                        -with-rtsopts=-K1K
-  build-depends:        base
-                      , Cabal >2.2
-                      , cabal2nix
-                      , containers
-                      , directory
-                      , filepath
-                      , language-nix
-                      , lens
-                      , pretty
-                      , process >1.2
-                      , tasty
-                      , tasty-golden
-  build-tools:          cabal2nix
-  default-language:     Haskell2010
+  type:               exitcode-stdio-1.0
+  main-is:            Main.hs
+  hs-source-dirs:     test
+  build-depends:      base
+                    , Cabal        > 2.2
+                    , cabal2nix
+                    , containers
+                    , directory
+                    , filepath
+                    , language-nix
+                    , lens
+                    , pretty
+                    , process      > 1.2
+                    , tasty
+                    , tasty-golden
+  default-language:   Haskell2010
+  default-extensions: MonadFailDesugaring
+  build-tools:        cabal2nix
+  ghc-options:        -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
+                      -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
+                      -with-rtsopts=-K1K
diff --git a/src/Cabal2nix.hs b/src/Cabal2nix.hs
--- a/src/Cabal2nix.hs
+++ b/src/Cabal2nix.hs
@@ -3,7 +3,8 @@
 {-# LANGUAGE RecordWildCards #-}
 
 module Cabal2nix
-  ( main, cabal2nix, cabal2nix', cabal2nixWithDB
+  ( main, cabal2nix, cabal2nix', cabal2nixWithDB, parseArgs
+  , Options(..)
   )
   where
 
@@ -61,9 +62,9 @@
   , optSystem :: Platform
   , optSubpath :: Maybe FilePath
   , optHackageSnapshot :: Maybe UTCTime
+  , optNixpkgsIdentifier :: NixpkgsResolver
   , optUrl :: String
   }
-  deriving (Show)
 
 options :: Parser Options
 options = Options
@@ -87,6 +88,7 @@
           <*> option (maybeReader parsePlatform) (long "system" <> help "host system (in either short Nix format or full LLVM style) to use when evaluating the Cabal file" <> value buildPlatform <> showDefaultWith display)
           <*> optional (strOption $ long "subpath" <> metavar "PATH" <> help "Path to Cabal file's directory relative to the URI (default is root directory)")
           <*> optional (option utcTimeReader (long "hackage-snapshot" <> help "hackage snapshot time, ISO format"))
+          <*> pure (\i -> Just (binding # (i, path # [i])))
           <*> strArgument (metavar "URI")
 
 -- | A parser for the date. Hackage updates happen maybe once or twice a month.
@@ -183,19 +185,15 @@
 hpackOverrides = over phaseOverrides (++ "preConfigure = \"hpack\";")
                . set (libraryDepends . tool . contains (PP.pkg "hpack")) True
 
-cabal2nix' :: [String] -> IO (Either Doc Derivation)
-cabal2nix' args = do
-  opts@Options {..} <- handleParseResult $ execParserPure defaultPrefs pinfo args
-
+cabal2nix' :: Options -> IO (Either Doc Derivation)
+cabal2nix' opts@Options{..} = do
   pkg <- getPackage optHpack optHackageDb optHackageSnapshot $ Source optUrl (fromMaybe "" optRevision) (maybe UnknownHash Guess optSha256) (fromMaybe "" optSubpath)
   processPackage opts pkg
 
-cabal2nixWithDB :: DB.HackageDB -> [String] -> IO (Either Doc Derivation)
-cabal2nixWithDB db args = do
-  opts@Options {..} <- handleParseResult $ execParserPure defaultPrefs pinfo args
+cabal2nixWithDB :: DB.HackageDB -> Options -> IO (Either Doc Derivation)
+cabal2nixWithDB db opts@Options{..} = do
   when (isJust optHackageDb) $ hPutStrLn stderr "WARN: HackageDB provided directly; ignoring --hackage-db"
   when (isJust optHackageSnapshot) $ hPutStrLn stderr "WARN: HackageDB provided directly; ignoring --hackage-snapshot"
-
   pkg <- getPackage' optHpack (return db) $ Source optUrl (fromMaybe "" optRevision) (maybe UnknownHash Guess optSha256) (fromMaybe "" optSubpath)
   processPackage opts pkg
 
@@ -210,7 +208,7 @@
 
       deriv :: Derivation
       deriv = withHpackOverrides $ fromGenericPackageDescription (const True)
-                                            (\i -> Just (binding # (i, path # [i])))
+                                            optNixpkgsIdentifier
                                             optSystem
                                             (unknownCompilerInfo optCompiler NoAbiTag)
                                             flags
@@ -253,7 +251,12 @@
   pure $ if optNixShellOutput then Left shell else Right deriv
 
 cabal2nix :: [String] -> IO ()
-cabal2nix = cabal2nix' >=> putStrLn . either render prettyShow
+cabal2nix = parseArgs >=> cabal2nix' >=> putStrLn . either render prettyShow
+
+parseArgs :: [String] -> IO Options
+parseArgs = handleParseResult . execParserPure defaultPrefs pinfo
+
+-- Utils
 
 readFlagList :: [String] -> FlagAssignment
 readFlagList = mkFlagAssignment . map tagWithValue
diff --git a/src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs b/src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs
--- a/src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs
+++ b/src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs
@@ -30,13 +30,13 @@
                                   , enable "pairing"
                                   , enable "production"
                                   , enable "quvi"
-                                  , enable "s3"
+                                  , disable "s3"
                                   , enable "tahoe"
                                   , enable "tdfa"
                                   , ("testsuite", version `withinRange` "< 6.20170925 || >= 6.20171214")
                                   , enable "torrentparser"
-                                  , enable "webapp"
-                                  , enable "webapp-secure"
+                                  , disable "webapp"
+                                  , disable "webapp-secure"
                                   , enable "webdav"
                                   , enable "xmpp"
                                   ]
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
@@ -68,6 +68,7 @@
   , ("github-backup", set (executableDepends . tool . contains (pkg "git")) True)
   , ("GLFW", over (libraryDepends . system) (Set.union (Set.fromList [bind "pkgs.xorg.libXext", bind "pkgs.xorg.libXfixes"])))
   , ("GlomeVec", set (libraryDepends . pkgconfig . contains (bind "self.llvmPackages.llvm")) True)
+  , ("graphviz", set (testDepends . system . contains (pkg "graphviz")) True)
   , ("gtk3", gtk3Hook)
   , ("haddock", haddockHook) -- https://github.com/haskell/haddock/issues/511
   , ("hakyll", set (testDepends . tool . contains (pkg "utillinux")) True) -- test suite depends on "rev"
diff --git a/src/Distribution/Nixpkgs/Haskell/Hackage.hs b/src/Distribution/Nixpkgs/Haskell/Hackage.hs
--- a/src/Distribution/Nixpkgs/Haskell/Hackage.hs
+++ b/src/Distribution/Nixpkgs/Haskell/Hackage.hs
@@ -1,6 +1,6 @@
 module Distribution.Nixpkgs.Haskell.Hackage
   ( HackageDB, PackageData, VersionData(..)
-  , hackageTarball, readTarball
+  , hackageTarball, readTarball, parsePackageData
   )
   where
 
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
@@ -202,8 +202,8 @@
   mPackage <- liftIO $ Hpack.readPackageConfig Hpack.defaultDecodeOptions {Hpack.decodeOptionsTarget = dir </> Hpack.packageConfig}
   case mPackage of
     Left err -> liftIO $ hPutStrLn stderr ("*** hpack error: " ++ show err ++ ". Exiting.") >> exitFailure
-    Right (Hpack.DecodeResult pkg' _ _) -> do
-      let hpackOutput = encodeUtf8 $ Hpack.renderPackage [] pkg'
+    Right r -> do
+      let hpackOutput = encodeUtf8 $ Hpack.renderPackage [] (Hpack.decodeResultPackage r)
           hash = printSHA256 $ digest (digestByName "sha256") hpackOutput
       case runParseGenericPackageDescription "<hpack output>" hpackOutput of
         Left msg -> liftIO $ do
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -27,8 +27,10 @@
 
 main :: IO ()
 main = do
-  -- TODO: run this test with all kinds of setLocaleEncoding values to ensure we don't
-  -- depend on the system environment: https://github.com/NixOS/cabal2nix/issues/333
+  -- TODO: Run this test with all kinds of setLocaleEncoding values to ensure we don't
+  --       depend on the system environment: https://github.com/NixOS/cabal2nix/issues/333.
+  --
+  -- TODO: Run this test without $HOME defined to ensure that we don't need that variable.
   cabal2nix <- findExecutable "cabal2nix" >>= maybe (fail "cannot find 'cabal2nix' in $PATH") return
   testCases <- listDirectoryFilesBySuffix ".cabal" "test/golden-test-cases"
   defaultMain $ testGroup "regression-tests"
