module Control.Biegunka.Settings
(
Settings, appData, logger, targets, colors, local, templates, Templates(..)
, Targets(..)
, ColorScheme(..), noColors, actionColor, sourceColor
, srcColor, dstColor, errorColor, retryColor
, mode, Mode(..), _Online, _Offline
) where
import Control.Lens
import Data.Default.Class (Default(..))
import Data.Set (Set)
import Text.PrettyPrint.ANSI.Leijen
import Control.Biegunka.Log (Logger)
import Control.Biegunka.Script (HasRoot(..))
import Control.Biegunka.Templates
import Control.Biegunka.Templates.HStringTemplate
data Settings a = Settings
{ _appRoot :: FilePath
, _appData :: FilePath
, _logger :: Logger
, _targets :: Targets
, _colors :: ColorScheme
, _local :: a
, _templates :: Templates
, _mode :: Mode
}
data Targets =
All
| Subset (Set FilePath)
| Children (Set FilePath)
deriving (Show, Read)
data ColorScheme = ColorScheme
{ _actionColor :: Doc -> Doc
, _sourceColor :: Doc -> Doc
, _srcColor :: Doc -> Doc
, _dstColor :: Doc -> Doc
, _errorColor :: Doc -> Doc
, _retryColor :: Doc -> Doc
}
instance Default ColorScheme where
def = ColorScheme
{ _actionColor = green
, _sourceColor = cyan
, _srcColor = yellow
, _dstColor = magenta
, _errorColor = red
, _retryColor = yellow
}
noColors :: ColorScheme
noColors = ColorScheme
{ _actionColor = id
, _sourceColor = id
, _srcColor = id
, _dstColor = id
, _errorColor = id
, _retryColor = id
}
data Mode = Offline | Online deriving (Show)
makeLensesWith ?? ''ColorScheme $ (defaultRules & generateSignatures .~ False)
actionColor :: Lens' ColorScheme (Doc -> Doc)
sourceColor :: Lens' ColorScheme (Doc -> Doc)
srcColor :: Lens' ColorScheme (Doc -> Doc)
dstColor :: Lens' ColorScheme (Doc -> Doc)
errorColor :: Lens' ColorScheme (Doc -> Doc)
retryColor :: Lens' ColorScheme (Doc -> Doc)
makeLensesWith (defaultRules & generateSignatures .~ False) ''Settings
instance HasRoot (Settings a) where
root = appRoot
appRoot :: Lens' (Settings a) FilePath
appData :: Lens' (Settings a) FilePath
logger :: Lens' (Settings a) Logger
targets :: Lens' (Settings a) Targets
colors :: Lens' (Settings a) ColorScheme
local :: Lens (Settings a) (Settings b) a b
templates :: Lens' (Settings a) Templates
mode :: Lens' (Settings a) Mode
makePrisms ''Mode
instance () ~ a => Default (Settings a) where
def = Settings
{ _appRoot = "~"
, _appData = "~/.biegunka"
, _logger = undefined
, _targets = All
, _colors = def
, _local = ()
, _templates = hStringTemplate ()
, _mode = Online
}