diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog
 
+## [0.0.0.3] - 2025-11-20
+
+### Added
+
+* Compabitility with `opt-env-conf >=0.13`
+
 ## [0.0.0.2] - 2025-03-12
 
 ### Added
diff --git a/opt-env-conf-test.cabal b/opt-env-conf-test.cabal
--- a/opt-env-conf-test.cabal
+++ b/opt-env-conf-test.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           opt-env-conf-test
-version:        0.0.0.2
+version:        0.0.0.3
 synopsis:       A testing companion package for opt-env-conf
 homepage:       https://github.com/NorfairKing/opt-env-conf#readme
 bug-reports:    https://github.com/NorfairKing/opt-env-conf/issues
@@ -378,6 +378,7 @@
   other-modules:
       OptEnvConf.APISpec
       OptEnvConf.ArgsSpec
+      OptEnvConf.CheckSpec
       OptEnvConf.CompleterSpec
       OptEnvConf.CompletionSpec
       OptEnvConf.EnvMapSpec
diff --git a/src/OptEnvConf/Test.hs b/src/OptEnvConf/Test.hs
--- a/src/OptEnvConf/Test.hs
+++ b/src/OptEnvConf/Test.hs
@@ -90,7 +90,7 @@
 
 parserTest :: (Show a, Eq a) => Parser a -> [String] -> [(String, String)] -> Maybe JSON.Object -> a -> IO ()
 parserTest parser args envVars mObject expected = do
-  errOrActual <- runParserOn Nothing parser (parseArgs args) (EnvMap.parse envVars) mObject
+  errOrActual <- runParserOn allCapabilities Nothing parser (parseArgs args) (EnvMap.parse envVars) mObject
   case errOrActual of
     Left errs -> expectationFailure $ T.unpack $ renderChunksText With24BitColours $ renderErrors errs
     Right actual -> actual `shouldBe` expected
diff --git a/test/OptEnvConf/CheckSpec.hs b/test/OptEnvConf/CheckSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/OptEnvConf/CheckSpec.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedLists #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module OptEnvConf.CheckSpec (spec) where
+
+import Data.GenValidity.Aeson ()
+import OptEnvConf
+import OptEnvConf.Args as Args
+import OptEnvConf.Args.Gen ()
+import OptEnvConf.Check
+import qualified OptEnvConf.EnvMap as EnvMap
+import OptEnvConf.EnvMap.Gen ()
+import OptEnvConf.Terminal (getTerminalCapabilitiesFromHandle)
+import System.IO
+import Test.Syd
+
+spec :: Spec
+spec = sequential $
+  doNotRandomiseExecutionOrder $
+    describe "runSettingsCheckOn" $ do
+      let string :: Reader String
+          string = str
+      it "is succesful on the trivial parser" $ do
+        let p = pure ()
+        stderrTc <- getTerminalCapabilitiesFromHandle stderr
+        checkResult <- runSettingsCheckOn allCapabilities stderrTc p Args.emptyArgs EnvMap.empty Nothing
+        checkResult
+          `shouldSatisfy` ( \case
+                              CheckSucceeded () -> True
+                              _ -> False
+                          )
+
+      it "fails when a required setting is missing" $ do
+        let p = setting [argument, reader string] :: Parser String
+        stderrTc <- getTerminalCapabilitiesFromHandle stderr
+        checkResult <- runSettingsCheckOn allCapabilities stderrTc p Args.emptyArgs EnvMap.empty Nothing
+        checkResult
+          `shouldSatisfy` ( \case
+                              CheckFailed _ -> True
+                              _ -> False
+                          )
+
+      it "says incapable when a required capability is missing" $ do
+        let p = checkWithRequiredCapability readSecretCapability $ checkMapEither (const (Left "failed")) $ setting [argument, reader string] :: Parser String
+        stderrTc <- getTerminalCapabilitiesFromHandle stderr
+        checkResult <- runSettingsCheckOn (disableCapability (Capability "read-secret") allCapabilities) stderrTc p ["arg"] EnvMap.empty Nothing
+        checkResult
+          `shouldSatisfy` ( \case
+                              CheckIncapable _ -> True
+                              _ -> False
+                          )
+
+      it "says failed when a required capability is available" $ do
+        let p = checkWithRequiredCapability readSecretCapability $ checkMapEither (const (Left "failed")) $ setting [argument, reader string] :: Parser String
+        stderrTc <- getTerminalCapabilitiesFromHandle stderr
+        checkResult <- runSettingsCheckOn allCapabilities stderrTc p ["arg"] EnvMap.empty Nothing
+        checkResult
+          `shouldSatisfy` ( \case
+                              CheckFailed _ -> True
+                              _ -> False
+                          )
+
+      it "says failed when a required capability is missing but another setting failed" $ do
+        let p :: Parser (String, String)
+            p =
+              (,)
+                <$> checkWithRequiredCapability readSecretCapability (checkMapEither (const (Left "failed")) $ setting [argument, reader string])
+                <*> checkMapEither (const (Left "failed")) (setting [argument, reader string])
+
+        stderrTc <- getTerminalCapabilitiesFromHandle stderr
+        checkResult <- runSettingsCheckOn (disableCapability (Capability "read-secret") allCapabilities) stderrTc p ["arg1", "arg2"] EnvMap.empty Nothing
+        checkResult
+          `shouldSatisfy` ( \case
+                              CheckFailed _ -> True
+                              _ -> False
+                          )
diff --git a/test/OptEnvConf/ErrorSpec.hs b/test/OptEnvConf/ErrorSpec.hs
--- a/test/OptEnvConf/ErrorSpec.hs
+++ b/test/OptEnvConf/ErrorSpec.hs
@@ -201,7 +201,7 @@
     it (unwords ["renders the", fp, "error the same as before"]) $
       let path = "test_resources/error/" <> fp <> ".txt"
        in goldenChunksFile path $ do
-            errOrResult <- runParserOn Nothing p (parseArgs args) EnvMap.empty Nothing
+            errOrResult <- runParserOn allCapabilities Nothing p (parseArgs args) EnvMap.empty Nothing
             case errOrResult of
               Right a -> expectationFailure $ unlines ["Should not have been able to parse, but did and got:", show a]
               Left errs -> pure $ renderErrors errs
@@ -212,7 +212,7 @@
     it (unwords ["renders the", fp, "error the same as before"]) $
       let path = "test_resources/error/" <> fp <> ".txt"
        in goldenChunksFile path $ do
-            errOrResult <- runParserOn Nothing p emptyArgs (EnvMap.parse e) Nothing
+            errOrResult <- runParserOn allCapabilities Nothing p emptyArgs (EnvMap.parse e) Nothing
             case errOrResult of
               Right a -> expectationFailure $ unlines ["Should not have been able to parse, but did and got:", show a]
               Left errs -> pure $ renderErrors errs
diff --git a/test/OptEnvConf/RunSpec.hs b/test/OptEnvConf/RunSpec.hs
--- a/test/OptEnvConf/RunSpec.hs
+++ b/test/OptEnvConf/RunSpec.hs
@@ -1,11 +1,13 @@
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedLists #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
 
 module OptEnvConf.RunSpec (spec) where
 
 import Autodocodec
 import Control.Applicative
