aboutsummaryrefslogtreecommitdiff
path: root/exe
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-10-08 12:51:02 +0530
committerAkshay Nair <phenax5@gmail.com>2025-10-08 13:10:49 +0530
commit4e8e81b05afa4ba56d64ba714c78ba307f936076 (patch)
tree3d481ce541ea8d5b46cb9e3debcaf1db8a112415 /exe
parente173e1f105e72e06c6a3206b9b94f4f1da63b00f (diff)
downloaddaffm-4e8e81b05afa4ba56d64ba714c78ba307f936076.tar.gz
daffm-4e8e81b05afa4ba56d64ba714c78ba307f936076.zip
Refactor args parsing to module + docs update
Diffstat (limited to 'exe')
-rw-r--r--exe/Main.hs64
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