vgrep-0.1.3.0: src/Vgrep/Environment/Config.hs
{-# LANGUAGE TemplateHaskell #-}
module Vgrep.Environment.Config where
import Control.Lens
import Data.Maybe
import Graphics.Vty.Image
import System.Environment
--------------------------------------------------------------------------
-- * Types
--------------------------------------------------------------------------
data Config = Config
{ _colors :: Colors
-- ^ Color configuration
, _tabstop :: Int
-- ^ Tabstop width (default: 8)
, _editor :: String
-- ^ Executable for @e@ key (default: environment variable @$EDITOR@,
-- or @vi@ if @$EDITOR@ is not set)
} deriving (Eq, Show)
data Colors = Colors
{ _lineNumbers :: Attr
-- ^ Line numbers (default: blue)
, _lineNumbersHl :: Attr
-- ^ Highlighted line numbers (default: bold blue)
, _normal :: Attr
-- ^ Normal text (default: terminal default)
, _normalHl :: Attr
-- ^ Highlighted text (default: bold)
, _fileHeaders :: Attr
-- ^ File names in results view (default: terminal default color on
-- green background)
, _selected :: Attr
-- ^ Selected entry (default: terminal default, inverted)
} deriving (Eq, Show)
--------------------------------------------------------------------------
-- * Auto-generated Lenses
--------------------------------------------------------------------------
makeLenses ''Config
makeLenses ''Colors
--------------------------------------------------------------------------
-- * Default Config
--------------------------------------------------------------------------
defaultConfig :: Config
defaultConfig = Config
{ _colors = Colors
{ _lineNumbers = defAttr `withForeColor` blue
, _lineNumbersHl = defAttr `withForeColor` blue
`withStyle` bold
, _normal = defAttr
, _normalHl = defAttr `withStyle` bold
, _fileHeaders = defAttr `withBackColor` green
, _selected = defAttr `withStyle` standout }
, _tabstop = 8
, _editor = "vi" }
withConfiguredEditor :: Config -> IO Config
withConfiguredEditor config = do
let defaultEditor = view editor config
configuredEditor <- lookupEnv "EDITOR"
pure config { _editor = fromMaybe defaultEditor configuredEditor }