packages feed

dotenv-0.1.0.0: src/Main.hs

module Main where

import Options.Applicative

import Configuration.Dotenv (loadFile)

import System.Process (system)
import System.Exit (exitWith)

data Options = Options
  { files    :: [String]
  , program  :: String
  , overload :: Bool
  } 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" ))

     <*> argument str (metavar "PROGRAM")

     <*> switch ( long "overload"
                  <> short 'o'
                  <> help "Specify this flag to override existing variables" )

dotEnv :: Options -> IO ()
dotEnv opts = do
  mapM_ (loadFile (overload opts)) (files opts)
  code <- system $ program opts
  exitWith code