packages feed

sloane-4.2.0: Sloane/Config.hs

-- |
-- Copyright   : Anders Claesson 2014-2015
-- Maintainer  : Anders Claesson <anders.claesson@gmail.com>
-- License     : BSD-3
--
-- Constants determined at runtime such as the home directory.

module Sloane.Config
    ( Config (..)
    , getConfig
    ) where

import System.Console.Terminal.Size (width, size)
import System.FilePath ((</>))
import System.Directory

-- | A data type holding "constants" determined at runtime.
data Config = Config
    {
    -- | The home directory
      home        :: FilePath
    -- | Path to the '.sloane' directory.
    , sloaneDir   :: FilePath
    -- | Path to 'stripped' file.
    , seqDBPath   :: FilePath
    -- | Path to 'names' file.
    , namesDBPath :: FilePath
    -- | The width of the terminal.
    , termWidth   :: Int
    }

-- | Get configuration.
getConfig :: IO Config
getConfig = do
    w <- maybe maxBound width `fmap` size
    h <- getHomeDirectory
    let c = Config { home        = h
                   , sloaneDir   = h </> ".oeis-data"
                   , seqDBPath   = sloaneDir c </> "stripped"
                   , namesDBPath = sloaneDir c </> "names"
                   , termWidth   = w
                   }
    return c