diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,18 @@
 # configuration-tools
 
+## 0.7.0 (2022-06-22)
+
+The version bump is due to the update of the dependency on optparse-applicative,
+which could imply breaking changes for users.
+
+* Support GHC-9.6.
+* Require Cabal >=3.6.
+* Drop support for GHC <8.10.
+* Require optparse-applicative >=0.18.
+* Require prettyprinter package and drop dependency on deprecated ansi-wl-pprint.
+* Replace dependency on cryptonite package by crypton.
+* Raise some outdated lower dependency bounds.
+
 ## 0.6.1 (2021-10-12)
 
 * Support GHC-9.2
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -111,15 +111,8 @@
 import Distribution.Simple.PackageIndex
 import Distribution.Simple.Setup
 import Distribution.Text
-import Distribution.Types.UnqualComponentName
-
-#if MIN_VERSION_Cabal(3,6,0)
 import Distribution.Utils.Path
-#endif
-
-#if MIN_VERSION_Cabal(3,2,0)
 import Distribution.Utils.ShortText
-#endif
 
 import System.Process
 
@@ -169,14 +162,6 @@
 prettyLicense :: I.InstalledPackageInfo -> String
 prettyLicense = either prettyShow prettyShow . I.license
 
-#if MIN_VERSION_Cabal(3,2,0)
-ft :: ShortText -> String
-ft = fromShortText
-#else
-ft :: String -> String
-ft = id
-#endif
-
 -- -------------------------------------------------------------------------- --
 -- Cabal 2.0
 
@@ -238,11 +223,7 @@
 trim = f . f
   where f = reverse . dropWhile isSpace
 
-#if defined (MIN_VERSION_Cabal) && MIN_VERSION_Cabal(3,4,0)
 getVCS :: IO (Maybe KnownRepoType)
-#else
-getVCS :: IO (Maybe RepoType)
-#endif
 getVCS = getCurrentDirectory >>= getVcsOfDir
   where
     getVcsOfDir d = do
@@ -318,10 +299,10 @@
             , "    copyright = " <> (pack . show . copyright) pkgDesc
             , ""
             , "    author :: IsString a => a"
-            , "    author = \"" <> (pack . ft . author) pkgDesc <> "\""
+            , "    author = \"" <> (pack . fromShortText . author) pkgDesc <> "\""
             , ""
             , "    homepage :: IsString a => a"
-            , "    homepage = \"" <> (pack . ft . homepage) pkgDesc <> "\""
+            , "    homepage = \"" <> (pack . fromShortText . homepage) pkgDesc <> "\""
             , ""
             , "    package :: IsString a => a"
             , "    package = \"" <> (pack . display . package) pkgDesc <> "\""
@@ -382,12 +363,7 @@
     fileText file = doesFileExist file >>= \x -> if x
         then B.readFile file
         else return ""
-
-#if MIN_VERSION_Cabal(3,6,0)
     fileTextStr = fileText . getSymbolicPath
-#else
-    fileTextStr = fileText
-#endif
 
 
 hgInfo :: IO (String, String, String)
@@ -418,4 +394,4 @@
     ++ (if cr /= "" then ", " ++ cr else "")
     ++ "]"
   where
-    cr = (unwords . words . ft . I.copyright) a
+    cr = (unwords . words . fromShortText . I.copyright) a
diff --git a/configuration-tools.cabal b/configuration-tools.cabal
--- a/configuration-tools.cabal
+++ b/configuration-tools.cabal
@@ -1,25 +1,25 @@
-cabal-version: 2.2
+cabal-version: 3.0
 
 name: configuration-tools
-version: 0.6.1
+version: 0.7.0
 synopsis: Tools for specifying and parsing configurations
 description:
     Tools for specifying and parsing configurations
-    .
+
     This package provides a collection of utils on top of the packages
     <http://hackage.haskell.org/package/optparse-applicative optparse-applicative>,
     <http://hackage.haskell.org/package/aeson aeson>, and
     <http://hackage.haskell.org/package/yaml yaml> for configuring libraries and
     applications in a convenient and composable way.
-    .
+
     The main features are
