diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -36,7 +36,7 @@
 specify:
 
 ```
-jenkins2nix -r latest -p A:0.7 -p B:0.1
+jenkinsPlugins2nix -r latest -p A:0.7 -p B:0.1
 ```
 
 We will end up with `A:0.7` and `B:0.1`. This also applies when no
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -8,17 +8,17 @@
 -- @jenkinsPlugins2nix@ entry point.
 module Main (main) where
 
-import qualified Data.Bimap as Bimap
-import           Data.List (intersperse)
-import           Data.Monoid ((<>), mconcat)
-import qualified Data.Text as Text
+import qualified Data.Bimap                                as Bimap
+import           Data.List                                 (intersperse)
+import           Data.Monoid                               (mconcat, (<>))
+import qualified Data.Text                                 as Text
+import           Data.Text.Prettyprint.Doc.Render.Terminal (putDoc)
 import           Nix.JenkinsPlugins2Nix
 import           Nix.JenkinsPlugins2Nix.Types
-import qualified Options.Applicative as Opt
+import qualified Options.Applicative                       as Opt
 import           System.Exit
 import           System.IO
-import qualified Text.PrettyPrint.ANSI.Leijen as Pretty
-import           Text.Printf (printf)
+import           Text.Printf                               (printf)
 
 main :: IO ()
 main = do
@@ -28,7 +28,7 @@
       hPutStrLn stderr err
       exitFailure
     Right p -> do
-      Pretty.putDoc p
+      putDoc p
       exitSuccess
   where
     opts = Opt.info (parseConfig Opt.<**> Opt.helper)
diff --git a/jenkinsPlugins2nix.cabal b/jenkinsPlugins2nix.cabal
--- a/jenkinsPlugins2nix.cabal
+++ b/jenkinsPlugins2nix.cabal
@@ -1,5 +1,5 @@
 name:                jenkinsPlugins2nix
-version:             0.2.0.2
+version:             0.3.0.1
 synopsis:            Generate nix for Jenkins plugins.
 description:         Generate nix for Jenkins plugins.
 homepage:            https://github.com/Fuuzetsu/jenkinsPlugins2nix#readme
@@ -12,23 +12,24 @@
 build-type:          Simple
 extra-source-files:  README.md
 cabal-version:       >=1.10
+tested-with:         GHC ==8.6.5 || ==8.8.4 || ==8.10.4 || ==8.10.5
 
 library
   hs-source-dirs:      src
   exposed-modules:     Nix.JenkinsPlugins2Nix
                        Nix.JenkinsPlugins2Nix.Parser
                        Nix.JenkinsPlugins2Nix.Types
-  build-depends:       base >= 4.7 && < 5
-                     , ansi-wl-pprint
-                     , attoparsec
-                     , bytestring
-                     , containers
-                     , cryptohash
-                     , hnix
-                     , http-conduit
-                     , mtl
-                     , text
-                     , zip-archive
+  build-depends:       base           >=4.7  && < 5
+                     , attoparsec     >=0.13 && <0.14
+                     , bytestring     >=0.10 && <0.11
+                     , containers     >=0.6  && <0.7
+                     , cryptohash     >=0.11 && <0.12
+                     , hnix           >=0.6  && <0.14
+                     , http-conduit   >=2.3  && <2.4
+                     , mtl            >=2.2  && <2.3
+                     , prettyprinter  >=1.2  && <1.8
+                     , text           >=1.2  && <1.3
+                     , zip-archive    >=0.4  && <0.5
   default-language:    Haskell2010
   ghc-options:        -Wall
 
@@ -37,10 +38,10 @@
   main-is:             Main.hs
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
   build-depends:       base
-                     , ansi-wl-pprint
-                     , bimap
+                     , bimap                       >=0.3  && <0.5
                      , jenkinsPlugins2nix
-                     , optparse-applicative
+                     , optparse-applicative        >=0.14 && <0.17
+                     , prettyprinter-ansi-terminal >=1.1  && <1.2
                      , text
   default-language:    Haskell2010
 
@@ -52,7 +53,7 @@
   build-depends:       base
                      , containers
                      , jenkinsPlugins2nix
-                     , tasty-hspec
+                     , tasty-hspec         >=1.1 && <1.2
                      , text
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
   default-language:    Haskell2010
diff --git a/src/Nix/JenkinsPlugins2Nix.hs b/src/Nix/JenkinsPlugins2Nix.hs
--- a/src/Nix/JenkinsPlugins2Nix.hs
+++ b/src/Nix/JenkinsPlugins2Nix.hs
@@ -7,27 +7,28 @@
 -- Main library entry point.
 module Nix.JenkinsPlugins2Nix where
 