+import Control.Concurrent
 import Data.Aeson as JSON (Object, Value (Null), toJSON)
 import qualified Data.Aeson.Key as Key
 import qualified Data.Aeson.KeyMap as KeyMap
@@ -136,6 +138,82 @@
               let expected = succ i
               shouldParse p Args.emptyArgs e mConf expected
 
+    describe "RequireCapability" $ do
+      it "can run the check parser if the capability is available" $
+        forAllValid $ \capabilitiesPrototype ->
+          forAllValid $ \e ->
+            forAllValid $ \mConf ->
+              forAllValid $ \result ->
+                forAllValid $ \capName -> do
+                  let p :: Parser Int
+                      p = checkWithRequiredCapability capName $ checkMapEither (const (Left "failed")) (pure (result :: Int))
+                  let cap = Capability (T.pack capName)
+                  let capabilities = enableCapability cap capabilitiesPrototype
+                  shouldFail' p capabilities Args.emptyArgs e mConf $ \case
+                    ParseErrorCheckFailed False "failed" :| [] -> True
+                    _ -> False
+
+      it "cannot run the check parser if the capability is not available" $
+        forAllValid $ \capabilitiesPrototype ->
+          forAllValid $ \e ->
+            forAllValid $ \mConf ->
+              forAllValid $ \result ->
+                forAllValid $ \capName -> do
+                  let p :: Parser Int
+                      p = checkWithRequiredCapability capName $ checkMapEither (const (Left "failed")) (pure (result :: Int))
+                  let cap = Capability (T.pack capName)
+                  let capabilities = disableCapability cap capabilitiesPrototype
+                  shouldFail' p capabilities Args.emptyArgs e mConf $ \case
+                    ParseErrorMissingCapability _ :| [] -> True
+                    _ -> False
+
+      it "still runs the below parser when a capability is missing for the check parser" $
+        forAllValid $ \capabilitiesPrototype ->
+          forAllValid $ \capName ->
+            forAllValid $ \result ->
+              forAllValid $ \e ->
+                forAllValid $ \mConf -> do
+                  var <- newMVar 0
+                  let p = checkWithRequiredCapability capName (mapIO pure (mapIO (swapMVar var) (pure (result :: Int))))
+                  let cap = Capability (T.pack capName)
+                  let capabilities = disableCapability cap capabilitiesPrototype
+                  errOrRes <- runParserOn capabilities Nothing p Args.emptyArgs e mConf
+                  case errOrRes of
+                    Left errs -> do
+                      NE.map parseErrorMessage errs
+                        `shouldSatisfy` ( \case
+                                            ParseErrorMissingCapability c :| [] | c == cap -> True
+                                            _ -> False
+                                        )
+                      readMVar var `shouldReturn` result -- instead of 1
+                    Right _ -> expectationFailure "The parser should not have succeeded."
+
+      it "can run the setting parser if the capability is available" $
+        forAllValid $ \capabilitiesPrototype ->
+          forAllValid $ \e ->
+            forAllValid $ \mConf ->
+              forAllValid $ \capName -> do
+                let p :: Parser Int
+                    p = setting [argument, reader auto, requiredCapability capName] :: Parser Int
+                let cap = Capability (T.pack capName)
+                let capabilities = enableCapability cap capabilitiesPrototype
+                shouldFail' p capabilities Args.emptyArgs e mConf $ \case
+                  ParseErrorMissingArgument _ :| [] -> True
+                  _ -> False
+
+      it "cannot run the setting parser if the capability is available" $
+        forAllValid $ \capabilitiesPrototype ->
+          forAllValid $ \e ->
+            forAllValid $ \mConf ->
+              forAllValid $ \capName -> do
+                let p :: Parser Int
+                    p = setting [argument, reader auto, requiredCapability capName] :: Parser Int
+                let cap = Capability (T.pack capName)
+                let capabilities = disableCapability cap capabilitiesPrototype
+                shouldFail' p capabilities Args.emptyArgs e mConf $ \case
+                  ParseErrorMissingCapability _ :| [] -> True
+                  _ -> False
+
     describe "WithConfig" $ do
       it "can replace the config object" $
         forAllValid $ \e ->
@@ -870,7 +948,7 @@
 argParseSpec args p expected = withFrozenCallStack $ do
   it (unwords ["parses args", show args, "as", show expected]) $ do
     let argMap = parseArgs args
-    errOrRes <- runParserOn Nothing p argMap EnvMap.empty Nothing
+    errOrRes <- runParserOn allCapabilities Nothing p argMap EnvMap.empty Nothing
     context (showParserABit p) $
       case errOrRes of
         Left errs ->
@@ -888,7 +966,7 @@
 envParseSpec envVars p expected = withFrozenCallStack $ do
   it (unwords ["parses environment", show envVars, "as", show expected]) $ do
     let envMap = EnvMap.parse envVars
-    errOrRes <- runParserOn Nothing p emptyArgs envMap Nothing
+    errOrRes <- runParserOn allCapabilities Nothing p emptyArgs envMap Nothing
     case errOrRes of
       Left err -> expectationFailure $ T.unpack $ renderChunksText With24BitColours $ renderErrors err
       Right actual -> actual `shouldBe` expected
@@ -899,7 +977,7 @@
 confParseSpec :: (HasCallStack) => (Show a, Eq a) => Maybe JSON.Object -> Parser a -> a -> Spec
 confParseSpec mConf p expected = withFrozenCallStack $ do
   it (unwords ["parses configuration", show mConf, "as", show expected]) $ do
-    errOrRes <- runParserOn Nothing p emptyArgs EnvMap.empty mConf
+    errOrRes <- runParserOn allCapabilities Nothing p emptyArgs EnvMap.empty mConf
     case errOrRes of
       Left err -> expectationFailure $ T.unpack $ renderChunksText With24BitColours $ renderErrors err
       Right actual -> actual `shouldBe` expected
@@ -912,8 +990,19 @@
   Maybe JSON.Object ->
   a ->
   IO ()
-shouldParse p args e mConf expected = do
-  errOrRes <- runParserOn Nothing p args e mConf
+shouldParse p = shouldParse' p allCapabilities
+
+shouldParse' ::
+  (Show a, Eq a) =>
+  Parser a ->
+  Capabilities ->
+  Args ->
+  EnvMap ->
+  Maybe JSON.Object ->
+  a ->
+  IO ()
+shouldParse' p capabilities args e mConf expected = do
+  errOrRes <- runParserOn capabilities Nothing p args e mConf
   context (showParserABit p) $ case errOrRes of
     Left errs -> expectationFailure $ T.unpack $ renderChunksText With24BitColours $ renderErrors errs
     Right actual -> actual `shouldBe` expected
@@ -926,8 +1015,23 @@
   Maybe JSON.Object ->
   (NonEmpty ParseErrorMessage -> Bool) ->
   IO ()
