diff options
Diffstat (limited to 'sensible-directory/src/SensibleDir.hs')
-rw-r--r-- | sensible-directory/src/SensibleDir.hs | 35 |
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) |
76 | sensibleCacheDir :: FilePath -> IO FilePath | ||
76 | sensibleCacheDir suffix = do | 77 | sensibleCacheDir 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 |
107 | sensibleCacheDirCreateIfMissing :: FilePath -> IO FilePath | ||
106 | sensibleCacheDirCreateIfMissing suffix = do | 108 | sensibleCacheDirCreateIfMissing 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.. |
115 | sensibleVarLib :: FilePath -> IO FilePath | ||
113 | sensibleVarLib suffix = do | 116 | sensibleVarLib 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.. | ||
147 | sensibleConfig :: FilePath -> IO FilePath | ||
148 | sensibleConfig 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 | |||