-import qualified Codec.Archive.Zip as Zip
-import           Control.Arrow ((&&&))
-import           Control.Monad (foldM)
-import qualified Control.Monad.Except as MTL
-import qualified Crypto.Hash as Hash
-import qualified Data.ByteString.Lazy as BSL
-import           Data.Map.Strict (Map)
-import qualified Data.Map.Strict as Map
-import           Data.Monoid ((<>))
-import           Data.Text (Text)
-import qualified Data.Text as Text
-import qualified Data.Text.Encoding as Text
-import qualified Data.Text.IO as Text
-import qualified Network.HTTP.Simple as HTTP
-import qualified Nix.Expr as Nix
+import qualified Codec.Archive.Zip             as Zip
+import           Control.Arrow                 ((&&&))
+import           Control.Monad                 (foldM)
+import qualified Control.Monad.Except          as MTL
+import qualified Crypto.Hash                   as Hash
+import qualified Data.ByteString.Lazy          as BSL
+import           Data.Map.Strict               (Map)
+import qualified Data.Map.Strict               as Map
+import           Data.Monoid                   ((<>))
+import           Data.Text                     (Text)
+import qualified Data.Text                     as Text
+import qualified Data.Text.Encoding            as Text
+import qualified Data.Text.IO                  as Text
+import           Data.Text.Prettyprint.Doc     (Doc)
+import qualified Network.HTTP.Simple           as HTTP
+import qualified Nix.Expr                      as Nix
+import           Nix.Expr.Shorthands           ((@@))
 import qualified Nix.JenkinsPlugins2Nix.Parser as Parser
 import           Nix.JenkinsPlugins2Nix.Types
-import qualified Nix.Pretty as Nix
-import           System.IO (stderr)
-import qualified Text.PrettyPrint.ANSI.Leijen as Pretty
-import           Text.Printf (printf)
+import qualified Nix.Pretty                    as Nix
+import           System.IO                     (stderr)
+import           Text.Printf                   (printf)
 
 -- | Get the download URL of the plugin we're looking for.
 getPluginUrl :: RequestedPlugin -> Text
@@ -88,7 +89,7 @@
             AsGiven -> p
             -- It's not a user-specified plugin and we want the latest
             -- version per strategy so download the latest one.
-            Latest -> p { requested_version = Nothing }
+            Latest  -> p { requested_version = Nothing }
           -- The user has asked for this plugin explicitly so use
           -- their possibly-versioned request rather than picking
           -- based on versions listed in manifest dependencies.
@@ -104,7 +105,7 @@
 -- | Pretty-print nix expression for all the given plugins and their
 -- dependencies that the user asked for.
 mkExprsFor :: Config
-           -> IO (Either String Pretty.Doc)
+           -> IO (Either String (Doc ann))
 mkExprsFor (Config { resolution_strategy = st, requested_plugins = ps }) = do
   eplugins <- MTL.runExceptT $ do
     let userPlugins = Map.fromList $ map (requested_name &&& id) ps
@@ -113,16 +114,17 @@
   return $! case eplugins of
     Left err -> Left err
     Right plugins ->
-      let args = Nix.mkParamset exprs
+      let args = Nix.mkParamset exprs False
           res = Nix.mkNonRecSet $ map formatPlugin plugins
           mkJenkinsPlugin = Nix.bindTo "mkJenkinsPlugin" $
             Nix.mkFunction (Nix.mkParamset
                               [ ("name", Nothing)
                               , ("src", Nothing)
-                              ]) $
-              Nix.mkApp (Nix.mkSym "stdenv.mkDerivation") $ Nix.mkNonRecSet
+                              ]
+                              False) $
+              Nix.mkSym "stdenv.mkDerivation" @@ Nix.mkNonRecSet
                 [ Nix.inherit [ Nix.StaticKey "name"
-                              , Nix.StaticKey "src" ]
+                              , Nix.StaticKey "src" ] Nix.nullPos
                 , "phases" Nix.$= Nix.mkStr "installPhase"
                 , "installPhase" Nix.$= Nix.mkStr "cp $src $out"
                 ]
@@ -132,16 +134,16 @@
 
   where
     fetchurl :: Plugin -> Nix.NExpr
-    fetchurl p = Nix.mkApp (Nix.mkSym "fetchurl") $
-      Nix.mkNonRecSet [ "url" Nix.$= Nix.mkUri (download_url p)
+    fetchurl p = Nix.mkSym "fetchurl" @@
+      Nix.mkNonRecSet [ "url" Nix.$= Nix.mkStr (download_url p)
                       , "sha256" Nix.$= Nix.mkStr (Text.pack . show $ sha256 p)
                       ]
 
     mkBody :: Plugin -> Nix.NExpr
-    mkBody p = Nix.mkApp (Nix.mkSym "mkJenkinsPlugin") $
-      Nix.mkNonRecSet $ [ "name" Nix.$= Nix.mkStr (short_name $ manifest p)
-                        , "src" Nix.$= fetchurl p
-                        ]
+    mkBody p = Nix.mkSym "mkJenkinsPlugin" @@
+      Nix.mkNonRecSet [ "name" Nix.$= Nix.mkStr (short_name $ manifest p)
+                      , "src" Nix.$= fetchurl p
+                      ]
 
     formatPlugin :: Plugin -> Nix.Binding Nix.NExpr
     formatPlugin p = short_name (manifest p) Nix.$= mkBody p
