content: {-# LANGUAGE OverloadedStrings #-}
  -- | This is an example Termonad configuration that shows how to use the
  -- PaperColor colour scheme https://github.com/NLKNguyen/papercolor-theme
  
  module Main where
  
  import Data.Maybe (fromMaybe)
  import Termonad
    ( CursorBlinkMode(CursorBlinkModeOn)
    , Option(Set)
    , ShowScrollbar(ShowScrollbarNever)
    , TMConfig
    , confirmExit
    , cursorBlinkMode
    , defaultConfigOptions
    , defaultTMConfig
    , options
    , showMenu
    , showScrollbar
    , start
    , FontConfig
    , FontSize(FontSizePoints)
    , defaultFontConfig
    , fontConfig
    , fontFamily
    , fontSize
    )
  import Termonad.Config.Colour
    ( AlphaColour
    , ColourConfig
    , Palette(ExtendedPalette)
    , addColourExtension
    , createColour
    , createColourExtension
    , defaultColourConfig
    , defaultStandardColours
    , defaultLightColours
    , backgroundColour
    , foregroundColour
    , palette
    , List8
    , mkList8
    )
  
  -- This is our main 'TMConfig'.  It holds all of the non-colour settings
  -- for Termonad.
  --
  -- This shows how a few settings can be changed.
  myTMConfig :: TMConfig
  myTMConfig =
    defaultTMConfig
      { options =
          defaultConfigOptions
            { showScrollbar = ShowScrollbarNever
            , confirmExit = False
            , showMenu = False
            , cursorBlinkMode = CursorBlinkModeOn
            , fontConfig = fontConf
            }
      }
  
  -- This is our PaperColor dark 'ColourConfig'.  It holds all of our dark-related settings.
  paperColorDark :: ColourConfig (AlphaColour Double)
  paperColorDark =
    defaultColourConfig
      -- Set the default background & foreground colour of text of the terminal.
      { backgroundColour = Set (createColour  28  28  28)  -- black.0
      , foregroundColour = Set (createColour 208 208 208)  -- white.7
      -- Set the extended palette that has 2 Vecs of 8 PaperColor palette colours
      , palette = ExtendedPalette paperColorNormal paperColorBright
      }
    where
      paperColorNormal :: List8 (AlphaColour Double)
      paperColorNormal = fromMaybe defaultStandardColours $ mkList8
        [ createColour  28  28  28 -- black.0
        , createColour 175   0  95 -- red.1
        , createColour  95 175   0 -- green.2
        , createColour 215 175  95 -- yellow.3
        , createColour  95 175 215 -- blue.4
        , createColour 128 128 128 -- purple.5
        , createColour 215 135  95 -- aqua.6
        , createColour 208 208 208 -- white.7
        ]
  
      paperColorBright :: List8 (AlphaColour Double)
      paperColorBright = fromMaybe defaultStandardColours $ mkList8
        [ createColour  88  88  88 -- black.8
        , createColour  95 175  95 -- red.9
        , createColour 175 215   0 -- green.10
        , createColour 175 135 215 -- yellow.11
        , createColour 255 175   0 -- blue.12
        , createColour 255  95 175 -- purple.13
        , createColour   0 175 175 -- aqua.14
        , createColour  95 135 135 -- white.15
        ]
  
  -- This is our PaperColor light 'ColourConfig'.  It holds all of our light-related settings
  paperColorLight :: ColourConfig (AlphaColour Double)
  paperColorLight =
    defaultColourConfig
      -- Set the default background & foreground colour of text of the terminal.
      { backgroundColour = Set (createColour 238 238 238) -- black.0
      , foregroundColour = Set (createColour  68  68  68) -- white.7
      -- Set the extended palette that has 2 Vecs of 8 PaperColor palette colours
      , palette = ExtendedPalette paperColorNormal paperColorBright
      }
    where
      paperColorNormal :: List8 (AlphaColour Double)
      paperColorNormal = fromMaybe defaultLightColours $ mkList8
        [ createColour 238 238 238 -- black.0
        , createColour 175   0   0 -- red.1
        , createColour   0 135   0 -- green.2
        , createColour  95 135   0 -- yellow.3
        , createColour   0 135 175 -- blue.4
        , createColour 135 135 135 -- purple.5
        , createColour   0  95 135 -- aqua.6
        , createColour  68  68  68 -- white.7
        ]
  
      paperColorBright :: List8 (AlphaColour Double)
      paperColorBright = fromMaybe defaultLightColours $ mkList8
        [ createColour 188 188 188 -- black.8
        , createColour 215   0   0 -- red.9
        , createColour 215   0 135 -- green.10
        , createColour 135   0 175 -- yellow.11
        , createColour 215  95   0 -- blue.12
        , createColour 215  95   0 -- purple.13
        , createColour   0  95 175 -- aqua.14
        , createColour   0  95 135 -- white.15
        ]
  
  
  -- This defines the font for the terminal.
  fontConf :: FontConfig
  fontConf =
    defaultFontConfig
      { fontFamily = "Monospace"
      , fontSize = FontSizePoints 12
      }
  
  main :: IO ()
  main = do
    -- First, create the colour extension based on either PaperColor modules.
    myColourExt <- createColourExtension paperColorLight
  
    -- Update 'myTMConfig' with our colour extension.
    let newTMConfig = addColourExtension myTMConfig myColourExt
  
    -- Start Termonad with our updated 'TMConfig'.
    start newTMConfig
  