{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}
module Stack.Types.ConfigMonoid
( ConfigMonoid (..)
, parseConfigMonoid
, parseConfigMonoidObject
, configMonoidAllowDifferentUserName
, configMonoidGHCVariantName
, configMonoidInstallGHCName
, configMonoidInstallMsysName
, configMonoidRecommendStackUpgradeName
, configMonoidSystemGHCName
) where
import Data.Aeson.Types ( Object, Value )
import Data.Aeson.WarningParser
( WarningParser, WithJSONWarnings, (..:?), (..!=)
, jsonSubWarnings, jsonSubWarningsT, withObjectWarnings
)
import Casa.Client ( CasaRepoPrefix )
import Control.Monad.Writer ( tell )
import Data.Coerce ( coerce )
import qualified Data.Map as Map
import qualified Data.Map.Strict as M
import qualified Data.Monoid as Monoid
import Data.Monoid.Map ( MonoidMap (..) )
import qualified Data.Yaml as Yaml
import Distribution.Version ( anyVersion )
import Generics.Deriving.Monoid ( mappenddefault, memptydefault )
import Stack.Prelude hiding ( snapshotLocation )
import Stack.Types.AllowNewerDeps ( AllowNewerDeps )
import Stack.Types.ApplyGhcOptions ( ApplyGhcOptions (..) )
import Stack.Types.ApplyProgOptions ( ApplyProgOptions (..) )
import Stack.Types.BuildOptsMonoid ( BuildOptsMonoid )
import Stack.Types.Casa ( CasaOptsMonoid )
import Stack.Types.CabalConfigKey ( CabalConfigKey )
import Stack.Types.ColorWhen ( ColorWhen )
import Stack.Types.Compiler
( CompilerBindistPath, CompilerRepository, CompilerTarget )
import Stack.Types.CompilerBuild ( CompilerBuild )
import Stack.Types.Docker ( DockerOptsMonoid, VersionRangeJSON (..) )
import Stack.Types.DumpLogs ( DumpLogs )
import Stack.Types.GhcOptionKey ( GhcOptionKey (..) )
import Stack.Types.GhcOptions ( GhcOptions (..) )
import Stack.Types.GHCVariant ( GHCVariant )
import Stack.Types.MsysEnvironment ( MsysEnvironment )
import Stack.Types.Nix ( NixOptsMonoid )
import Stack.Types.PvpBounds ( PvpBounds )
import Stack.Types.SCM ( SCM )
import Stack.Types.SetupInfo ( SetupInfo )
import Stack.Types.TemplateName ( TemplateName )
import Stack.Types.Version
( IntersectingVersionRange (..), VersionCheck )
import qualified System.FilePath as FilePath
import Stack.Types.Snapshot (AbstractSnapshot)
data ConfigMonoid = ConfigMonoid
{ ConfigMonoid -> First (Path Abs Dir)
stackRoot :: !(First (Path Abs Dir))
, ConfigMonoid -> First (Path Rel Dir)
workDir :: !(First (Path Rel Dir))
, ConfigMonoid -> BuildOptsMonoid
buildOpts :: !BuildOptsMonoid
, ConfigMonoid -> DockerOptsMonoid
dockerOpts :: !DockerOptsMonoid
, ConfigMonoid -> NixOptsMonoid
nixOpts :: !NixOptsMonoid
, ConfigMonoid -> First Int
connectionCount :: !(First Int)
, ConfigMonoid -> FirstTrue
hideTHLoading :: !FirstTrue
, ConfigMonoid -> First Bool
prefixTimestamps :: !(First Bool)
, ConfigMonoid -> First Text
latestSnapshot :: !(First Text)
, ConfigMonoid -> First PackageIndexConfig
packageIndex :: !(First PackageIndexConfig)
, ConfigMonoid -> First Bool
systemGHC :: !(First Bool)
, ConfigMonoid -> FirstTrue
installGHC :: !FirstTrue
, ConfigMonoid -> First Bool
installMsys :: !(First Bool)
, ConfigMonoid -> FirstFalse
skipGHCCheck :: !FirstFalse
, ConfigMonoid -> FirstFalse
skipMsys :: !FirstFalse
, ConfigMonoid -> First MsysEnvironment
msysEnvironment :: !(First MsysEnvironment)
, ConfigMonoid -> First VersionCheck
compilerCheck :: !(First VersionCheck)
, ConfigMonoid -> First CompilerRepository
compilerRepository :: !(First CompilerRepository)
, ConfigMonoid -> First CompilerTarget
compilerTarget :: !(First CompilerTarget)
, ConfigMonoid -> First CompilerBindistPath
compilerBindistPath :: !(First CompilerBindistPath)
, ConfigMonoid -> IntersectingVersionRange
requireStackVersion :: !IntersectingVersionRange
, ConfigMonoid -> First String
arch :: !(First String)
, ConfigMonoid -> First GHCVariant
ghcVariant :: !(First GHCVariant)
, ConfigMonoid -> First CompilerBuild
ghcBuild :: !(First CompilerBuild)
, ConfigMonoid -> First Int
jobs :: !(First Int)
, :: ![FilePath]
, :: ![FilePath]
, ConfigMonoid -> [Text]
customPreprocessorExts :: ![Text]
, ConfigMonoid -> First (Path Abs File)
overrideGccPath :: !(First (Path Abs File))
, ConfigMonoid -> First String
overrideHpack :: !(First FilePath)
, ConfigMonoid -> FirstFalse
hpackForce :: !FirstFalse
, ConfigMonoid -> First Bool
concurrentTests :: !(First Bool)
, ConfigMonoid -> First String
localBinPath :: !(First FilePath)
, ConfigMonoid -> First String
fileWatchHook :: !(First FilePath)
, ConfigMonoid -> Map Text Text
templateParameters :: !(Map Text Text)
, ConfigMonoid -> First SCM
scmInit :: !(First SCM)
, ConfigMonoid -> MonoidMap PackageName (Dual [Text])
ghcOptionsByName :: !(MonoidMap PackageName (Monoid.Dual [Text]))
, ConfigMonoid -> MonoidMap ApplyGhcOptions (Dual [Text])
ghcOptionsByCat :: !(MonoidMap ApplyGhcOptions (Monoid.Dual [Text]))
, ConfigMonoid -> MonoidMap CabalConfigKey (Dual [Text])
cabalConfigOpts :: !(MonoidMap CabalConfigKey (Monoid.Dual [Text]))
, :: ![Path Abs Dir]
, ConfigMonoid -> [String]
setupInfoLocations :: ![String]
, ConfigMonoid -> SetupInfo
setupInfoInline :: !SetupInfo
, ConfigMonoid -> First (Path Abs Dir)
localProgramsBase :: !(First (Path Abs Dir))
, ConfigMonoid -> First PvpBounds
pvpBounds :: !(First PvpBounds)
, ConfigMonoid -> FirstTrue
modifyCodePage :: !FirstTrue
, ConfigMonoid -> FirstFalse
rebuildGhcOptions :: !FirstFalse
, ConfigMonoid -> First ApplyGhcOptions
applyGhcOptions :: !(First ApplyGhcOptions)
, ConfigMonoid -> First ApplyProgOptions
applyProgOptions :: !(First ApplyProgOptions)
, ConfigMonoid -> First Bool
allowNewer :: !(First Bool)
, ConfigMonoid -> Maybe AllowNewerDeps
allowNewerDeps :: !(Maybe AllowNewerDeps)
, ConfigMonoid -> First (Unresolved AbstractSnapshot)
defaultInitSnapshot :: !(First (Unresolved AbstractSnapshot))
, ConfigMonoid -> First TemplateName
defaultTemplate :: !(First TemplateName)
, ConfigMonoid -> First Bool
allowDifferentUser :: !(First Bool)
, ConfigMonoid -> First DumpLogs
dumpLogs :: !(First DumpLogs)
, ConfigMonoid -> FirstTrue
saveHackageCreds :: !FirstTrue
, ConfigMonoid -> First Text
hackageBaseUrl :: !(First Text)
, ConfigMonoid -> First ColorWhen
colorWhen :: !(First ColorWhen)
, ConfigMonoid -> StylesUpdate
styles :: !StylesUpdate
, ConfigMonoid -> FirstTrue
hideSourcePaths :: !FirstTrue
, ConfigMonoid -> FirstTrue
recommendStackUpgrade :: !FirstTrue
, ConfigMonoid -> FirstFalse
notifyIfNixOnPath :: !FirstFalse
, ConfigMonoid -> FirstFalse
notifyIfGhcUntested :: !FirstFalse
, ConfigMonoid -> FirstFalse
notifyIfCabalUntested :: !FirstFalse
, ConfigMonoid -> FirstTrue
notifyIfArchUnknown :: !FirstTrue
, ConfigMonoid -> FirstTrue
notifyIfNoRunTests :: !FirstTrue
, ConfigMonoid -> FirstTrue
notifyIfNoRunBenchmarks :: !FirstTrue
, ConfigMonoid -> FirstTrue
notifyIfBaseNotBoot :: !FirstTrue
, ConfigMonoid -> CasaOptsMonoid
casaOpts :: !CasaOptsMonoid
, ConfigMonoid -> First CasaRepoPrefix
casaRepoPrefix :: !(First CasaRepoPrefix)
, ConfigMonoid -> First Text
snapshotLocation :: !(First Text)
, ConfigMonoid -> First (Unresolved GlobalHintsLocation)
globalHintsLocation :: !(First (Unresolved GlobalHintsLocation))
, ConfigMonoid -> FirstFalse
noRunCompile :: !FirstFalse
, ConfigMonoid -> First Bool
stackDeveloperMode :: !(First Bool)
}
deriving (forall x. ConfigMonoid -> Rep ConfigMonoid x)
-> (forall x. Rep ConfigMonoid x -> ConfigMonoid)
-> Generic ConfigMonoid
forall x. Rep ConfigMonoid x -> ConfigMonoid
forall x. ConfigMonoid -> Rep ConfigMonoid x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ConfigMonoid -> Rep ConfigMonoid x
from :: forall x. ConfigMonoid -> Rep ConfigMonoid x
$cto :: forall x. Rep ConfigMonoid x -> ConfigMonoid
to :: forall x. Rep ConfigMonoid x -> ConfigMonoid
Generic
instance Semigroup ConfigMonoid where
<> :: ConfigMonoid -> ConfigMonoid -> ConfigMonoid
(<>) = ConfigMonoid -> ConfigMonoid -> ConfigMonoid
forall a. (Generic a, Monoid' (Rep a)) => a -> a -> a
mappenddefault
instance Monoid ConfigMonoid where
mempty :: ConfigMonoid
mempty = ConfigMonoid
forall a. (Generic a, Monoid' (Rep a)) => a
memptydefault
mappend :: ConfigMonoid -> ConfigMonoid -> ConfigMonoid
mappend = ConfigMonoid -> ConfigMonoid -> ConfigMonoid
forall a. Semigroup a => a -> a -> a
(<>)
parseConfigMonoid ::
Path Abs Dir
-> Value
-> Yaml.Parser (WithJSONWarnings ConfigMonoid)
parseConfigMonoid :: Path Abs Dir -> Value -> Parser (WithJSONWarnings ConfigMonoid)
parseConfigMonoid = String
-> (Object -> WarningParser ConfigMonoid)
-> Value
-> Parser (WithJSONWarnings ConfigMonoid)
forall a.
String
-> (Object -> WarningParser a)
-> Value
-> Parser (WithJSONWarnings a)
withObjectWarnings String
"ConfigMonoid" ((Object -> WarningParser ConfigMonoid)
-> Value -> Parser (WithJSONWarnings ConfigMonoid))
-> (Path Abs Dir -> Object -> WarningParser ConfigMonoid)
-> Path Abs Dir
-> Value
-> Parser (WithJSONWarnings ConfigMonoid)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> Object -> WarningParser ConfigMonoid
parseConfigMonoidObject
parseConfigMonoidObject :: Path Abs Dir -> Object -> WarningParser ConfigMonoid
parseConfigMonoidObject :: Path Abs Dir -> Object -> WarningParser ConfigMonoid
parseConfigMonoidObject Path Abs Dir
rootDir Object
obj = do
let stackRoot :: First a
stackRoot = Maybe a -> First a
forall a. Maybe a -> First a
First Maybe a
forall a. Maybe a
Nothing
workDir <- Maybe (Path Rel Dir) -> First (Path Rel Dir)
forall a. Maybe a -> First a
First (Maybe (Path Rel Dir) -> First (Path Rel Dir))
-> WriterT WarningParserMonoid Parser (Maybe (Path Rel Dir))
-> WriterT WarningParserMonoid Parser (First (Path Rel Dir))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text
-> WriterT WarningParserMonoid Parser (Maybe (Path Rel Dir))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidWorkDirName
buildOpts <- jsonSubWarnings (obj ..:? configMonoidBuildOptsName ..!= mempty)
dockerOpts <-
jsonSubWarnings (obj ..:? configMonoidDockerOptsName ..!= mempty)
nixOpts <- jsonSubWarnings (obj ..:? configMonoidNixOptsName ..!= mempty)
connectionCount <- First <$> obj ..:? configMonoidConnectionCountName
hideTHLoading <- FirstTrue <$> obj ..:? configMonoidHideTHLoadingName
prefixTimestamps <- First <$> obj ..:? configMonoidPrefixTimestampsName
latestSnapshot <- obj ..:? configMonoidUrlsName >>= \case
Maybe Value
Nothing -> First Text -> WriterT WarningParserMonoid Parser (First Text)
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (First Text -> WriterT WarningParserMonoid Parser (First Text))
-> First Text -> WriterT WarningParserMonoid Parser (First Text)
forall a b. (a -> b) -> a -> b
$ Maybe Text -> First Text
forall a. Maybe a -> First a
First Maybe Text
forall a. Maybe a
Nothing
Just Value
urls -> WarningParser (WithJSONWarnings (First Text))
-> WriterT WarningParserMonoid Parser (First Text)
forall a. WarningParser (WithJSONWarnings a) -> WarningParser a
jsonSubWarnings (WarningParser (WithJSONWarnings (First Text))
-> WriterT WarningParserMonoid Parser (First Text))
-> WarningParser (WithJSONWarnings (First Text))
-> WriterT WarningParserMonoid Parser (First Text)
forall a b. (a -> b) -> a -> b
$ Parser (WithJSONWarnings (First Text))
-> WarningParser (WithJSONWarnings (First Text))
forall (m :: * -> *) a.
Monad m =>
m a -> WriterT WarningParserMonoid m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Parser (WithJSONWarnings (First Text))
-> WarningParser (WithJSONWarnings (First Text)))
-> Parser (WithJSONWarnings (First Text))
-> WarningParser (WithJSONWarnings (First Text))
forall a b. (a -> b) -> a -> b
$ String
-> (Object -> WriterT WarningParserMonoid Parser (First Text))
-> Value
-> Parser (WithJSONWarnings (First Text))
forall a.
String
-> (Object -> WarningParser a)
-> Value
-> Parser (WithJSONWarnings a)
withObjectWarnings
String
"urls"
(\Object
o -> Maybe Text -> First Text
forall a. Maybe a -> First a
First (Maybe Text -> First Text)
-> WriterT WarningParserMonoid Parser (Maybe Text)
-> WriterT WarningParserMonoid Parser (First Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
"latest-snapshot" :: WarningParser (First Text))
(Value
urls :: Value)
packageIndex <-
First <$> jsonSubWarningsT (obj ..:? configMonoidPackageIndexName)
systemGHC <- First <$> obj ..:? configMonoidSystemGHCName
installGHC <- FirstTrue <$> obj ..:? configMonoidInstallGHCName
installMsys <- First <$> obj ..:? configMonoidInstallMsysName
skipGHCCheck <- FirstFalse <$> obj ..:? configMonoidSkipGHCCheckName
skipMsys <- FirstFalse <$> obj ..:? configMonoidSkipMsysName
msysEnvironment <- First <$> obj ..:? configMonoidMsysEnvironmentName
requireStackVersion <-
IntersectingVersionRange . (.versionRangeJSON) <$>
( obj ..:? configMonoidRequireStackVersionName
..!= VersionRangeJSON anyVersion
)
arch <- First <$> obj ..:? configMonoidArchName
ghcVariant <- First <$> obj ..:? configMonoidGHCVariantName
ghcBuild <- First <$> obj ..:? configMonoidGHCBuildName
jobs <- First <$> obj ..:? configMonoidJobsName
extraIncludeDirs <- map (toFilePath rootDir FilePath.</>) <$>
obj ..:? configMonoidExtraIncludeDirsName ..!= []
extraLibDirs <- map (toFilePath rootDir FilePath.</>) <$>
obj ..:? configMonoidExtraLibDirsName ..!= []
customPreprocessorExts <-
obj ..:? configMonoidCustomPreprocessorExtsName ..!= []
overrideGccPath <- First <$> obj ..:? configMonoidOverrideGccPathName
overrideHpack <- First <$> obj ..:? configMonoidOverrideHpackName
hpackForce <- FirstFalse <$> obj ..:? configMonoidHpackForceName
concurrentTests <- First <$> obj ..:? configMonoidConcurrentTestsName
localBinPath <- First <$> obj ..:? configMonoidLocalBinPathName
fileWatchHook <- First <$> obj ..:? configMonoidFileWatchHookName
(scmInit, templateParameters) <- obj ..:? "templates" >>= \case
Maybe Object
Nothing -> (First SCM, Map Text Text)
-> WriterT WarningParserMonoid Parser (First SCM, Map Text Text)
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe SCM -> First SCM
forall a. Maybe a -> First a
First Maybe SCM
forall a. Maybe a
Nothing,Map Text Text
forall k a. Map k a
M.empty)
Just Object
tobj -> do
scmInit <- Object
tobj Object -> Text -> WarningParser (Maybe SCM)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidScmInitName
params <- tobj ..:? configMonoidTemplateParametersName
pure (First scmInit,fromMaybe M.empty params)
compilerCheck <- First <$> obj ..:? configMonoidCompilerCheckName
compilerRepository <- First <$> (obj ..:? configMonoidCompilerRepositoryName)
compilerTarget <- First <$> (obj ..:? configMonoidCompilerTargetName)
compilerBindistPath <-
First <$> (obj ..:? configMonoidCompilerBindistPathName)
options <- Map.map (.ghcOptions) <$>
obj ..:? configMonoidGhcOptionsName ..!= (mempty :: Map GhcOptionKey GhcOptions)
optionsEverything <-
case (Map.lookup GOKOldEverything options, Map.lookup GOKEverything options) of
(Just [Text]
_, Just [Text]
_) ->
String -> WarningParser [Text]
forall a. String -> WriterT WarningParserMonoid Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Cannot specify both `*` and `$everything` GHC options"
(Maybe [Text]
Nothing, Just [Text]
x) -> [Text] -> WarningParser [Text]
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Text]
x
(Just [Text]
x, Maybe [Text]
Nothing) -> do
WarningParserMonoid -> WriterT WarningParserMonoid Parser ()
forall w (m :: * -> *). MonadWriter w m => w -> m ()
tell WarningParserMonoid
"The `*` ghc-options key is not recommended. Consider using \
\$locals, or if really needed, $everything"
[Text] -> WarningParser [Text]
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Text]
x
(Maybe [Text]
Nothing, Maybe [Text]
Nothing) -> [Text] -> WarningParser [Text]
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure []
let ghcOptionsByCat = Map ApplyGhcOptions [Text]
-> MonoidMap ApplyGhcOptions (Dual [Text])
forall a b. Coercible a b => a -> b
coerce (Map ApplyGhcOptions [Text]
-> MonoidMap ApplyGhcOptions (Dual [Text]))
-> Map ApplyGhcOptions [Text]
-> MonoidMap ApplyGhcOptions (Dual [Text])
forall a b. (a -> b) -> a -> b
$ [(ApplyGhcOptions, [Text])] -> Map ApplyGhcOptions [Text]
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
[ (ApplyGhcOptions
AGOEverything, [Text]
optionsEverything)
, (ApplyGhcOptions
AGOLocals, [Text] -> GhcOptionKey -> Map GhcOptionKey [Text] -> [Text]
forall k a. Ord k => a -> k -> Map k a -> a
Map.findWithDefault [] GhcOptionKey
GOKLocals Map GhcOptionKey [Text]
options)
, (ApplyGhcOptions
AGOTargets, [Text] -> GhcOptionKey -> Map GhcOptionKey [Text] -> [Text]
forall k a. Ord k => a -> k -> Map k a -> a
Map.findWithDefault [] GhcOptionKey
GOKTargets Map GhcOptionKey [Text]
options)
]
ghcOptionsByName = Map PackageName [Text] -> MonoidMap PackageName (Dual [Text])
forall a b. Coercible a b => a -> b
coerce (Map PackageName [Text] -> MonoidMap PackageName (Dual [Text]))
-> Map PackageName [Text] -> MonoidMap PackageName (Dual [Text])
forall a b. (a -> b) -> a -> b
$ [(PackageName, [Text])] -> Map PackageName [Text]
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
[(PackageName
name, [Text]
opts) | (GOKPackage PackageName
name, [Text]
opts) <- Map GhcOptionKey [Text] -> [(GhcOptionKey, [Text])]
forall k a. Map k a -> [(k, a)]
Map.toList Map GhcOptionKey [Text]
options]
cabalConfigOpts' <- obj ..:? configMonoidConfigureOptionsName ..!= mempty
let cabalConfigOpts = Map CabalConfigKey [Text] -> MonoidMap CabalConfigKey (Dual [Text])
forall a b. Coercible a b => a -> b
coerce (Map CabalConfigKey [Text]
cabalConfigOpts' :: Map CabalConfigKey [Text])
extraPath <- obj ..:? configMonoidExtraPathName ..!= []
setupInfoLocations <- obj ..:? configMonoidSetupInfoLocationsName ..!= []
setupInfoInline <-
jsonSubWarningsT (obj ..:? configMonoidSetupInfoInlineName) ..!= mempty
localProgramsBase <- First <$> obj ..:? configMonoidLocalProgramsBaseName
pvpBounds <- First <$> obj ..:? configMonoidPvpBoundsName
modifyCodePage <- FirstTrue <$> obj ..:? configMonoidModifyCodePageName
rebuildGhcOptions <- FirstFalse <$> obj ..:? configMonoidRebuildGhcOptionsName
applyGhcOptions <- First <$> obj ..:? configMonoidApplyGhcOptionsName
applyProgOptions <- First <$> obj ..:? configMonoidApplyProgOptionsName
allowNewer <- First <$> obj ..:? configMonoidAllowNewerName
allowNewerDeps <- obj ..:? configMonoidAllowNewerDepsName
defaultInitSnapshot <- First <$> obj ..:? configMonoidDefaultInitSnapshotName
defaultTemplate <- First <$> obj ..:? configMonoidDefaultTemplateName
allowDifferentUser <- First <$> obj ..:? configMonoidAllowDifferentUserName
dumpLogs <- First <$> obj ..:? configMonoidDumpLogsName
saveHackageCreds <- FirstTrue <$> obj ..:? configMonoidSaveHackageCredsName
hackageBaseUrl <- First <$> obj ..:? configMonoidHackageBaseUrlName
configMonoidColorWhenUS <- obj ..:? configMonoidColorWhenUSName
configMonoidColorWhenGB <- obj ..:? configMonoidColorWhenGBName
let colorWhen = Maybe ColorWhen -> First ColorWhen
forall a. Maybe a -> First a
First (Maybe ColorWhen -> First ColorWhen)
-> Maybe ColorWhen -> First ColorWhen
forall a b. (a -> b) -> a -> b
$ Maybe ColorWhen
configMonoidColorWhenUS Maybe ColorWhen -> Maybe ColorWhen -> Maybe ColorWhen
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe ColorWhen
configMonoidColorWhenGB
configMonoidStylesUS <- obj ..:? configMonoidStylesUSName
configMonoidStylesGB <- obj ..:? configMonoidStylesGBName
let styles = StylesUpdate -> Maybe StylesUpdate -> StylesUpdate
forall a. a -> Maybe a -> a
fromMaybe StylesUpdate
forall a. Monoid a => a
mempty (Maybe StylesUpdate -> StylesUpdate)
-> Maybe StylesUpdate -> StylesUpdate
forall a b. (a -> b) -> a -> b
$ Maybe StylesUpdate
configMonoidStylesUS Maybe StylesUpdate -> Maybe StylesUpdate -> Maybe StylesUpdate
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe StylesUpdate
configMonoidStylesGB
hideSourcePaths <- FirstTrue <$> obj ..:? configMonoidHideSourcePathsName
recommendStackUpgrade <-
FirstTrue <$> obj ..:? configMonoidRecommendStackUpgradeName
notifyIfNixOnPath <- FirstFalse <$> obj ..:? configMonoidNotifyIfNixOnPathName
notifyIfGhcUntested <-
FirstFalse <$> obj ..:? configMonoidNotifyIfGhcUntestedName
notifyIfCabalUntested <-
FirstFalse <$> obj ..:? configMonoidNotifyIfCabalUntestedName
notifyIfArchUnknown <-
FirstTrue <$> obj ..:? configMonoidNotifyIfArchUnknownName
notifyIfNoRunTests <-
FirstTrue <$> obj ..:? configMonoidNotifyIfNoRunTestsName
notifyIfNoRunBenchmarks <-
FirstTrue <$> obj ..:? configMonoidNotifyIfNoRunBenchmarksName
notifyIfBaseNotBoot <-
FirstTrue <$> obj ..:? configMonoidNotifyIfBaseNotBootName
casaOpts <- jsonSubWarnings (obj ..:? configMonoidCasaOptsName ..!= mempty)
casaRepoPrefix <- First <$> obj ..:? configMonoidCasaRepoPrefixName
snapshotLocation <- First <$> obj ..:? configMonoidSnapshotLocationName
globalHintsLocation <-
First <$> jsonSubWarningsT (obj ..:? configMonoidGlobalHintsLocationName)
noRunCompile <- FirstFalse <$> obj ..:? configMonoidNoRunCompileName
stackDeveloperMode <- First <$> obj ..:? configMonoidStackDeveloperModeName
pure ConfigMonoid
{ stackRoot
, workDir
, buildOpts
, dockerOpts
, nixOpts
, connectionCount
, hideTHLoading
, prefixTimestamps
, latestSnapshot
, packageIndex
, systemGHC
, installGHC
, installMsys
, skipGHCCheck
, skipMsys
, msysEnvironment
, compilerCheck
, compilerRepository
, compilerTarget
, compilerBindistPath
, requireStackVersion
, arch
, ghcVariant
, ghcBuild
, jobs
, extraIncludeDirs
, extraLibDirs
, customPreprocessorExts
, overrideGccPath
, overrideHpack
, hpackForce
, concurrentTests
, localBinPath
, fileWatchHook
, templateParameters
, scmInit
, ghcOptionsByName
, ghcOptionsByCat
, cabalConfigOpts
, extraPath
, setupInfoLocations
, setupInfoInline
, localProgramsBase
, pvpBounds
, modifyCodePage
, rebuildGhcOptions
, applyGhcOptions
, applyProgOptions
, allowNewer
, allowNewerDeps
, defaultInitSnapshot
, defaultTemplate
, allowDifferentUser
, dumpLogs
, saveHackageCreds
, hackageBaseUrl
, colorWhen
, styles
, hideSourcePaths
, recommendStackUpgrade
, notifyIfNixOnPath
, notifyIfGhcUntested
, notifyIfCabalUntested
, notifyIfArchUnknown
, notifyIfNoRunTests
, notifyIfNoRunBenchmarks
, notifyIfBaseNotBoot
, casaOpts
, casaRepoPrefix
, snapshotLocation
, globalHintsLocation
, noRunCompile
, stackDeveloperMode
}
configMonoidWorkDirName :: Text
configMonoidWorkDirName :: Text
configMonoidWorkDirName = Text
"work-dir"
configMonoidBuildOptsName :: Text
configMonoidBuildOptsName :: Text
configMonoidBuildOptsName = Text
"build"
configMonoidDockerOptsName :: Text
configMonoidDockerOptsName :: Text
configMonoidDockerOptsName = Text
"docker"
configMonoidNixOptsName :: Text
configMonoidNixOptsName :: Text
configMonoidNixOptsName = Text
"nix"
configMonoidConfigureOptionsName :: Text
configMonoidConfigureOptionsName :: Text
configMonoidConfigureOptionsName = Text
"configure-options"
configMonoidConnectionCountName :: Text
configMonoidConnectionCountName :: Text
configMonoidConnectionCountName = Text
"connection-count"
configMonoidHideTHLoadingName :: Text
configMonoidHideTHLoadingName :: Text
configMonoidHideTHLoadingName = Text
"hide-th-loading"
configMonoidPrefixTimestampsName :: Text
configMonoidPrefixTimestampsName :: Text
configMonoidPrefixTimestampsName = Text
"build-output-timestamps"
configMonoidUrlsName :: Text
configMonoidUrlsName :: Text
configMonoidUrlsName = Text
"urls"
configMonoidPackageIndexName :: Text
configMonoidPackageIndexName :: Text
configMonoidPackageIndexName = Text
"package-index"
configMonoidSystemGHCName :: Text
configMonoidSystemGHCName :: Text
configMonoidSystemGHCName = Text
"system-ghc"
configMonoidInstallGHCName :: Text
configMonoidInstallGHCName :: Text
configMonoidInstallGHCName = Text
"install-ghc"
configMonoidInstallMsysName :: Text
configMonoidInstallMsysName :: Text
configMonoidInstallMsysName = Text
"install-msys"
configMonoidSkipGHCCheckName :: Text
configMonoidSkipGHCCheckName :: Text
configMonoidSkipGHCCheckName = Text
"skip-ghc-check"
configMonoidSkipMsysName :: Text
configMonoidSkipMsysName :: Text
configMonoidSkipMsysName = Text
"skip-msys"
configMonoidMsysEnvironmentName :: Text
configMonoidMsysEnvironmentName :: Text
configMonoidMsysEnvironmentName = Text
"msys-environment"
configMonoidRequireStackVersionName :: Text
configMonoidRequireStackVersionName :: Text
configMonoidRequireStackVersionName = Text
"require-stack-version"
configMonoidArchName :: Text
configMonoidArchName :: Text
configMonoidArchName = Text
"arch"
configMonoidGHCVariantName :: Text
configMonoidGHCVariantName :: Text
configMonoidGHCVariantName = Text
"ghc-variant"
configMonoidGHCBuildName :: Text
configMonoidGHCBuildName :: Text
configMonoidGHCBuildName = Text
"ghc-build"
configMonoidJobsName :: Text
configMonoidJobsName :: Text
configMonoidJobsName = Text
"jobs"
configMonoidExtraIncludeDirsName :: Text
= Text
"extra-include-dirs"
configMonoidExtraLibDirsName :: Text
= Text
"extra-lib-dirs"
configMonoidCustomPreprocessorExtsName :: Text
configMonoidCustomPreprocessorExtsName :: Text
configMonoidCustomPreprocessorExtsName = Text
"custom-preprocessor-extensions"
configMonoidOverrideGccPathName :: Text
configMonoidOverrideGccPathName :: Text
configMonoidOverrideGccPathName = Text
"with-gcc"
configMonoidOverrideHpackName :: Text
configMonoidOverrideHpackName :: Text
configMonoidOverrideHpackName = Text
"with-hpack"
configMonoidHpackForceName :: Text
configMonoidHpackForceName :: Text
configMonoidHpackForceName = Text
"hpack-force"
configMonoidConcurrentTestsName :: Text
configMonoidConcurrentTestsName :: Text
configMonoidConcurrentTestsName = Text
"concurrent-tests"
configMonoidLocalBinPathName :: Text
configMonoidLocalBinPathName :: Text
configMonoidLocalBinPathName = Text
"local-bin-path"
configMonoidFileWatchHookName :: Text
configMonoidFileWatchHookName :: Text
configMonoidFileWatchHookName = Text
"file-watch-hook"
configMonoidScmInitName :: Text
configMonoidScmInitName :: Text
configMonoidScmInitName = Text
"scm-init"
configMonoidTemplateParametersName :: Text
configMonoidTemplateParametersName :: Text
configMonoidTemplateParametersName = Text
"params"
configMonoidCompilerCheckName :: Text
configMonoidCompilerCheckName :: Text
configMonoidCompilerCheckName = Text
"compiler-check"
configMonoidCompilerRepositoryName :: Text
configMonoidCompilerRepositoryName :: Text
configMonoidCompilerRepositoryName = Text
"compiler-repository"
configMonoidCompilerTargetName :: Text
configMonoidCompilerTargetName :: Text
configMonoidCompilerTargetName = Text
"compiler-target"
configMonoidCompilerBindistPathName :: Text
configMonoidCompilerBindistPathName :: Text
configMonoidCompilerBindistPathName = Text
"compiler-bindist-path"
configMonoidGhcOptionsName :: Text
configMonoidGhcOptionsName :: Text
configMonoidGhcOptionsName = Text
"ghc-options"
configMonoidExtraPathName :: Text
= Text
"extra-path"
configMonoidSetupInfoLocationsName :: Text
configMonoidSetupInfoLocationsName :: Text
configMonoidSetupInfoLocationsName = Text
"setup-info-locations"
configMonoidSetupInfoInlineName :: Text
configMonoidSetupInfoInlineName :: Text
configMonoidSetupInfoInlineName = Text
"setup-info"
configMonoidLocalProgramsBaseName :: Text
configMonoidLocalProgramsBaseName :: Text
configMonoidLocalProgramsBaseName = Text
"local-programs-path"
configMonoidPvpBoundsName :: Text
configMonoidPvpBoundsName :: Text
configMonoidPvpBoundsName = Text
"pvp-bounds"
configMonoidModifyCodePageName :: Text
configMonoidModifyCodePageName :: Text
configMonoidModifyCodePageName = Text
"modify-code-page"
configMonoidRebuildGhcOptionsName :: Text
configMonoidRebuildGhcOptionsName :: Text
configMonoidRebuildGhcOptionsName = Text
"rebuild-ghc-options"
configMonoidApplyGhcOptionsName :: Text
configMonoidApplyGhcOptionsName :: Text
configMonoidApplyGhcOptionsName = Text
"apply-ghc-options"
configMonoidApplyProgOptionsName :: Text
configMonoidApplyProgOptionsName :: Text
configMonoidApplyProgOptionsName = Text
"apply-prog-options"
configMonoidAllowNewerName :: Text
configMonoidAllowNewerName :: Text
configMonoidAllowNewerName = Text
"allow-newer"
configMonoidAllowNewerDepsName :: Text
configMonoidAllowNewerDepsName :: Text
configMonoidAllowNewerDepsName = Text
"allow-newer-deps"
configMonoidDefaultInitSnapshotName :: Text
configMonoidDefaultInitSnapshotName :: Text
configMonoidDefaultInitSnapshotName = Text
"default-init-snapshot"
configMonoidDefaultTemplateName :: Text
configMonoidDefaultTemplateName :: Text
configMonoidDefaultTemplateName = Text
"default-template"
configMonoidAllowDifferentUserName :: Text
configMonoidAllowDifferentUserName :: Text
configMonoidAllowDifferentUserName = Text
"allow-different-user"
configMonoidDumpLogsName :: Text
configMonoidDumpLogsName :: Text
configMonoidDumpLogsName = Text
"dump-logs"
configMonoidSaveHackageCredsName :: Text
configMonoidSaveHackageCredsName :: Text
configMonoidSaveHackageCredsName = Text
"save-hackage-creds"
configMonoidHackageBaseUrlName :: Text
configMonoidHackageBaseUrlName :: Text
configMonoidHackageBaseUrlName = Text
"hackage-base-url"
configMonoidColorWhenUSName :: Text
configMonoidColorWhenUSName :: Text
configMonoidColorWhenUSName = Text
"color"
configMonoidColorWhenGBName :: Text
configMonoidColorWhenGBName :: Text
configMonoidColorWhenGBName = Text
"colour"
configMonoidStylesUSName :: Text
configMonoidStylesUSName :: Text
configMonoidStylesUSName = Text
"stack-colors"
configMonoidStylesGBName :: Text
configMonoidStylesGBName :: Text
configMonoidStylesGBName = Text
"stack-colours"
configMonoidHideSourcePathsName :: Text
configMonoidHideSourcePathsName :: Text
configMonoidHideSourcePathsName = Text
"hide-source-paths"
configMonoidRecommendStackUpgradeName :: Text
configMonoidRecommendStackUpgradeName :: Text
configMonoidRecommendStackUpgradeName = Text
"recommend-stack-upgrade"
configMonoidNotifyIfNixOnPathName :: Text
configMonoidNotifyIfNixOnPathName :: Text
configMonoidNotifyIfNixOnPathName = Text
"notify-if-nix-on-path"
configMonoidNotifyIfGhcUntestedName :: Text
configMonoidNotifyIfGhcUntestedName :: Text
configMonoidNotifyIfGhcUntestedName = Text
"notify-if-ghc-untested"
configMonoidNotifyIfCabalUntestedName :: Text
configMonoidNotifyIfCabalUntestedName :: Text
configMonoidNotifyIfCabalUntestedName = Text
"notify-if-cabal-untested"
configMonoidNotifyIfArchUnknownName :: Text
configMonoidNotifyIfArchUnknownName :: Text
configMonoidNotifyIfArchUnknownName = Text
"notify-if-arch-unknown"
configMonoidNotifyIfNoRunTestsName :: Text
configMonoidNotifyIfNoRunTestsName :: Text
configMonoidNotifyIfNoRunTestsName = Text
"notify-if-no-run-tests"
configMonoidNotifyIfNoRunBenchmarksName :: Text
configMonoidNotifyIfNoRunBenchmarksName :: Text
configMonoidNotifyIfNoRunBenchmarksName = Text
"notify-if-no-run-benchmarks"
configMonoidNotifyIfBaseNotBootName :: Text
configMonoidNotifyIfBaseNotBootName :: Text
configMonoidNotifyIfBaseNotBootName = Text
"notify-if-base-not-boot"
configMonoidCasaOptsName :: Text
configMonoidCasaOptsName :: Text
configMonoidCasaOptsName = Text
"casa"
configMonoidCasaRepoPrefixName :: Text
configMonoidCasaRepoPrefixName :: Text
configMonoidCasaRepoPrefixName = Text
"casa-repo-prefix"
configMonoidSnapshotLocationName :: Text
configMonoidSnapshotLocationName :: Text
configMonoidSnapshotLocationName = Text
"snapshot-location-base"
configMonoidGlobalHintsLocationName :: Text
configMonoidGlobalHintsLocationName :: Text
configMonoidGlobalHintsLocationName = Text
"global-hints-location"
configMonoidNoRunCompileName :: Text
configMonoidNoRunCompileName :: Text
configMonoidNoRunCompileName = Text
"script-no-run-compile"
configMonoidStackDeveloperModeName :: Text
configMonoidStackDeveloperModeName :: Text
configMonoidStackDeveloperModeName = Text
"stack-developer-mode"