-    .
+
     1. configuration management through integration of command line option
        parsing and configuration files and
-    .
+
     2. a @Setup.hs@ file that generates a @PkgInfo@ module for each component
        of a package that provides information about the package and the build.
-    .
+
     Documentation on how to use this package can be found in the
     <https://github.com/alephcloud/hs-configuration-tools/blob/master/README.md README>
     and in the API documentation of the modules "Configuration.Utils" and
@@ -33,14 +33,16 @@
 maintainer: Lars Kuhtz <lakuhtz@gmail.com>
 copyright:
     (c) 2019-2020 Colin Woodbury <colin@fosskers.ca>,
-    (c) 2015-2021 Lars Kuhtz <lakuhtz@gmail.com>,
+    (c) 2015-2023 Lars Kuhtz <lakuhtz@gmail.com>,
     (c) 2014-2015 AlephCloud, Inc.
 category: Configuration, Console
 build-type: Custom
 tested-with:
-      GHC==9.0.1
+    , GHC==9.6
+    , GHC==9.4
+    , GHC==9.2
+    , GHC==9.0.1
     , GHC==8.10.7
-    , GHC==8.8.4
 
 extra-doc-files:
     README.md,
@@ -48,8 +50,8 @@
 
 custom-setup
     setup-depends:
-        Cabal >= 2.2,
-        base >= 4.11 && < 5.0,
+        Cabal >= 3.6 && < 100,
+        base >= 4.14 && < 5.0,
         bytestring >= 0.10.0.2,
         directory >= 1.2.1.0,
         filepath >= 1.3.0.1,
@@ -95,11 +97,11 @@
             Configuration.Utils.Internal.HttpsCertPolicy
 
     build-depends:
-        Cabal >= 2.2
+        Cabal >= 3.6
       , aeson >= 0.7.0.6
-      , ansi-wl-pprint >= 0.6
+      , prettyprinter >= 1.7
       , attoparsec >= 0.11.3.4
-      , base >= 4.11 && < 5
+      , base >= 4.14 && < 5
       , base-unicode-symbols >= 0.2.2.4
       , bytestring >= 0.10.0.2
       , case-insensitive >= 1.2
@@ -109,7 +111,7 @@
       , filepath >= 1.3.0.1
       , mtl >= 2.2
       , network-uri >= 2.6.0.1
-      , optparse-applicative >= 0.11.0.2
+      , optparse-applicative >= 0.18
       , process >= 1.2.0.0
       , profunctors >= 4.0.4
       , semigroups >= 0.18
@@ -123,17 +125,17 @@
     if flag(remote-configs)
         build-depends:
             base64-bytestring >= 1.0
-          , connection >= 0.2
+          , crypton-connection >= 0.3
+          , crypton-x509 >= 1.5
+          , crypton-x509-system >= 1.5
+          , crypton-x509-validation >= 1.5.1
           , data-default >= 0.5
           , enclosed-exceptions >= 1.0
-          , http-client >= 0.4.30
-          , http-client-tls >= 0.2
+          , http-client >= 0.5
+          , http-client-tls >= 0.3
           , http-types >= 0.8
           , monad-control >= 1.0
           , tls >= 1.2
-          , x509 >= 1.5
-          , x509-system >= 1.5
-          , x509-validation >= 1.5.1
 
     if flag(remote-configs)
         cpp-options: -DREMOTE_CONFIGS
@@ -156,8 +158,8 @@
         PkgInfo
 
     build-depends:
-        Cabal >= 2.2
-      , base >= 4.11 && < 5
+        Cabal >= 3.6
+      , base >= 4.14 && < 5
       , base-unicode-symbols >= 0.2.2.4
       , bytestring >= 0.10
       , configuration-tools
@@ -172,9 +174,9 @@
             enclosed-exceptions >= 1.0
           , http-types >= 0.8
           , monad-control >= 1.0
-          , wai >= 3.0
-          , warp >= 3.0
-          , warp-tls >= 3.0
+          , wai >= 3.2
+          , warp >= 3.3
+          , warp-tls >= 3.4
           , network >= 2.8
 
         cpp-options: -DREMOTE_CONFIGS
