summaryrefslogtreecommitdiff
path: root/sensible-directory
diff options
context:
space:
mode:
authorJames Crayne <jim.crayne@gmail.com>2019-03-31 22:50:16 -0400
committerJoe Crayne <joe@jerkface.net>2020-01-01 19:33:47 -0500
commit355988d73145e6c61748e5fca03006348bd95758 (patch)
tree50ba6d879ea9dd60b58a616f25f5c710db20330b /sensible-directory
parentc69e83eeaac0fcdab8345e886c17e2ae6406b96a (diff)
added sensibleConfig
Diffstat (limited to 'sensible-directory')
-rw-r--r--sensible-directory/src/SensibleDir.hs35
1 files changed, 35 insertions, 0 deletions
diff --git a/sensible-directory/src/SensibleDir.hs b/sensible-directory/src/SensibleDir.hs
index 4e55726d..14039ab7 100644
--- a/sensible-directory/src/SensibleDir.hs
+++ b/sensible-directory/src/SensibleDir.hs
@@ -73,6 +73,7 @@ isUnix os = not $ "mingw" `isPrefixOf` os
73-- | Try to get the cache directory appropriate to the install scenario. 73-- | Try to get the cache directory appropriate to the install scenario.
74-- On windows it just calls getAppUserDataDirectory and appends "cache". 74-- On windows it just calls getAppUserDataDirectory and appends "cache".
75-- (windows behavior subject to change, contributions welcome) 75-- (windows behavior subject to change, contributions welcome)
76sensibleCacheDir :: FilePath -> IO FilePath
76sensibleCacheDir suffix = do 77sensibleCacheDir suffix = do
77 let ifunix x = if isUnix os then x 78 let ifunix x = if isUnix os then x
78 else PrefixInstall 79 else PrefixInstall
@@ -103,6 +104,7 @@ sensibleCacheDir suffix = do
103 return . foldl1 combine $ reverse ("cache": drop 2 rdir) 104 return . foldl1 combine $ reverse ("cache": drop 2 rdir)
104 105
105-- | like 'sensibleCacheDir', but creates it if needed 106-- | like 'sensibleCacheDir', but creates it if needed
107sensibleCacheDirCreateIfMissing :: FilePath -> IO FilePath
106sensibleCacheDirCreateIfMissing suffix = do 108sensibleCacheDirCreateIfMissing suffix = do
107 dir <- sensibleCacheDir suffix 109 dir <- sensibleCacheDir suffix
108 createDirectoryIfMissing True dir 110 createDirectoryIfMissing True dir
@@ -110,6 +112,7 @@ sensibleCacheDirCreateIfMissing suffix = do
110 112
111-- | Try to get something approximately equivalent to /var/lib 113-- | Try to get something approximately equivalent to /var/lib
112-- but appropriate to install scenario.. 114-- but appropriate to install scenario..
115sensibleVarLib :: FilePath -> IO FilePath
113sensibleVarLib suffix = do 116sensibleVarLib suffix = do
114 let ifunix x = if isUnix os then x 117 let ifunix x = if isUnix os then x
115 else PrefixInstall 118 else PrefixInstall
@@ -139,3 +142,35 @@ sensibleVarLib suffix = do
139 let rdir = reverse dir 142 let rdir = reverse dir
140 return . foldl1 combine $ reverse ("share": drop 2 rdir) 143 return . foldl1 combine $ reverse ("share": drop 2 rdir)
141 144
145-- | Try to get something approximately equivalent to /etc
146-- but appropriate to install scenario..
147sensibleConfig :: FilePath -> IO FilePath
148sensibleConfig suffix = do
149 let ifunix x = if isUnix os then x
150 else PrefixInstall
151 install <- ifunix <$> detectLikelyInstall
152 case install of
153 PrefixInstall -> do
154 if isUnix os
155 then do
156 dirs <- splitDirectories . takeDirectory <$> getExecutablePath
157 homedir <- getHomeDirectory
158 let rdir = reverse dirs
159 case take 1 rdir of
160 ["bin"] -> do
161 let dir = foldl1 combine $ reverse (drop 1 rdir)
162 if homedir == dir then getXdgDirectory XdgData suffix
163 else return (dir </> "config" </> suffix)
164 _ -> do
165 let dir = foldl1 combine dirs
166 if homedir == dir then getXdgDirectory XdgData suffix
167 else return (dir </> "config" </> suffix)
168 else getAppUserDataDirectory ("config" </> suffix)
169 SystemInstall -> return ("/etc" </> suffix)
170 LocalInstall -> return ("/etc" </> suffix)
171 UserInstall -> getXdgDirectory XdgConfig suffix
172 NotInstalled -> do
173 dir <- splitDirectories . takeDirectory <$> getExecutablePath
174 let rdir = reverse dir
175 return . foldl1 combine $ reverse ("config": drop 2 rdir)
176