diff options
Diffstat (limited to '')
| -rw-r--r-- | lib/Daffm/Configuration.hs | 28 | ||||
| -rw-r--r-- | lib/Daffm/State.hs | 3 | ||||
| -rw-r--r-- | lib/Daffm/Types.hs | 3 |
3 files changed, 31 insertions, 3 deletions
diff --git a/lib/Daffm/Configuration.hs b/lib/Daffm/Configuration.hs index afcca08..494d2a4 100644 --- a/lib/Daffm/Configuration.hs +++ b/lib/Daffm/Configuration.hs @@ -2,6 +2,7 @@ module Daffm.Configuration where import Control.Arrow (ArrowChoice (left)) import Control.Exception (throwIO) +import qualified Control.Exception as IO import Daffm.Action.Commands (parseCommand) import Daffm.Keymap (parseKeySequence) import Daffm.Types @@ -10,12 +11,35 @@ import qualified Data.Map as Map import Data.Maybe (fromMaybe) import qualified Data.Text as Text import qualified Data.Text.IO as Text +import System.Directory (XdgDirectory (XdgConfig), getXdgDirectory) +import System.FilePath (joinPath) import Toml ((.=)) import qualified Toml -loadConfigFile :: IO Configuration -loadConfigFile = Text.readFile "./config.toml" >>= parse +getConfigDir :: IO FilePath +getConfigDir = getXdgDirectory XdgConfig "daffm" + +getDefaultConfigFilePath :: String -> IO FilePath +getDefaultConfigFilePath "" = do + dir <- getConfigDir + pure $ joinPath [dir, "config.toml"] +getDefaultConfigFilePath name = do + dir <- getConfigDir + pure $ joinPath [dir, "config" <> name <> ".toml"] + +resolveConfigPath :: Maybe String -> IO FilePath +resolveConfigPath Nothing = getDefaultConfigFilePath "" +resolveConfigPath (Just ('@' : name)) = getDefaultConfigFilePath name +resolveConfigPath (Just path) = pure path + +loadConfigFile :: Maybe String -> IO Configuration +loadConfigFile pathM = do + resolveConfigPath pathM >>= (IO.try . Text.readFile) >>= foobar where + foobar :: Either IOError Text.Text -> IO Configuration + foobar rawE = case rawE of + Left _ -> pure defaultConfiguration + Right txt -> parse txt parse txt = case parseConfig txt of Left e -> throwIO $ userError $ show e Right c -> pure c diff --git a/lib/Daffm/State.hs b/lib/Daffm/State.hs index 52ac7a0..1ea8bfe 100644 --- a/lib/Daffm/State.hs +++ b/lib/Daffm/State.hs @@ -49,7 +49,8 @@ mkEmptyAppState config = ([K.KChar '\t'], CmdToggleSelection), ([K.KChar 'C'], CmdClearSelection), ([K.KChar '~'], CmdChangeDir "~"), - ([K.KChar 'g', K.KChar 'h'], CmdChangeDir "~") + ([K.KChar 'g', K.KChar 'h'], CmdChangeDir "~"), + ([K.KChar 'g', K.KChar 'c', K.KChar 'f', K.KChar 'g'], CmdChangeDir "~/.config/daffm") ] toggleSetItem :: (Ord a) => a -> Set.Set a -> Set.Set a diff --git a/lib/Daffm/Types.hs b/lib/Daffm/Types.hs index 39ad5a0..d3dcc70 100644 --- a/lib/Daffm/Types.hs +++ b/lib/Daffm/Types.hs @@ -80,3 +80,6 @@ data Configuration = Configuration configTheme :: !(Map.Map Text.Text Text.Text) } deriving (Show) + +defaultConfiguration :: Configuration +defaultConfiguration = Configuration {configKeymap = Map.empty, configOpener = Nothing, configTheme = Map.empty} |
