diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-10-08 12:51:02 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-10-08 13:10:49 +0530 |
| commit | 4e8e81b05afa4ba56d64ba714c78ba307f936076 (patch) | |
| tree | 3d481ce541ea8d5b46cb9e3debcaf1db8a112415 /exe/Main.hs | |
| parent | e173e1f105e72e06c6a3206b9b94f4f1da63b00f (diff) | |
| download | daffm-4e8e81b05afa4ba56d64ba714c78ba307f936076.tar.gz daffm-4e8e81b05afa4ba56d64ba714c78ba307f936076.zip | |
Refactor args parsing to module + docs update
Diffstat (limited to '')
| -rw-r--r-- | exe/Main.hs | 64 |
1 files changed, 7 insertions, 57 deletions
diff --git a/exe/Main.hs b/exe/Main.hs index e150569..6a85858 100644 --- a/exe/Main.hs +++ b/exe/Main.hs @@ -1,71 +1,21 @@ module Main where -import qualified Brick.Main as M -import Control.Exception (throwIO) -import Control.Monad (void) import qualified Daffm +import qualified Daffm.Args as Args import Daffm.Configuration (loadConfigFile) +import Daffm.Types import Data.Maybe (fromMaybe) import qualified Data.Text as Text import System.Directory (getCurrentDirectory) import System.Environment (getArgs) -data Args = Args - { argsDirOrFile :: Maybe Text.Text, - argsConfigFile :: Maybe FilePath, - argsHelp :: Bool - } - deriving (Show) - main :: IO () -main = do - args <- getArgs >>= parseArgs - evaluate args +main = getArgs >>= Args.parseArgs >>= evaluateArgs -evaluate :: Args -> IO () -evaluate (Args {argsHelp = True}) = putStrLn helpMenuContents -evaluate (Args {argsDirOrFile, argsConfigFile}) = do +evaluateArgs :: Args -> IO () +evaluateArgs (Args {argsHelp = True}) = putStrLn Args.helpMenuContents +evaluateArgs (Args {argsDirOrFile, argsConfigFile}) = do cwd <- getCurrentDirectory config <- loadConfigFile argsConfigFile let dir = fromMaybe (Text.pack cwd) argsDirOrFile - initialState <- Daffm.loadDirToState dir $ Daffm.mkEmptyAppState config - void $ M.defaultMain Daffm.app initialState - -parseArgs :: [String] -> IO Args -parseArgs rawArgs = case parsedArgs of - Left e -> throwIO $ userError e - Right v -> pure v - where - parsedArgs = parse rawArgs (Args {argsDirOrFile = Nothing, argsConfigFile = Nothing, argsHelp = False}) - parse :: [String] -> Args -> Either String Args - parse [] args = Right args - parse ("-h" : _) args = Right $ args {argsHelp = True} - parse ("--help" : _) args = Right $ args {argsHelp = True} - parse ["-c"] _ = Left "Missing value for -c arg" - parse ("-c" : config : rest) args = parse rest $ args {argsConfigFile = Just config} - parse ["--config"] _ = Left "Missing value for --config arg" - parse ("--config" : config : rest) args = parse rest $ args {argsConfigFile = Just config} - parse (flag@('-' : _) : _) _ = Left $ "Invalid flag " <> flag - parse (dir : rest) args = parse rest $ args {argsDirOrFile = Just $ Text.pack dir} - -helpMenuContents :: String -helpMenuContents = - unlines - [ "daffm - Dumb as-fuck file manager", - "", - "Usage: daffm [options] [dir]", - "", - "Arguments:", - " [dir]", - " Directory or file path to load. Defaults to current working directory", - "", - "Options:", - " -c, --config <CONFIG-PATH>", - " Load toml config from file", - " If path is prefixed with @, will use alternate config", - " Ex: -c @foo will load $XDG_CONFIG_HOME/daffm/config.foo.toml", - " Default: $XDG_CONFIG_HOME/daffm/config.toml", - "", - " -h, --help", - " This help menu" - ] + Daffm.initApp dir config |
