61 lines
1.9 KiB
Haskell
61 lines
1.9 KiB
Haskell
{-# LANGUAGE CPP #-}
|
|
{-# LANGUAGE DataKinds #-}
|
|
{-# LANGUAGE FlexibleContexts #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE RankNTypes #-}
|
|
{-# OPTIONS_GHC -Wno-unused-record-wildcards #-}
|
|
{-# OPTIONS_GHC -Wno-unused-matches #-}
|
|
{-# LANGUAGE FlexibleInstances #-}
|
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
|
|
|
{-
|
|
This module contains the entrypoint for the brick application and nothing else.
|
|
|
|
-}
|
|
|
|
module GHCup.BrickMain where
|
|
|
|
import GHCup.Types
|
|
( Settings(noColor),
|
|
AppState(ghcupInfo, settings, keyBindings, loggerConfig) )
|
|
import GHCup.Prelude.Logger ( logError )
|
|
import qualified GHCup.Brick.Actions as Actions
|
|
import qualified GHCup.Brick.Common as Common
|
|
import qualified GHCup.Brick.App as BrickApp
|
|
import qualified GHCup.Brick.Attributes as Attributes
|
|
import qualified GHCup.Brick.BrickState as AppState
|
|
import qualified Brick
|
|
|
|
import Control.Monad.Reader ( ReaderT(runReaderT) )
|
|
import Data.Functor ( ($>) )
|
|
import Data.IORef (writeIORef)
|
|
import Prelude hiding ( appendFile )
|
|
import System.Exit ( ExitCode(ExitFailure), exitWith )
|
|
|
|
import qualified Data.Text as T
|
|
|
|
|
|
|
|
brickMain :: AppState
|
|
-> IO ()
|
|
brickMain s = do
|
|
writeIORef Actions.settings' s
|
|
|
|
eAppData <- Actions.getAppData (Just $ ghcupInfo s)
|
|
case eAppData of
|
|
Right ad ->
|
|
Brick.defaultMain
|
|
(BrickApp.app (Attributes.defaultAttributes (noColor $ settings s))
|
|
(Attributes.dimAttributes (noColor $ settings s)))
|
|
(AppState.BrickState ad
|
|
Common.defaultAppSettings
|
|
(Actions.constructList ad Common.defaultAppSettings Nothing)
|
|
(keyBindings (s :: AppState))
|
|
Common.Navigation
|
|
|
|
)
|
|
$> ()
|
|
Left e -> do
|
|
flip runReaderT s $ logError $ "Error building app state: " <> T.pack (show e)
|
|
exitWith $ ExitFailure 2
|