-- | Handles directory management for both the template data and the -- data/scripts that the user generates when using 'hifi'. Internally it uses -- '$XDG_DATA_HOME' to locate the directory where scripts and data files should -- end up. -- -- This usually defaults to '$HOME/.local' in most Linux distributions, -- but can also be set manually if one chooses to do so. module Config (templateDir, dataDir, scriptDir) where import System.Directory import Paths_hifi createIfMissingPath :: FilePath -> IO FilePath createIfMissingPath path = createDirectoryIfMissing True path >> return path -- | 'xdgDir' finds the user's '$XDG_DATA_HOME' directory and appends a given -- path to it. '$XDG_DATA_HOME' defaults to '$HOME/.local' in many Linux -- distributions, but can also be set manually. xdgDir :: FilePath -> IO FilePath xdgDir = getXdgDirectory XdgData -- | 'templateDir' will point to the directory where the supplied data files (templates) -- end up. The data dir will, when using `stack` end up in the `.stack-work` -- folder. This directory is then used in order to read the templates at runtime -- so that they can be used when writing new script/data files. templateDir :: IO FilePath templateDir = getDataFileName "templates" -- | 'dataDir' points to a folder in the XDG data directory where it will store -- the data files used to connect to networks. The subdirectory that will be used -- is '$XDG_DATA_HOME/hifi/data'. If this directory does not already exist when -- 'dataDir' is evaluated, it will be created. dataDir :: IO FilePath dataDir = xdgDir "hifi/data" >>= createIfMissingPath -- | 'scriptDir' points to a folder in the XDG data directory where it will store -- the scripts it generates to connect to networks. The subdirectory that will be -- used is '$XDG_DATA_HOME/hifi/scripts'. If this directory does not already exist when -- 'scriptDir' is evaluated, it will be created. scriptDir :: IO FilePath scriptDir = xdgDir "hifi/scripts" >>= createIfMissingPath