From b64f8764127fe403776a061dcd7f756cad0531e3 Mon Sep 17 00:00:00 2001
From: "Michael D. Adams"
Date: Sun, 2 Oct 2016 06:21:03 -0600
Subject: [PATCH 1/2] Use XDG directories for user configuration and user data
files
---
src/Idris/Info.hs | 9 +++++++--
src/Idris/Info/Show.hs | 4 +++-
src/Idris/Main.hs | 11 ++++++-----
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/src/Idris/Info.hs b/src/Idris/Info.hs
index 4ffe3d4ebe..770eb2c616 100644
--- a/src/Idris/Info.hs
+++ b/src/Idris/Info.hs
@@ -17,6 +17,7 @@ module Idris.Info
, getIdrisCC
, getIdrisVersion
, getIdrisVersionNoGit
+ , getIdrisUserConfigDir
, getIdrisUserDataDir
, getIdrisInitScript
, getIdrisHistoryFile
@@ -68,9 +69,13 @@ getIdrisVersion = showVersion S.version ++ suffix
getIdrisVersionNoGit = S.version
--- | Get the platform-specific, user-specific Idris dir
+-- | Get the platform-specific, user-specific Idris configuration dir
+getIdrisUserConfigDir :: IO FilePath
+getIdrisUserConfigDir = getXdgDirectory XdgConfig "idris"
+
+-- | Get the platform-specific, user-specific Idris data dir
getIdrisUserDataDir :: IO FilePath
-getIdrisUserDataDir = getAppUserDataDirectory "idris"
+getIdrisUserDataDir = getXdgDirectory XdgData "idris"
-- | Locate the platform-specific location for the init script
getIdrisInitScript :: IO FilePath
diff --git a/src/Idris/Info/Show.hs b/src/Idris/Info/Show.hs
index 8217816a6f..f41b022efb 100644
--- a/src/Idris/Info/Show.hs
+++ b/src/Idris/Info/Show.hs
@@ -107,6 +107,7 @@ showIdrisInfo = do
putStrLn "Paths:"
ldir <- getIdrisLibDir
+ cdir <- getIdrisUserConfigDir
udir <- getIdrisUserDataDir
ddir <- getIdrisDocDir
idir <- getIdrisDataDir
@@ -116,7 +117,8 @@ showIdrisInfo = do
putStrLn $ unwords ["-", "Library Dir:", ldir]
putStrLn $ unwords ["-", "C RTS Dir:", crdir]
putStrLn $ unwords ["-", "JS RTS Dir:", jrdir]
- putStrLn $ unwords ["-", "User Dir:", udir]
+ putStrLn $ unwords ["-", "User Data Config:", cdir]
+ putStrLn $ unwords ["-", "User Data Dir:", udir]
putStrLn $ unwords ["-", "Documentation Dir:", ddir]
putStrLn "Flags:"
diff --git a/src/Idris/Main.hs b/src/Idris/Main.hs
index b035434dc2..3bb82f90a7 100644
--- a/src/Idris/Main.hs
+++ b/src/Idris/Main.hs
@@ -188,11 +188,12 @@ idrisMain opts =
Just expr -> execScript expr
-- Create Idris data dir + repl history and config dir
- idrisCatch (do dir <- runIO $ getIdrisUserDataDir
- exists <- runIO $ doesDirectoryExist dir
- unless exists $ logLvl 1 ("Creating " ++ dir)
- runIO $ createDirectoryIfMissing True (dir > "repl"))
- (\e -> return ())
+ sequence_ $
+ [idrisCatch (do dir <- runIO $ getDir
+ exists <- runIO $ doesDirectoryExist dir
+ unless exists $ logLvl 1 ("Creating " ++ dir)
+ runIO $ createDirectoryIfMissing True (dir > "repl"))
+ (\e -> return ()) | getDir <- [getIdrisUserConfigDir, getIdrisUserDataDir]]
historyFile <- runIO $ getIdrisHistoryFile
From cc972aa85d3607e6a30b6f3cf6e865d7b4f3a88c Mon Sep 17 00:00:00 2001
From: "Michael D. Adams"
Date: Sun, 2 Oct 2016 10:33:58 -0600
Subject: [PATCH 2/2] Require a version of the `directory` package that
supports XDG
---
idris.cabal | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/idris.cabal b/idris.cabal
index b46dc344d0..02a757af39 100644
--- a/idris.cabal
+++ b/idris.cabal
@@ -264,7 +264,7 @@ Library
, cheapskate < 0.2
, containers >= 0.5 && < 0.6
, deepseq < 1.5
- , directory >= 1.2.2.0 && < 1.2.3.0 || > 1.2.3.0
+ , directory > 1.2.3.0
, filepath < 1.5
, fingertree >= 0.1 && < 0.2
, haskeline >= 0.7 && < 0.8