packages feed

nix-tools-0.1.0.0: stack2nix/Stack2nix/CLI.hs

module Stack2nix.CLI
  ( Args(..)
  , HpackUse(..)
  , parseStack2nixArgs
  ) where

import Options.Applicative hiding (option)
import Data.Semigroup ((<>))
import Cabal2Nix (CabalDetailLevel(..))

data HpackUse
  = IgnorePackageYaml
  | UsePackageYamlFirst
  deriving Show

--------------------------------------------------------------------------------
-- CLI Arguments
data Args = Args
  { argOutputDir :: FilePath
  , argStackYaml :: FilePath
  , argHpackUse  :: HpackUse
  , 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 "stack-yaml" <> value "stack.yaml" <> showDefault <> metavar "FILE" <> help "Override project stack.yaml" )
  <*> flag UsePackageYamlFirst IgnorePackageYaml (long "ignore-package-yaml" <> help "disable hpack run and use only cabal disregarding package.yaml existence")
  <*> strOption ( long "cache" <> value ".stack-to-nix.cache" <> showDefault <> metavar "FILE" <> help "Dependency cache file" )
  <*> flag MinimalDetails FullDetails ( long "full" <> help "Output details needed to determine what files are used" )

parseStack2nixArgs :: IO Args
parseStack2nixArgs = execParser opts
  where opts = info (args <**> helper)
          ( fullDesc
         <> progDesc "Generate a Nix expression for a Haskell package using Stack"
         <> header "stack-to-nix - a stack to nix converter" )