@@ -36,19 +36,22 @@ module Graphics.Vty.Config where
3636
3737import Control.Applicative hiding (many)
3838
39−import Control.Exception (catch, IOException)
40−import Control.Monad (void)
39+import Control.Exception (tryJust, catch, IOException)
40+import Control.Monad (void, guard)
4141import Control.Monad.Trans.Class
4242import Control.Monad.Trans.Writer
4343
4444import qualified Data.ByteString as BS
4545import Data.Default
46+import Data.Either (either)
4647import Data.Monoid
4748
4849import Graphics.Vty.Input.Events
4950
5051import System.Directory (getAppUserDataDirectory)
51−import System.Environment (lookupEnv)
52+import System.Environment (getEnv)
53+import System.IO.Error (isDoesNotExistError)
54+
5255import Text.Parsec hiding ((<|>))
5356import Text.Parsec.Token ( GenLanguageDef(..) )
5457import qualified Text.Parsec.Token as P
@@ -87,7 +90,8 @@ type ConfigParser s a = ParsecT s () (Writer Config) a
8790userConfig :: IO Config
8891userConfig = do
8992 vtyConfig <- (mappend <$> getAppUserDataDirectory "vty" <*> pure "/config") >>= parseConfigFile
90− overrideConfig <- lookupEnv "VTY_CONFIG_FILE" >>= maybe (return def) parseConfigFile
93+ overridePath <- tryJust (guard . isDoesNotExistError) $ getEnv "VTY_CONFIG_FILE"
94+ overrideConfig <- either (const $ return def) parseConfigFile overridePath
9195 return $ vtyConfig `mappend` overrideConfig
9296
9397parseConfigFile :: FilePath -> IO Config