{-# LANGUAGE NoImplicitPrelude #-}
module Stack.Options.NewParser where
import qualified Data.Map.Strict as M
import Options.Applicative
import Stack.Init
import Stack.New
import Stack.Options.GlobalParser
import Stack.Prelude
import Stack.Types.PackageName
import Stack.Types.TemplateName
newOptsParser :: Parser (NewOpts,InitOpts)
newOptsParser = (,) <$> newOpts <*> initOptsParser
where
newOpts =
NewOpts <$>
packageNameArgument
(metavar "PACKAGE_NAME" <> help "A valid package name.") <*>
switch
(long "bare" <>
help "Do not create a subdirectory for the project") <*>
optional (templateNameArgument
(metavar "TEMPLATE_NAME" <>
help "Name of a template - can take the form\
\ [[service:]username/]template with optional service name\
\ (github, gitlab, or bitbucket) \
\ and username for the service; or, a local filename such as\
\ foo.hsfiles or ~/foo; or, a full URL such as\
\ https://example.com/foo.hsfiles.")) <*>
fmap
M.fromList
(many
(templateParamArgument
(short 'p' <> long "param" <> metavar "KEY:VALUE" <>
help
"Parameter for the template in the format key:value")))