{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}

module Chromatin.Plugin(
  plugin,
)
where

import UnliftIO.STM (TVar)
import Neovim (
  Plugin(..),
  command',
  Neovim,
  StartupConfig,
  NeovimConfig,
  NeovimPlugin,
  wrapPlugin,
  )
import Ribosome.Control.Ribosome (Ribosome)
import Chromatin.Init (initialize)
import Chromatin.Data.Env (Env)
import Chromatin.Diag (crmDiag)
import Chromatin.Rebuild (crmRebuild)

plugin' :: Ribosome (TVar Env) -> Plugin (Ribosome (TVar Env))
plugin' env =
  Plugin {
    environment = env,
    exports = [
      $(command' 'crmDiag) [],
      $(command' 'crmRebuild) []
    ]
  }

plugin :: Neovim (StartupConfig NeovimConfig) NeovimPlugin
plugin = do
  env <- initialize
  wrapPlugin $ plugin' env