-shouldFail p args e mConf isExpected = do
-  errOrRes <- runParserOn Nothing p args e mConf
+shouldFail p = shouldFail' p allCapabilities
+
+shouldFail' ::
+  (Show a) =>
+  Parser a ->
+  Capabilities ->
+  Args ->
+  EnvMap ->
+  Maybe JSON.Object ->
+  (NonEmpty ParseErrorMessage -> Bool) ->
+  IO ()
+shouldFail' p capabilities args e mConf isExpected = do
+  errOrRes <- runParserOn capabilities Nothing p args e mConf
   case errOrRes of
     Left errs -> NE.map parseErrorMessage errs `shouldSatisfy` isExpected
     Right actual -> expectationFailure $ show actual
+
+instance GenValid Capabilities
+
+instance GenValid Capability
diff --git a/test_resources/docs/big-config/show.txt b/test_resources/docs/big-config/show.txt
--- a/test_resources/docs/big-config/show.txt
+++ b/test_resources/docs/big-config/show.txt
@@ -4,11 +4,13 @@
   (Check
      Nothing
      False
+     (fromList [])
      _
      (Alt
         (Check
            Nothing
            False
+           (fromList [])
            _
            (Setting
               Nothing
@@ -18,12 +20,21 @@
                  False
                  Nothing
                  True
-                 (Just ("CONFIG_FILE" :| []))
+                 (Just
+                    (EnvVarSetting
+                       { envVarSettingVar = "CONFIG_FILE"
+                       , envVarSettingAllowPrefix = True
+                       } :|
+                       []))
                  Nothing
                  Nothing
+                 []
+                 False
                  (Just "FILE_PATH")
-                 (Just "Path to the configuration file"))))
-        (Check Nothing False _ (Pure _))))
+                 (Just "Path to the configuration file")
+                 (Just _)
+                 (fromList []))))
+        (Check Nothing False (fromList []) _ (Pure _))))
   (Setting
      Nothing
      (Setting
@@ -66,5 +77,9 @@
                           _ _ (OptionalKeyCodec "sub" Nothing (StringCodec Nothing)))))) :|
               []))
         Nothing
+        []
+        False
         Nothing
-        (Just "big configuration object")))
+        (Just "big configuration object")
+        Nothing
+        (fromList [])))
diff --git a/test_resources/docs/enable-disable-optional/show.txt b/test_resources/docs/enable-disable-optional/show.txt
--- a/test_resources/docs/enable-disable-optional/show.txt
+++ b/test_resources/docs/enable-disable-optional/show.txt
@@ -7,6 +7,7 @@
         (Check
            Nothing
            True
+           (fromList [])
            _
            (Setting
               Nothing
@@ -19,12 +20,17 @@
                  Nothing
                  Nothing
                  Nothing
+                 []
+                 False
                  Nothing
-                 (Just "Example of an enable/disable switch"))))
+                 (Just "Example of an enable/disable switch")
+                 Nothing
+                 (fromList []))))
         (Alt
            (Check
               Nothing
               True
+              (fromList [])
               _
               (Setting
                  Nothing
@@ -37,12 +43,17 @@
                     Nothing
                     Nothing
                     Nothing
+                    []
+                    True
                     Nothing
-                    Nothing)))
+                    Nothing
+                    Nothing
+                    (fromList []))))
            (Alt
               (Check
                  Nothing
                  True
+                 (fromList [])
                  _
                  (Setting
                     Nothing
@@ -55,12 +66,17 @@
                        Nothing
                        Nothing
                        Nothing
+                       []
+                       True
                        Nothing
-                       Nothing)))
+                       Nothing
+                       Nothing
+                       (fromList []))))
               (Alt
                  (Check
                     Nothing
                     True
+                    (fromList [])
                     _
                     (Setting
                        Nothing
@@ -70,14 +86,24 @@
                           False
                           Nothing
                           False
-                          (Just ("EXAMPLE" :| []))
+                          (Just
+                             (EnvVarSetting
+                                { envVarSettingVar = "EXAMPLE"
+                                , envVarSettingAllowPrefix = True
+                                } :|
+                                []))
                           Nothing
                           Nothing
+                          []
+                          False
                           (Just "BOOL")
-                          (Just "Example of an enable/disable switch"))))
+                          (Just "Example of an enable/disable switch")
+                          Nothing
+                          (fromList []))))
                  (Check
                     Nothing
                     True
+                    (fromList [])
                     _
                     (Setting
                        Nothing
@@ -97,6 +123,10 @@
                                 (EitherCodec PossiblyJointUnion NullCodec (BoolCodec Nothing)) :|
                                 []))
                           Nothing
+                          []
+                          False
                           Nothing
-                          (Just "Example of an enable/disable switch"))))))))
+                          (Just "Example of an enable/disable switch")
+                          Nothing
+                          (fromList []))))))))
      (Pure _))
diff --git a/test_resources/docs/enable-disable/show.txt b/test_resources/docs/enable-disable/show.txt
--- a/test_resources/docs/enable-disable/show.txt
+++ b/test_resources/docs/enable-disable/show.txt
@@ -6,6 +6,7 @@
      (Check
         Nothing
         True
+        (fromList [])
         _
         (Setting
            Nothing
@@ -18,12 +19,17 @@
               Nothing
               Nothing
               Nothing
+              []
+              False
               Nothing
-              (Just "Example of an enable/disable switch"))))
+              (Just "Example of an enable/disable switch")
+              Nothing
+              (fromList []))))
      (Alt
         (Check
            Nothing
            True
+           (fromList [])
            _
            (Setting
               Nothing
@@ -36,12 +42,17 @@
                  Nothing
                  Nothing
                  Nothing
+                 []
+                 True
                  Nothing
-                 Nothing)))
+                 Nothing
+                 Nothing
+                 (fromList []))))
         (Alt
            (Check
               Nothing
               True
+              (fromList [])
               _
               (Setting
                  Nothing
@@ -54,12 +65,17 @@
                     Nothing
                     Nothing
                     Nothing
+                    []
+                    True
                     Nothing
-                    Nothing)))
+                    Nothing
+                    Nothing
+                    (fromList []))))
            (Alt
               (Check
                  Nothing
                  True
+                 (fromList [])
                  _
                  (Setting
                     Nothing
@@ -69,15 +85,25 @@
                        False
                        Nothing
                        False
-                       (Just ("EXAMPLE" :| []))
+                       (Just
+                          (EnvVarSetting
+                             { envVarSettingVar = "EXAMPLE"
+                             , envVarSettingAllowPrefix = True
+                             } :|
+                             []))
                        Nothing
                        Nothing
+                       []
+                       False
                        (Just "BOOL")
-                       (Just "Example of an enable/disable switch"))))
+                       (Just "Example of an enable/disable switch")
+                       Nothing
+                       (fromList []))))
               (Alt
                  (Check
                     Nothing
                     True
+                    (fromList [])
                     _
                     (Setting
                        Nothing
@@ -97,6 +123,10 @@
                                 (EitherCodec PossiblyJointUnion NullCodec (BoolCodec Nothing)) :|
                                 []))
                           Nothing
+                          []
+                          False
                           Nothing
-                          (Just "Example of an enable/disable switch"))))
+                          (Just "Example of an enable/disable switch")
+                          Nothing
+                          (fromList []))))
                  (Pure _))))))
