module Main ( main ) where ---------------------------------------------------------------------------------------------------- import qualified Brick import qualified Brick.BChan as BChan import Control.Monad ( void ) import Glyph.Event ( Event ) import qualified Glyph.Key.Kitty as Kitty import qualified Glyph.Startup as Startup import qualified Glyph.Startup.Args as Args import Glyph.State ( State ) import qualified Glyph.Update as Update import qualified Glyph.View.Element.Base as Base import Glyph.View.Id ( Id ) import qualified Glyph.View.Style as Style import qualified Graphics.Vty as Vty import Graphics.Vty.Config ( VtyUserConfig (..) ) import qualified Graphics.Vty.CrossPlatform as VtyPlatform import qualified System.IO as IO ---------------------------------------------------------------------------------------------------- main :: IO () main = let app :: Brick.App State Event Id app = Brick.App { Brick.appDraw = Base.baseView , Brick.appChooseCursor = Brick.showFirstCursor , Brick.appHandleEvent = Update.update , Brick.appStartEvent = return () , Brick.appAttrMap = Style.attrMap } eventQueueDepth = 64 vtyConfig :: VtyUserConfig vtyConfig = Vty.defaultConfig { configInputMap = configInputMap Vty.defaultConfig <> Kitty.inputMap } buildVty = VtyPlatform.mkVty vtyConfig in do -- ToDo: Read cli args -- args <- readArgs let args = Args.noArgs state <- Startup.startup args channel <- BChan.newBChan eventQueueDepth initialVty <- buildVty Kitty.with IO.stdout Kitty.defaultFlags <| void <| Brick.customMain initialVty buildVty (Just channel) app state