@@ -193,9 +195,9 @@
         PkgInfo
 
     build-depends:
-        base >= 4.11 && < 5
+        base >= 4.14 && < 5
       , base-unicode-symbols >= 0.2.2.4
-      , Cabal >= 2.2
+      , Cabal >= 3.6
       , configuration-tools
 
 executable example
@@ -209,8 +211,8 @@
     autogen-modules:
         PkgInfo
     build-depends:
-        base >= 4.11 && < 5
+        base >= 4.14 && < 5
       , base-unicode-symbols >= 0.2.2.4
-      , Cabal >= 2.2
+      , Cabal >= 3.6
       , configuration-tools
       , mtl >= 2.2
diff --git a/examples/Example.hs b/examples/Example.hs
--- a/examples/Example.hs
+++ b/examples/Example.hs
@@ -40,11 +40,7 @@
 
 import Data.Monoid.Unicode
 
-#if MIN_VERSION_base(4,13,0)
 import Prelude.Unicode hiding ((×))
-#else
-import Prelude.Unicode
-#endif
 
 -- This assumes usage of cabal with custom Setup.hs
 --
diff --git a/src/Configuration/Utils.hs b/src/Configuration/Utils.hs
--- a/src/Configuration/Utils.hs
+++ b/src/Configuration/Utils.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE UnicodeSyntax #-}
 
 {-# OPTIONS_HADDOCK show-extensions #-}
@@ -132,8 +133,10 @@
 import Configuration.Utils.Operators
 import Configuration.Utils.Validation
 
-import Control.Monad.Except hiding (mapM_)
-import Control.Monad.Writer hiding (mapM_)
+import Control.Monad (void, when)
+import Control.Monad.Except (MonadError, throwError)
+import Control.Monad.Writer (execWriterT, runWriterT)
+import Control.Monad.IO.Class (MonadIO)
 
 import qualified Data.ByteString.Char8 as B8
 import qualified Data.CaseInsensitive as CI
@@ -150,15 +153,11 @@
 import qualified Options.Applicative as O
 
 import Prelude hiding (any, concatMap, mapM_)
-#if MIN_VERSION_base(4,13,0)
 import Prelude.Unicode hiding ((×))
-#else
-import Prelude.Unicode
-#endif
 
 import System.IO
 
-import qualified Text.PrettyPrint.ANSI.Leijen as P
+import qualified Prettyprinter as P
 
 #ifdef REMOTE_CONFIGS
 import Control.Monad.Trans.Control
@@ -589,7 +588,7 @@
     $ O.progDesc _piDescription
     ⊕ O.fullDesc
     ⊕ maybe mempty O.header _piHelpHeader
-    ⊕ O.footerDoc (Just $ defaultFooter ⊕ maybe mempty P.text _piHelpFooter)
+    ⊕ O.footerDoc (Just $ defaultFooter ⊕ maybe mempty P.pretty _piHelpFooter)
   where
     optionParser =
         -- these are identity parsers that are only applied for their side effects
@@ -599,11 +598,7 @@
 
     -- the 'O.helper' option from optparse-applicative is hidden by default
     -- which seems a bit weired. This option doesn't hide the access to help.
-#if MIN_VERSION_optparse_applicative(0,16,0)
     nonHiddenHelper = abortOption (ShowHelpText Nothing)
-#else
-    nonHiddenHelper = abortOption ShowHelpText
-#endif
         % long "help"
         ⊕ short 'h'
         ⊕ short '?'
@@ -626,25 +621,26 @@
         , ""
         ]
 
+    a </> b = a <> P.softline <> b
+
     staticFiles
         | null _piConfigurationFiles = Nothing
         | otherwise = Just $ \n → P.hang 3 $ P.vsep