diff --git a/test_resources/docs/greet/show.txt b/test_resources/docs/greet/show.txt
--- a/test_resources/docs/greet/show.txt
+++ b/test_resources/docs/greet/show.txt
@@ -4,11 +4,13 @@
   (Check
      Nothing
      False
+     (fromList [])
      _
      (Alt
         (Check
            Nothing
            False
+           (fromList [])
            _
            (Setting
               Nothing
@@ -18,17 +20,27 @@
                  False
                  Nothing
                  True
-                 (Just ("GREET_CONFIG_FILE" :| []))
+                 (Just
+                    (EnvVarSetting
+                       { envVarSettingVar = "GREET_CONFIG_FILE"
+                       , envVarSettingAllowPrefix = True
+                       } :|
+                       []))
                  Nothing
                  Nothing
+                 []
+                 False
                  (Just "FILE_PATH")
-                 (Just "Path to the configuration file"))))
-        (Check Nothing False _ (Pure _))))
+                 (Just "Path to the configuration file")
+                 (Just _)
+                 (fromList []))))
+        (Check Nothing False (fromList []) _ (Pure _))))
   (Ap
      (Ap
         (Check
            Nothing
            True
+           (fromList [])
            _
            (Setting
               Nothing
@@ -38,8 +50,13 @@
                  False
                  Nothing
                  True
-                 (Just ("GREET_GREETING" :| []))
                  (Just
+                    (EnvVarSetting
+                       { envVarSettingVar = "GREET_GREETING"
+                       , envVarSettingAllowPrefix = True
+                       } :|
+                       []))
+                 (Just
                     (ConfigValSetting
                        ("greeting" :| [])
                        BimapCodec
@@ -51,8 +68,12 @@
                           (BimapCodec _ _ (StringCodec Nothing))) :|
                        []))
                  (Just _)
+                 [ "Greetings" ]
+                 False
                  (Just "GREETING")
-                 (Just "Greeting to use"))))
+                 (Just "Greeting to use")
+                 Nothing
+                 (fromList []))))
         (Setting
            Nothing
            (Setting
@@ -64,8 +85,12 @@
               Nothing
               Nothing
               (Just _)
+              []
+              False
               (Just "SUBJECT")
-              (Just "Who to greet"))))
+              (Just "Who to greet")
+              Nothing
+              (fromList []))))
      (Setting
         Nothing
         (Setting
@@ -74,8 +99,13 @@
            False
            (Just _)
            False
-           (Just ("GREET_POLITE" :| []))
            (Just
+              (EnvVarSetting
+                 { envVarSettingVar = "GREET_POLITE"
+                 , envVarSettingAllowPrefix = True
+                 } :|
+                 []))
+           (Just
               (ConfigValSetting
                  ("polite" :| [])
                  BimapCodec
@@ -84,5 +114,9 @@
                  (EitherCodec PossiblyJointUnion NullCodec (BoolCodec Nothing)) :|
                  []))
            (Just _)
+           []
+           False
            (Just "ANY")
-           (Just "Whether to be polite"))))
+           (Just "Whether to be polite")
+           Nothing
+           (fromList []))))
diff --git a/test_resources/docs/hidden/show.txt b/test_resources/docs/hidden/show.txt
--- a/test_resources/docs/hidden/show.txt
+++ b/test_resources/docs/hidden/show.txt
@@ -1,6 +1,7 @@
 Check
   Nothing
   True
+  (fromList [])
   _
   (Setting
      Nothing
@@ -13,5 +14,9 @@
         Nothing
         Nothing
         (Just _)
+        []
+        True
         (Just "STR")
-        (Just "Example of a hidden setting")))
+        (Just "Example of a hidden setting")
+        Nothing
+        (fromList [])))
diff --git a/test_resources/docs/many-args/show.txt b/test_resources/docs/many-args/show.txt
--- a/test_resources/docs/many-args/show.txt
+++ b/test_resources/docs/many-args/show.txt
@@ -1,4 +1,5 @@
 Many
+  Nothing
   (Setting
      Nothing
      (Setting
@@ -10,5 +11,9 @@
         Nothing
         Nothing
         Nothing
+        []
+        False
         (Just "ARGUMENT")
-        (Just "Argument")))
+        (Just "Argument")
+        Nothing
+        (fromList [])))
diff --git a/test_resources/docs/optional/show.txt b/test_resources/docs/optional/show.txt
--- a/test_resources/docs/optional/show.txt
+++ b/test_resources/docs/optional/show.txt
@@ -2,6 +2,7 @@
   (Check
      Nothing
      True
+     (fromList [])
      _
      (Setting
         Nothing
@@ -14,6 +15,10 @@
            Nothing
            Nothing
            Nothing
+           []
+           False
            (Just "ARGUMENT")
-           (Just "Argument"))))
+           (Just "Argument")
+           Nothing
+           (fromList []))))
   (Pure _)
diff --git a/test_resources/docs/same-help/show.txt b/test_resources/docs/same-help/show.txt
--- a/test_resources/docs/same-help/show.txt
+++ b/test_resources/docs/same-help/show.txt
@@ -7,6 +7,7 @@
         (Check
            Nothing
            True
+           (fromList [])
            _
            (Setting
               Nothing
@@ -16,8 +17,11 @@
                  False
                  Nothing
                  True
-                 (Just ("INT" :| []))
                  (Just
+                    (EnvVarSetting
+                       { envVarSettingVar = "INT" , envVarSettingAllowPrefix = True } :|
+                       []))
+                 (Just
                     (ConfigValSetting
                        ("int" :| [])
                        BimapCodec
@@ -37,11 +41,16 @@
                                   }))) :|
                        []))
                  Nothing
+                 []
+                 False
                  (Just "INT")
-                 (Just "int or string"))))
+                 (Just "int or string")
+                 Nothing
+                 (fromList []))))
         (Check
            Nothing
            True
+           (fromList [])
            _
            (Setting
               Nothing
@@ -51,8 +60,13 @@
                  False
                  Nothing
                  True
-                 (Just ("STRING" :| []))
                  (Just
+                    (EnvVarSetting
+                       { envVarSettingVar = "STRING"
+                       , envVarSettingAllowPrefix = True
+                       } :|
+                       []))
+                 (Just
                     (ConfigValSetting
                        ("string" :| [])
                        BimapCodec
@@ -64,8 +78,12 @@
                           (BimapCodec _ _ (StringCodec Nothing))) :|
                        []))
                  Nothing
+                 []
+                 False
                  (Just "STR")
-                 (Just "int or string")))))
+                 (Just "int or string")
+                 Nothing
+                 (fromList [])))))
      (Alt
         (Setting
            Nothing
@@ -78,8 +96,12 @@
               Nothing
               Nothing
               Nothing
+              []
+              False
               Nothing
-              (Just "int or string")))
+              (Just "int or string")
+              Nothing
+              (fromList [])))
         (Alt
            (Setting
               Nothing
@@ -92,8 +114,12 @@
                  Nothing
                  Nothing
                  Nothing
+                 []
+                 True
                  Nothing
-                 Nothing))
+                 Nothing
+                 Nothing
+                 (fromList [])))
            (Alt
               (Setting
                  Nothing
@@ -106,8 +132,12 @@
                     Nothing
                     Nothing
                     Nothing
+                    []
+                    True
                     Nothing
-                    Nothing))
+                    Nothing
+                    Nothing
+                    (fromList [])))
               (Alt
                  (Setting
                     Nothing
@@ -117,11 +147,18 @@
                        False
                        Nothing
                        False
-                       (Just ("OTHER" :| []))
+                       (Just
+                          (EnvVarSetting
+                             { envVarSettingVar = "OTHER" , envVarSettingAllowPrefix = True } :|
+                             []))
                        Nothing
                        Nothing
+                       []
+                       False
                        (Just "BOOL")
-                       (Just "int or string")))
+                       (Just "int or string")
+                       Nothing
+                       (fromList [])))
                  (Alt
                     (Setting
                        Nothing
@@ -141,6 +178,10 @@
                                 (EitherCodec PossiblyJointUnion NullCodec (BoolCodec Nothing)) :|
                                 []))
                           Nothing
