{- |
Module      :  Neovim.Config
Description :  The user editable and compilable configuration
Copyright   :  (c) Sebastian Witte
License     :  Apache-2.0

Maintainer  :  woozletoff@gmail.com
Stability   :  experimental

-}
module Neovim.Config (
    NeovimConfig(..),
    module Data.Default,
    module System.Log,
    ) where

import           Neovim.Plugin.Classes (NeovimPlugin)

import qualified Config.Dyre           as Dyre
import           Data.Default          (Default (def))
import           System.Log            (Priority (..))

data NeovimConfig = Config
    { plugins      :: [IO NeovimPlugin]
    -- ^ The list of plugins. The IO type inside the list allows the plugin
    -- author to run some arbitrary startup code before creating a value of
    -- type 'NeovimPlugin'.
    , errorMessage :: Maybe String
    -- ^ Used by 'Dyre' for storing compilation errors.
    , logOptions   :: Maybe (FilePath, Priority)
    -- ^ Set the general logging options.
    , dyreParams   :: Maybe (Dyre.Params NeovimConfig)
    -- ^ Parmaeters used by 'Dyre'. This is only used for the
    -- "Neovim.Plugin.ConfigHelper" plugin.
    }

instance Default NeovimConfig where
    def = Config
            { plugins      = []
            , errorMessage = Nothing
            , logOptions   = Nothing
            , dyreParams   = Nothing
            }