-            [ P.int n ⊕ "." P.</> par "Configuration files at the following locations:"
+            [ P.pretty @Int n ⊕ "." </> par "Configuration files at the following locations:"
             , P.vsep $ map (\f → "* " ⊕ printConfigFile f) _piConfigurationFiles
             ]
     cmdFiles = Just $ \n → P.hang 3 $ P.fillSep
-        [ P.int n ⊕ "." P.</> par "Configuration files from locations provided through"
+        [ P.pretty n ⊕ "." </> par "Configuration files from locations provided through"
         , par "--config-file options in the order as they appear."
         ]
     cmdOptions = Just $ \n → P.hang 3
-        $ P.int n ⊕ "." P.</> par "Command line options."
+        $ P.pretty n ⊕ "." </> par "Command line options."
 
-    printConfigFile f = P.text (T.unpack $ getConfigFile f) P.<+> case f of
-        ConfigFileRequired _ → P.text "(required)"
-        ConfigFileOptional _ → P.text "(optional)"
+    printConfigFile f = P.pretty (getConfigFile f) P.<+> case f of
+        ConfigFileRequired _ → "(required)"
+        ConfigFileOptional _ → "(optional)"
 
-    par ∷ String → P.Doc
-    par = P.fillSep ∘ map P.string ∘ words
+    par = P.fillSep ∘ map P.pretty ∘ words
 
 -- | Internal main function
 --
diff --git a/src/Configuration/Utils/CommandLine.hs b/src/Configuration/Utils/CommandLine.hs
--- a/src/Configuration/Utils/CommandLine.hs
+++ b/src/Configuration/Utils/CommandLine.hs
@@ -56,7 +56,6 @@
 import Configuration.Utils.Operators
 
 import Control.Applicative
-import Control.Monad.Writer hiding (mapM_)
 
 import Data.Aeson
 import qualified Data.ByteString.Lazy.Char8 as BL8
@@ -76,11 +75,7 @@
 
 import qualified Text.ParserCombinators.ReadP as P hiding (string)
 
-#if MIN_VERSION_base(4,13,0)
 import Prelude.Unicode hiding ((×))
-#else
-import Prelude.Unicode
-#endif
 
 
 -- -------------------------------------------------------------------------- --
diff --git a/src/Configuration/Utils/Http.hs b/src/Configuration/Utils/Http.hs
--- a/src/Configuration/Utils/Http.hs
+++ b/src/Configuration/Utils/Http.hs
@@ -55,11 +55,7 @@
 import Data.Maybe (isJust)
 import Data.Monoid.Unicode
 
-#if MIN_VERSION_base(4,13,0)
 import Prelude.Unicode hiding ((×))
-#else
-import Prelude.Unicode
-#endif
 
 -- -------------------------------------------------------------------------- --
 -- Http Service TLS Configuration
diff --git a/src/Configuration/Utils/Internal/HttpsCertPolicy.hs b/src/Configuration/Utils/Internal/HttpsCertPolicy.hs
--- a/src/Configuration/Utils/Internal/HttpsCertPolicy.hs
+++ b/src/Configuration/Utils/Internal/HttpsCertPolicy.hs
@@ -4,10 +4,6 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE UnicodeSyntax #-}
 
-#ifndef MIN_VERSION_http_client
-#define MIN_VERSION_http_client(x,y,z) 1
-#endif
-
 -- |
 -- Module: Configuration.Utils.Internal.HttpsCertPolicy
 -- Description: HTTPS certificate validation policy
@@ -42,7 +38,6 @@
 
 import Control.Exception (Exception, Handler(..), catches, throwIO)
 import Control.Monad.State
-import Control.Monad.Writer
 
 import Data.Bifunctor
 import qualified Data.ByteString.Base64 as B64
@@ -64,11 +59,7 @@
 import qualified Options.Applicative as O
 
 import Prelude hiding (any, concatMap, mapM_)
-#if MIN_VERSION_base(4,13,0)
 import Prelude.Unicode hiding ((×))
-#else
-import Prelude.Unicode
-#endif
 
 import qualified Network.Connection as HTTP
 import qualified Network.HTTP.Client as HTTP
@@ -163,15 +154,6 @@
         [ Handler $ \(e ∷ TLS.TLSException) → do
             cert ← readIORef certVar
             handleTlsException request cert e
-#if ! MIN_VERSION_http_client(0,5,0)
-        , Handler $ \httpEx → case httpEx of
-            HTTP.TlsException tlsEx → case fromException tlsEx of
-                Nothing → throwIO httpEx
-                Just e → do
-                    cert ← readIORef certVar
-                    handleTlsException request cert e
-            _ → throwIO httpEx
-#endif
         ]
 
 -- -------------------------------------------------------------------------- --
diff --git a/src/Configuration/Utils/Monoid.hs b/src/Configuration/Utils/Monoid.hs
--- a/src/Configuration/Utils/Monoid.hs
+++ b/src/Configuration/Utils/Monoid.hs
@@ -32,8 +32,6 @@
 import Configuration.Utils.CommandLine
 import Configuration.Utils.Internal
 
-import Control.Monad.Writer hiding (mapM_, (<>))
-
 import Data.Aeson
 import qualified Data.List.NonEmpty as NEL
 import Data.Semigroup
diff --git a/src/Configuration/Utils/Setup.hs b/src/Configuration/Utils/Setup.hs
--- a/src/Configuration/Utils/Setup.hs
+++ b/src/Configuration/Utils/Setup.hs
@@ -111,15 +111,8 @@
 import Distribution.Simple.PackageIndex
 import Distribution.Simple.Setup
 import Distribution.Text
-import Distribution.Types.UnqualComponentName
-
-#if MIN_VERSION_Cabal(3,6,0)
 import Distribution.Utils.Path
-#endif
-
-#if MIN_VERSION_Cabal(3,2,0)
 import Distribution.Utils.ShortText
-#endif
 
 import System.Process
 
@@ -169,13 +162,8 @@
 prettyLicense :: I.InstalledPackageInfo -> String
 prettyLicense = either prettyShow prettyShow . I.license
 
-#if MIN_VERSION_Cabal(3,2,0)
 ft :: ShortText -> String
 ft = fromShortText
-#else
-ft :: String -> String
-ft = id
-#endif
 
 -- -------------------------------------------------------------------------- --
 -- Cabal 2.0
@@ -238,11 +226,7 @@
 trim = f . f
   where f = reverse . dropWhile isSpace
 
-#if defined (MIN_VERSION_Cabal) && MIN_VERSION_Cabal(3,4,0)
 getVCS :: IO (Maybe KnownRepoType)
-#else
-getVCS :: IO (Maybe RepoType)
-#endif
 getVCS = getCurrentDirectory >>= getVcsOfDir
   where
     getVcsOfDir d = do
@@ -382,12 +366,7 @@
     fileText file = doesFileExist file >>= \x -> if x
         then B.readFile file
         else return ""
-
-#if MIN_VERSION_Cabal(3,6,0)
     fileTextStr = fileText . getSymbolicPath
-#else
-    fileTextStr = fileText
-#endif
 
 
 hgInfo :: IO (String, String, String)
diff --git a/test/TestExample.hs b/test/TestExample.hs
--- a/test/TestExample.hs
+++ b/test/TestExample.hs
@@ -35,11 +35,7 @@
 
 import Example hiding (main)
 
-#if MIN_VERSION_base(4,13,0)
 import Prelude.Unicode hiding ((×))
-#else
-import Prelude.Unicode
-#endif
 
 import PkgInfo
 
diff --git a/test/TestTools.hs b/test/TestTools.hs
--- a/test/TestTools.hs
+++ b/test/TestTools.hs
@@ -61,11 +61,7 @@
 
 import Distribution.Simple.Utils (withTempFile)
 
-#if MIN_VERSION_base(4,13,0)
 import Prelude.Unicode hiding ((×))
-#else
-import Prelude.Unicode
-#endif
 
 import System.Environment
 import System.IO
diff --git a/test/Tests/MonoidConfig.hs b/test/Tests/MonoidConfig.hs
--- a/test/Tests/MonoidConfig.hs
+++ b/test/Tests/MonoidConfig.hs
@@ -31,11 +31,7 @@
 import Data.String
 import qualified Data.Text as T
 
-#if MIN_VERSION_base(4,13,0)
 import Prelude.Unicode hiding ((×))
-#else
-import Prelude.Unicode
-#endif
 
 -- -------------------------------------------------------------------------- --
 -- Test cases