+                          []
+                          False
                           Nothing
-                          (Just "int or string")))
+                          (Just "int or string")
+                          Nothing
+                          (fromList [])))
                     (Pure _)))))))
diff --git a/test_resources/docs/secret/show.txt b/test_resources/docs/secret/show.txt
--- a/test_resources/docs/secret/show.txt
+++ b/test_resources/docs/secret/show.txt
@@ -9,10 +9,12 @@
               (Check
                  Nothing
                  False
+                 (fromList [ "read-secret" ])
                  _
                  (Check
                     Nothing
                     False
+                    (fromList [])
                     _
                     (Setting
                        Nothing
@@ -22,8 +24,13 @@
                           False
                           Nothing
                           True
-                          (Just ("FIRST_SECRET_FILE" :| []))
                           (Just
+                             (EnvVarSetting
+                                { envVarSettingVar = "FIRST_SECRET_FILE"
+                                , envVarSettingAllowPrefix = True
+                                } :|
+                                []))
+                          (Just
                              (ConfigValSetting
                                 ("first-secret-file" :| [])
                                 BimapCodec
@@ -35,12 +42,17 @@
                                    (BimapCodec _ _ (StringCodec Nothing))) :|
                                 []))
                           Nothing
+                          []
+                          False
                           (Just "FILE_PATH")
-                          (Just "First example secret")))))
+                          (Just "First example secret")
+                          (Just _)
+                          (fromList [])))))
               (Alt
                  (Check
                     Nothing
                     True
+                    (fromList [ "read-secret" ])
                     _
                     (Setting
                        Nothing
@@ -53,30 +65,45 @@
                           Nothing
                           Nothing
                           Nothing
+                          []
+                          False
                           (Just "SECRET")
-                          (Just "Second example secret, bare or in a file"))))
+                          (Just "Second example secret, bare or in a file")
+                          Nothing
+                          (fromList []))))
                  (Alt
                     (Check
                        Nothing
                        False
+                       (fromList [ "read-secret" ])
                        _
-                       (Setting
+                       (Check
                           Nothing
+                          False
+                          (fromList [])
+                          _
                           (Setting
-                             [ DashedLong ('s' :| "econd-secret-file") ]
-                             [ _ , _ ]
-                             False
                              Nothing
-                             True
-                             Nothing
-                             Nothing
-                             Nothing
-                             (Just "FILE_PATH")
-                             (Just "Second example secret, bare or in a file"))))
+                             (Setting
+                                [ DashedLong ('s' :| "econd-secret-file") ]
+                                [ _ , _ ]
+                                False
+                                Nothing
+                                True
+                                Nothing
+                                Nothing
+                                Nothing
+                                []
+                                False
+                                (Just "FILE_PATH")
+                                (Just "Second example secret, bare or in a file")
+                                Nothing
+                                (fromList [])))))
                     (Alt
                        (Check
                           Nothing
                           True
+                          (fromList [ "read-secret" ])
                           _
                           (Setting
                              Nothing
@@ -86,33 +113,30 @@
                                 False
                                 Nothing
                                 False
-                                (Just ("SECOND_SECRET" :| []))
+                                (Just
+                                   (EnvVarSetting
+                                      { envVarSettingVar = "SECOND_SECRET"
+                                      , envVarSettingAllowPrefix = True
+                                      } :|
+                                      []))
                                 Nothing
                                 Nothing
+                                []
+                                False
                                 (Just "SECRET")
-                                (Just "Second example secret, bare or in a file"))))
+                                (Just "Second example secret, bare or in a file")
+                                Nothing
+                                (fromList []))))
                        (Alt
                           (Check
                              Nothing
                              False
+                             (fromList [ "read-secret" ])
                              _
-                             (Setting
-                                Nothing
-                                (Setting
-                                   []
-                                   [ _ , _ ]
-                                   False
-                                   Nothing
-                                   False
-                                   (Just ("SECOND_SECRET_FILE" :| []))
-                                   Nothing
-                                   Nothing
-                                   (Just "FILE_PATH")
-                                   (Just "Second example secret, bare or in a file"))))
-                          (Alt
                              (Check
                                 Nothing
-                                True
+                                False
+                                (fromList [])
                                 _
                                 (Setting
                                    Nothing
@@ -122,24 +146,25 @@
                                       False
                                       Nothing
                                       False
-                                      Nothing
                                       (Just
-                                         (ConfigValSetting
-                                            ("second-secret" :| [])
-                                            BimapCodec
-                                            _
-                                            _
-                                            (EitherCodec
-                                               PossiblyJointUnion
-                                               NullCodec
-                                               (BimapCodec _ _ (StringCodec Nothing))) :|
+                                         (EnvVarSetting
+                                            { envVarSettingVar = "SECOND_SECRET_FILE"
+                                            , envVarSettingAllowPrefix = True
+                                            } :|
                                             []))
                                       Nothing
-                                      (Just "SECRET")
-                                      (Just "Second example secret, bare or in a file"))))
+                                      Nothing
+                                      []
+                                      False
+                                      (Just "FILE_PATH")
+                                      (Just "Second example secret, bare or in a file")
+                                      Nothing
+                                      (fromList [])))))
+                          (Alt
                              (Check
                                 Nothing
-                                False
+                                True
+                                (fromList [ "read-secret" ])
                                 _
                                 (Setting
                                    Nothing
@@ -152,7 +177,7 @@
                                       Nothing
                                       (Just
                                          (ConfigValSetting
-                                            ("second-secret-file" :| [])
+                                            ("second-secret" :| [])
                                             BimapCodec
                                             _
                                             _
@@ -162,12 +187,54 @@
                                                (BimapCodec _ _ (StringCodec Nothing))) :|
                                             []))
                                       Nothing
-                                      (Just "FILE_PATH")
-                                      (Just "Second example secret, bare or in a file"))))))))))
+                                      []
+                                      False
+                                      (Just "SECRET")
+                                      (Just "Second example secret, bare or in a file")
+                                      Nothing
+                                      (fromList []))))
+                             (Check
+                                Nothing
+                                False
+                                (fromList [ "read-secret" ])
+                                _
+                                (Check
+                                   Nothing
+                                   False
+                                   (fromList [])
+                                   _
+                                   (Setting
+                                      Nothing
+                                      (Setting
+                                         []
+                                         [ _ , _ ]
+                                         False
+                                         Nothing
+                                         False
+                                         Nothing
+                                         (Just
+                                            (ConfigValSetting
+                                               ("second-secret-file" :| [])
+                                               BimapCodec
+                                               _
+                                               _
+                                               (EitherCodec
+                                                  PossiblyJointUnion
+                                                  NullCodec
+                                                  (BimapCodec _ _ (StringCodec Nothing))) :|
+                                               []))
+                                         Nothing
+                                         []
+                                         False
+                                         (Just "FILE_PATH")
+                                         (Just "Second example secret, bare or in a file")
+                                         Nothing
+                                         (fromList [])))))))))))
            (Alt
               (Check
                  Nothing
                  True
+                 (fromList [ "read-secret" ])
                  _
                  (Setting
                     Nothing
@@ -180,29 +247,44 @@
                        Nothing
                        Nothing
                        Nothing
+                       []
+                       False
                        (Just "SECRET")
-                       (Just "Second example secret, bare or in a file, only option"))))
+                       (Just "Second example secret, bare or in a file, only option")
+                       Nothing
+                       (fromList []))))
               (Check
                  Nothing
                  False
+                 (fromList [ "read-secret" ])
                  _
-                 (Setting
+                 (Check
                     Nothing
+                    False
+                    (fromList [])
+                    _
                     (Setting
-                       [ DashedLong ('s' :| "econd-secret-file") ]
-                       [ _ , _ ]
-                       False
                        Nothing
-                       True
-                       Nothing
-                       Nothing
-                       Nothing
-                       (Just "FILE_PATH")
-                       (Just "Second example secret, bare or in a file, only option"))))))
+                       (Setting
+                          [ DashedLong ('s' :| "econd-secret-file") ]
+                          [ _ , _ ]
+                          False
+                          Nothing
+                          True
+                          Nothing
+                          Nothing
+                          Nothing
+                          []
+                          False
+                          (Just "FILE_PATH")
+                          (Just "Second example secret, bare or in a file, only option")
+                          Nothing
+                          (fromList [])))))))
         (Alt
            (Check
               Nothing
               True
+              (fromList [ "read-secret" ])
               _
               (Setting
                  Nothing
@@ -212,32 +294,57 @@
                     False
                     Nothing
                     False
-                    (Just ("second-secret" :| []))
+                    (Just
+                       (EnvVarSetting
+                          { envVarSettingVar = "second-secret"
+                          , envVarSettingAllowPrefix = True
+                          } :|
+                          []))
                     Nothing
                     Nothing
+                    []
+                    False
                     (Just "SECRET")
-                    (Just "Second example secret, bare or in a file, only env"))))
+                    (Just "Second example secret, bare or in a file, only env")
+                    Nothing
+                    (fromList []))))
            (Check
               Nothing
               False
+              (fromList [ "read-secret" ])
               _
-              (Setting
+              (Check
                  Nothing
+                 False
+                 (fromList [])
+                 _
                  (Setting
-                    []
-                    [ _ , _ ]
-                    False
                     Nothing
-                    False
-                    (Just ("second-secret_FILE" :| []))
-                    Nothing
-                    Nothing
-                    (Just "FILE_PATH")
-                    (Just "Second example secret, bare or in a file, only env"))))))
+                    (Setting
+                       []
+                       [ _ , _ ]
+                       False
+                       Nothing
+                       False
+                       (Just
+                          (EnvVarSetting
+                             { envVarSettingVar = "second-secret_FILE"
+                             , envVarSettingAllowPrefix = True
+                             } :|
+                             []))
+                       Nothing
+                       Nothing
+                       []
+                       False
+                       (Just "FILE_PATH")
+                       (Just "Second example secret, bare or in a file, only env")
+                       Nothing
+                       (fromList [])))))))
      (Alt
         (Check
            Nothing
            True
+           (fromList [ "read-secret" ])
            _
            (Setting
               Nothing
@@ -260,32 +367,46 @@
                           (BimapCodec _ _ (StringCodec Nothing))) :|
                        []))
                  Nothing
