nix-tools-0.1.0.0: plan2nix/Plan2Nix/CLI.hs
module Plan2Nix.CLI
( Args(..)
, parsePlan2NixArgs
) where
import Options.Applicative hiding (option)
import Data.Semigroup ((<>))
import Cabal2Nix (CabalDetailLevel(..))
--------------------------------------------------------------------------------
-- CLI Arguments
data Args = Args
{ argOutputDir :: FilePath
, argPlanJSON :: FilePath
, argCabalProject :: FilePath
, argCacheFile :: FilePath
, argDetailLevel :: CabalDetailLevel
} deriving Show
-- Argument Parser
args :: Parser Args
args = Args
<$> strOption ( long "output" <> short 'o' <> metavar "DIR" <> help "Generate output in DIR" )
<*> strOption ( long "plan-json" <> value "dist-newstyle/cache/plan.json" <> showDefault <> metavar "FILE" <> help "Override plan.json location" )
<*> strOption ( long "cabal-project" <> value "cabal.project" <> showDefault <> metavar "FILE" <> help "Override path to cabal.project" )
<*> strOption ( long "cache" <> value ".nix-tools.cache" <> showDefault <> metavar "FILE" <> help "Dependency cache file" )
<*> flag MinimalDetails FullDetails ( long "full" <> help "Output details needed to determine what files are used" )
parsePlan2NixArgs :: IO Args
parsePlan2NixArgs = execParser opts
where opts = info (args <**> helper)
( fullDesc
<> progDesc "Generate a Nix expression for a Haskell package using Cabal"
<> header "plan-to-nix - a stack to nix converter" )