From 4e8e81b05afa4ba56d64ba714c78ba307f936076 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Wed, 8 Oct 2025 12:51:02 +0530 Subject: Refactor args parsing to module + docs update --- exe/Main.hs | 64 +++++++------------------------------------------------------ 1 file changed, 7 insertions(+), 57 deletions(-) (limited to 'exe') 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 ", - " 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 -- cgit v1.3.1