+                 []
+                 False
                  (Just "SECRET")
-                 (Just "Second example secret, bare or in a file, only conf"))))
+                 (Just "Second example secret, bare or in a file, only conf")
+                 Nothing
+                 (fromList []))))
         (Check
            Nothing
            False
+           (fromList [ "read-secret" ])
            _
-           (Setting
+           (Check
               Nothing
+              False
+              (fromList [])
+              _
               (Setting
-                 []
-                 [ _ , _ ]
-                 False
                  Nothing
-                 False
-                 Nothing
-                 (Just
-                    (ConfigValSetting
-                       ("second-secret-file" :| [])
-                       BimapCodec
-                       _
-                       _
-                       (EitherCodec
-                          PossiblyJointUnion
-                          NullCodec
-                          (BimapCodec _ _ (StringCodec Nothing))) :|
-                       []))
-                 Nothing
-                 (Just "FILE_PATH")
-                 (Just "Second example secret, bare or in a file, only conf"))))))
+                 (Setting
+                    []
+                    [ _ , _ ]
+                    False
+                    Nothing
+                    False
+                    Nothing
+                    (Just
+                       (ConfigValSetting
+                          ("second-secret-file" :| [])
+                          BimapCodec
+                          _
+                          _
+                          (EitherCodec
+                             PossiblyJointUnion
+                             NullCodec
+                             (BimapCodec _ _ (StringCodec Nothing))) :|
+                          []))
+                    Nothing
+                    []
+                    False
+                    (Just "FILE_PATH")
+                    (Just "Second example secret, bare or in a file, only conf")
+                    Nothing
+                    (fromList [])))))))
diff --git a/test_resources/docs/some-args/show.txt b/test_resources/docs/some-args/show.txt
--- a/test_resources/docs/some-args/show.txt
+++ b/test_resources/docs/some-args/show.txt
@@ -1,8 +1,10 @@
 Check
   Nothing
   True
+  (fromList [])
   _
   (Some
+     Nothing
      (Setting
         Nothing
         (Setting
@@ -14,5 +16,9 @@
            Nothing
            Nothing
            Nothing
+           []
+           False
            (Just "ARGUMENT")
-           (Just "Argument"))))
+           (Just "Argument")
+           Nothing
+           (fromList []))))
diff --git a/test_resources/docs/sub-commands/show.txt b/test_resources/docs/sub-commands/show.txt
--- a/test_resources/docs/sub-commands/show.txt
+++ b/test_resources/docs/sub-commands/show.txt
@@ -4,11 +4,13 @@
   (Check
      Nothing
      False
+     (fromList [])
      _
      (Alt
         (Check
            Nothing
            False
+           (fromList [])
            _
            (Setting
               Nothing
@@ -18,12 +20,21 @@
                  False
                  Nothing
                  True
-                 (Just ("CONFIG_FILE" :| []))
+                 (Just
+                    (EnvVarSetting
+                       { envVarSettingVar = "CONFIG_FILE"
+                       , envVarSettingAllowPrefix = True
+                       } :|
+                       []))
                  Nothing
                  Nothing
+                 []
+                 False
                  (Just "FILE_PATH")
-                 (Just "Path to the configuration file"))))
-        (Check Nothing False _ (Pure _))))
+                 (Just "Path to the configuration file")
+                 (Just _)
+                 (fromList []))))
+        (Check Nothing False (fromList []) _ (Pure _))))
   (Commands
      Nothing
      Nothing
@@ -33,6 +44,7 @@
          (Check
             Nothing
             True
+            (fromList [])
             _
             (Setting
                Nothing
@@ -42,8 +54,11 @@
                   False
                   Nothing
                   True
-                  (Just ("NAME" :| []))
                   (Just
+                     (EnvVarSetting
+                        { envVarSettingVar = "NAME" , envVarSettingAllowPrefix = True } :|
+                        []))
+                  (Just
                      (ConfigValSetting
                         ("name" :| [])
                         BimapCodec
@@ -55,8 +70,12 @@
                            (BimapCodec _ _ (StringCodec Nothing))) :|
                         []))
                   Nothing
+                  [ "john" ]
+                  False
                   (Just "NAME")
-                  (Just "name"))))
+                  (Just "name")
+                  Nothing
+                  (fromList []))))
      , Command
          "sub"
          "command with subcommands"
