From 4fa10442ab30a41d22fc306077fcddf4d467e90c Mon Sep 17 00:00:00 2001
From: Lukas Mai <l.mai@web.de>
Date: Wed, 21 Nov 2007 18:30:18 +0000
Subject: [PATCH] add getXMonadDir (2nd try)

---
 Main.hs        | 5 ++---
 XMonad/Core.hs | 8 ++++++--
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/Main.hs b/Main.hs
index 76df27d..1d89e5f 100644
--- a/Main.hs
+++ b/Main.hs
@@ -16,11 +16,10 @@ module Main (main) where
 
 import XMonad.Main
 import XMonad.Config
-import XMonad.Core (recompile)
+import XMonad.Core (getXMonadDir, recompile)
 
 import Control.Exception (handle)
 import System.IO
-import System.Directory
 import System.Environment
 import System.Posix.Process (executeFile)
 
@@ -44,7 +43,7 @@ main = do
 buildLaunch ::  IO ()
 buildLaunch = do
     recompile False
-    dir  <- fmap (++ "/.xmonad") getHomeDirectory
+    dir  <- getXMonadDir
     args <- getArgs
     executeFile (dir ++ "/xmonad") False args Nothing
     return ()
diff --git a/XMonad/Core.hs b/XMonad/Core.hs
index f3fdc79..05f2b9b 100644
--- a/XMonad/Core.hs
+++ b/XMonad/Core.hs
@@ -26,7 +26,7 @@ module XMonad.Core (
     SomeMessage(..), fromMessage, runLayout, LayoutMessages(..),
     runX, catchX, userCode, io, catchIO,
     withDisplay, withWindowSet, isRoot,
-    getAtom, spawn, restart, recompile, trace, whenJust, whenX,
+    getAtom, spawn, restart, getXMonadDir, recompile, trace, whenJust, whenX,
     atom_WM_STATE, atom_WM_PROTOCOLS, atom_WM_DELETE_WINDOW, ManageHook, Query(..), runManageHook
   ) where
 
@@ -313,6 +313,10 @@ restart mprog resume = do
     catchIO (executeFile prog True args Nothing)
  where showWs = show . mapLayout show
 
+-- | Return the path to @~\/.xmonad@.
+getXMonadDir :: MonadIO m => m String
+getXMonadDir = io $ getAppUserDataDirectory "xmonad"
+
 -- | 'recompile force', recompile ~\/.xmonad\/xmonad.hs when any of the
 -- following apply:
 --      * force is True
@@ -327,7 +331,7 @@ restart mprog resume = do
 --
 recompile :: MonadIO m => Bool -> m ()
 recompile force = io $ do
-    dir <- (++ "/.xmonad") <$> getHomeDirectory
+    dir <- getXMonadDir
     let bin = dir ++ "/" ++ "xmonad"
         err = bin ++ ".errors"
         src = bin ++ ".hs"