packages feed

matterhorn-90000.1.0: programs/Main.hs

module Main where

import Prelude ()
import qualified Data.Text.IO as T

import System.Exit ( exitFailure, exitSuccess )

import Matterhorn.Prelude
import Matterhorn.Config
import Matterhorn.Options
import Matterhorn.App
import Matterhorn.KeybindingConsistency
import Brick.Keybindings.Pretty ( keybindingTextTable, keybindingMarkdownTable )
import Matterhorn.Draw.ShowHelp ( commandMarkdownTable, commandTextTable
                                , keybindSections )


main :: IO ()
main = do
    opts <- grabOptions

    configResult <- findConfig $ if optIgnoreConfig opts
                                 then Nothing
                                 else optConfLocation opts

    config <- case configResult of
        Left err -> do
            putStrLn $ "Error loading config: " <> err
            exitFailure
        Right (_, c) -> return c

    let keyConfig = configUserKeys config
        format = optPrintFormat opts

    printedCommands <- case optPrintCommands opts of
        False -> return False
        True -> do
            case format of
                Markdown -> T.putStrLn commandMarkdownTable
                Plain -> T.putStrLn commandTextTable
            return True

    printedKeybindings <- case optPrintKeybindings opts of
        False -> return False
        True -> do
            case format of
                Markdown -> T.putStrLn $ keybindingMarkdownTable keyConfig keybindSections
                Plain -> T.putStrLn $ keybindingTextTable keyConfig keybindSections
            return True

    when (printedKeybindings || printedCommands) exitSuccess

    case ensureKeybindingConsistency keyConfig keybindSections of
        Right () -> return ()
        Left err -> do
            putStrLn $ "Configuration error: " <> err
            exitFailure

    finalSt <- runMatterhorn opts config
    closeMatterhorn finalSt