diff --git a/test_resources/docs/sub-settings/show.txt b/test_resources/docs/sub-settings/show.txt
--- a/test_resources/docs/sub-settings/show.txt
+++ b/test_resources/docs/sub-settings/show.txt
@@ -4,11 +4,13 @@
   (Check
      Nothing
      False
+     (fromList [])
      _
      (Alt
         (Check
            Nothing
            False
+           (fromList [])
            _
            (Setting
               Nothing
@@ -18,12 +20,21 @@
                  False
                  Nothing
                  True
-                 (Just ("CONFIG_FILE" :| []))
+                 (Just
+                    (EnvVarSetting
+                       { envVarSettingVar = "CONFIG_FILE"
+                       , envVarSettingAllowPrefix = True
+                       } :|
+                       []))
                  Nothing
                  Nothing
+                 []
+                 False
                  (Just "FILE_PATH")
-                 (Just "Path to the configuration file"))))
-        (Check Nothing False _ (Pure _))))
+                 (Just "Path to the configuration file")
+                 (Just _)
+                 (fromList []))))
+        (Check Nothing False (fromList []) _ (Pure _))))
   (Setting
      Nothing
      (Setting
@@ -32,8 +43,13 @@
         False
         Nothing
         True
-        (Just ("FOO_BAR_QUUX" :| []))
         (Just
+           (EnvVarSetting
+              { envVarSettingVar = "FOO_BAR_QUUX"
+              , envVarSettingAllowPrefix = True
+              } :|
+              []))
+        (Just
            (ConfigValSetting
               ("foo" :| [ "bar" , "quux" ])
               BimapCodec
@@ -45,5 +61,9 @@
                  (BimapCodec _ _ (StringCodec Nothing))) :|
               []))
         Nothing
+        []
+        False
         (Just "STR")
-        (Just "Example with sub-settings")))
+        (Just "Example with sub-settings")
+        Nothing
+        (fromList [])))
diff --git a/test_resources/docs/sum-type/show.txt b/test_resources/docs/sum-type/show.txt
--- a/test_resources/docs/sum-type/show.txt
+++ b/test_resources/docs/sum-type/show.txt
@@ -14,8 +14,12 @@
            Nothing
            Nothing
            Nothing
+           []
+           False
            Nothing
-           (Just "a")))
+           (Just "a")
+           Nothing
+           (fromList [])))
      (Alt
         (Setting
            Nothing
@@ -28,8 +32,12 @@
               Nothing
               Nothing
               Nothing
+              []
+              False
               Nothing
-              (Just "b")))
+              (Just "b")
+              Nothing
+              (fromList [])))
         (Alt
            (Setting
               Nothing
@@ -39,11 +47,20 @@
                  False
                  Nothing
                  False
-                 (Just ("sum-type" :| []))
+                 (Just
+                    (EnvVarSetting
+                       { envVarSettingVar = "sum-type"
+                       , envVarSettingAllowPrefix = True
+                       } :|
+                       []))
                  Nothing
                  Nothing
+                 []
+                 False
                  (Just "SUM_TYPE")
-                 (Just "example")))
+                 (Just "example")
+                 Nothing
+                 (fromList [])))
            (Alt
               (Setting
                  Nothing
@@ -66,8 +83,12 @@
                              (BimapCodec _ _ (StringCodec Nothing))) :|
                           []))
                     Nothing
+                    []
+                    False
                     Nothing
-                    (Just "example")))
+                    (Just "example")
+                    Nothing
+                    (fromList [])))
               (Setting
                  Nothing
                  (Setting
@@ -79,5 +100,9 @@
                     Nothing
                     Nothing
                     (Just _)
+                    []
+                    False
                     Nothing
-                    (Just "example")))))))
+                    (Just "example")
+                    Nothing
+                    (fromList [])))))))
diff --git a/test_resources/docs/three-commands/show.txt b/test_resources/docs/three-commands/show.txt
--- a/test_resources/docs/three-commands/show.txt
+++ b/test_resources/docs/three-commands/show.txt
@@ -11,6 +11,7 @@
          (Check
             Nothing
             True
+            (fromList [])
             _
             (Setting
                Nothing
@@ -23,8 +24,12 @@
                   Nothing
                   Nothing
                   Nothing
+                  []
+                  False
                   (Just "STR")
-                  (Just "argument"))))
+                  (Just "argument")
+                  Nothing
+                  (fromList []))))
      , Command
          "two"
          "second"
@@ -32,6 +37,7 @@
             (Check
                Nothing
                True
+               (fromList [])
                _
                (Setting
                   Nothing
@@ -41,8 +47,13 @@
                      False
                      Nothing
                      True
-                     (Just ("NUMBER" :| []))
                      (Just
+                        (EnvVarSetting
+                           { envVarSettingVar = "NUMBER"
+                           , envVarSettingAllowPrefix = True
+                           } :|
+                           []))
+                     (Just
                         (ConfigValSetting
                            ("number" :| [])
                            BimapCodec
@@ -62,8 +73,12 @@
                                       }))) :|
                            []))
                      Nothing
+                     [ "5" ]
+                     False
                      (Just "INT")
-                     (Just "number"))))
+                     (Just "number")
+                     Nothing
+                     (fromList []))))
             (Alt
                (Setting
                   Nothing
@@ -76,8 +91,12 @@
                      Nothing
                      Nothing
                      Nothing
+                     []
+                     False
                      Nothing
-                     (Just "enable extra")))
+                     (Just "enable extra")
+                     Nothing
+                     (fromList [])))
                (Alt
                   (Setting
                      Nothing
@@ -90,8 +109,12 @@
                         Nothing
                         Nothing
                         Nothing
+                        []
+                        True
                         Nothing
-                        Nothing))
+                        Nothing
+                        Nothing
+                        (fromList [])))
                   (Alt
                      (Setting
                         Nothing
@@ -104,8 +127,12 @@
                            Nothing
                            Nothing
                            Nothing
+                           []
+                           True
                            Nothing
-                           Nothing))
+                           Nothing
+                           Nothing
+                           (fromList [])))
                      (Alt
                         (Setting
                            Nothing
@@ -115,11 +142,20 @@
                               False
                               Nothing
                               False
-                              (Just ("ENABLE" :| []))
+                              (Just
+                                 (EnvVarSetting
+                                    { envVarSettingVar = "ENABLE"
+                                    , envVarSettingAllowPrefix = True
+                                    } :|
+                                    []))
                               Nothing
                               Nothing
+                              []
+                              False
                               (Just "BOOL")
-                              (Just "enable extra")))
+                              (Just "enable extra")
+                              Nothing
+                              (fromList [])))
                         (Alt
                            (Setting
                               Nothing
@@ -140,8 +176,12 @@
                                           PossiblyJointUnion NullCodec (BoolCodec Nothing)) :|
                                        []))
                                  Nothing
