dotenv-0.3.2.0: app/Main.hs
{-# LANGUAGE CPP #-}
module Main where
#if MIN_VERSION_optparse_applicative(0,13,0)
import Data.Monoid ((<>))
#endif
import Options.Applicative
import Configuration.Dotenv (loadFile)
import Control.Monad.IO.Class(MonadIO(..))
import System.Process (system)
import System.Exit (exitWith)
data Options = Options
{ files :: [String]
, overload :: Bool
, program :: String
, args :: [String]
} deriving (Show)
main :: IO ()
main = execParser opts >>= dotEnv
where
opts = info (helper <*> config)
( fullDesc
<> progDesc "Runs PROGRAM after loading options from FILE"
<> header "dotenv - loads options from dotenv files" )
config :: Parser Options
config = Options
<$> some (strOption (
long "file"
<> short 'f'
<> metavar "FILE"
<> help "File to read for options" ))
<*> switch ( long "overload"
<> short 'o'
<> help "Specify this flag to override existing variables" )
<*> argument str (metavar "PROGRAM")
<*> many (argument str (metavar "ARG"))
dotEnv :: MonadIO m => Options -> m ()
dotEnv opts = liftIO $ do
mapM_ (loadFile (overload opts)) (files opts)
code <- system (program opts ++ programArguments)
exitWith code
where
programArguments = concatMap (" " ++) (args opts)