+                                 []
+                                 False
                                  Nothing
-                                 (Just "enable extra")))
+                                 (Just "enable extra")
+                                 Nothing
+                                 (fromList [])))
                            (Pure _)))))))
      , Command "three-very-long-command-name" "third" (Pure _)
      ])
diff --git a/test_resources/docs/verbose/show.txt b/test_resources/docs/verbose/show.txt
--- a/test_resources/docs/verbose/show.txt
+++ b/test_resources/docs/verbose/show.txt
@@ -1,8 +1,10 @@
 Check
   Nothing
   True
+  (fromList [])
   _
   (Many
+     Nothing
      (Setting
         Nothing
         (Setting
@@ -14,5 +16,9 @@
            Nothing
            Nothing
            Nothing
+           []
+           False
            Nothing
-           (Just "Verbosity level. Use multiple to increase verbosity"))))
+           (Just "Verbosity level. Use multiple to increase verbosity")
+           Nothing
+           (fromList []))))
diff --git a/test_resources/docs/with-default/show.txt b/test_resources/docs/with-default/show.txt
--- a/test_resources/docs/with-default/show.txt
+++ b/test_resources/docs/with-default/show.txt
@@ -10,8 +10,12 @@
         Nothing
         Nothing
         Nothing
+        []
+        False
         Nothing
-        (Just "first")))
+        (Just "first")
+        Nothing
+        (fromList [])))
   (Setting
      Nothing
      (Setting
@@ -23,5 +27,9 @@
         Nothing
         Nothing
         (Just _)
+        []
+        False
         Nothing
-        (Just "second")))
+        (Just "second")
+        Nothing
+        (fromList [])))
diff --git a/test_resources/docs/yes-no-optional/show.txt b/test_resources/docs/yes-no-optional/show.txt
--- a/test_resources/docs/yes-no-optional/show.txt
+++ b/test_resources/docs/yes-no-optional/show.txt
@@ -7,6 +7,7 @@
         (Check
            Nothing
            True
+           (fromList [])
            _
            (Setting
               Nothing
@@ -19,12 +20,17 @@
                  Nothing
                  Nothing
                  Nothing
+                 []
+                 False
                  Nothing
-                 (Just "Example of a yes/no switch"))))
+                 (Just "Example of a yes/no switch")
+                 Nothing
+                 (fromList []))))
         (Alt
            (Check
               Nothing
               True
+              (fromList [])
               _
               (Setting
                  Nothing
@@ -37,12 +43,17 @@
                     Nothing
                     Nothing
                     Nothing
+                    []
+                    True
                     Nothing
-                    Nothing)))
+                    Nothing
+                    Nothing
+                    (fromList []))))
            (Alt
               (Check
                  Nothing
                  True
+                 (fromList [])
                  _
                  (Setting
                     Nothing
@@ -55,12 +66,17 @@
                        Nothing
                        Nothing
                        Nothing
+                       []
+                       True
                        Nothing
-                       Nothing)))
+                       Nothing
+                       Nothing
+                       (fromList []))))
               (Alt
                  (Check
                     Nothing
                     True
+                    (fromList [])
                     _
                     (Setting
                        Nothing
@@ -70,14 +86,24 @@
                           False
                           Nothing
                           False
-                          (Just ("EXAMPLE" :| []))
+                          (Just
+                             (EnvVarSetting
+                                { envVarSettingVar = "EXAMPLE"
+                                , envVarSettingAllowPrefix = True
+                                } :|
+                                []))
                           Nothing
                           Nothing
+                          []
+                          False
                           (Just "BOOL")
-                          (Just "Example of a yes/no switch"))))
+                          (Just "Example of a yes/no switch")
+                          Nothing
+                          (fromList []))))
                  (Check
                     Nothing
                     True
+                    (fromList [])
                     _
                     (Setting
                        Nothing
@@ -97,6 +123,10 @@
                                 (EitherCodec PossiblyJointUnion NullCodec (BoolCodec Nothing)) :|
                                 []))
                           Nothing
+                          []
+                          False
                           Nothing
-                          (Just "Example of a yes/no switch"))))))))
+                          (Just "Example of a yes/no switch")
+                          Nothing
+                          (fromList []))))))))
      (Pure _))
diff --git a/test_resources/docs/yes-no/show.txt b/test_resources/docs/yes-no/show.txt
--- a/test_resources/docs/yes-no/show.txt
+++ b/test_resources/docs/yes-no/show.txt
@@ -6,6 +6,7 @@
      (Check
         Nothing
         True
+        (fromList [])
         _
         (Setting
            Nothing
@@ -18,12 +19,17 @@
               Nothing
               Nothing
               Nothing
+              []
+              False
               Nothing
-              (Just "Example of a yes/no switch"))))
+              (Just "Example of a yes/no switch")
+              Nothing
+              (fromList []))))
      (Alt
         (Check
            Nothing
            True
+           (fromList [])
            _
            (Setting
               Nothing
@@ -36,12 +42,17 @@
                  Nothing
                  Nothing
                  Nothing
+                 []
+                 True
                  Nothing
-                 Nothing)))
+                 Nothing
+                 Nothing
+                 (fromList []))))
         (Alt
            (Check
               Nothing
               True
+              (fromList [])
               _
               (Setting
                  Nothing
@@ -54,12 +65,17 @@
                     Nothing
                     Nothing
                     Nothing
+                    []
+                    True
                     Nothing
-                    Nothing)))
+                    Nothing
+                    Nothing
+                    (fromList []))))
            (Alt
               (Check
                  Nothing
                  True
+                 (fromList [])
                  _
                  (Setting
                     Nothing
@@ -69,15 +85,25 @@
                        False
                        Nothing
                        False
-                       (Just ("EXAMPLE" :| []))
+                       (Just
+                          (EnvVarSetting
+                             { envVarSettingVar = "EXAMPLE"
+                             , envVarSettingAllowPrefix = True
+                             } :|
+                             []))
                        Nothing
                        Nothing
+                       []
+                       False
                        (Just "BOOL")
-                       (Just "Example of a yes/no switch"))))
+                       (Just "Example of a yes/no switch")
+                       Nothing
+                       (fromList []))))
               (Alt
                  (Check
                     Nothing
                     True
+                    (fromList [])
                     _
                     (Setting
                        Nothing
@@ -97,6 +123,10 @@
                                 (EitherCodec PossiblyJointUnion NullCodec (BoolCodec Nothing)) :|
                                 []))
                           Nothing
+                          []
+                          False
                           Nothing
-                          (Just "Example of a yes/no switch"))))
+                          (Just "Example of a yes/no switch")
+                          Nothing
+                          (fromList []))))
                  (Pure _))))))
