File: ExampleGruvboxColourExtension.hs

package info (click to toggle)
haskell-termonad 4.5.0.0-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 476 kB
  • sloc: haskell: 3,784; makefile: 7
file content (150 lines) | stat: -rw-r--r-- 4,735 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
{-# LANGUAGE OverloadedStrings #-}
-- | This is an example Termonad configuration that shows how to use the
-- Gruvbox colour scheme https://github.com/morhetz/gruvbox

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 Gruvbox dark 'ColourConfig'.  It holds all of our dark-related settings.
gruvboxDark :: ColourConfig (AlphaColour Double)
gruvboxDark =
  defaultColourConfig
    -- Set the default foreground colour of text of the terminal.
    { foregroundColour = Set (createColour 213 196 161) -- fg2
    , backgroundColour = Set (createColour  40  40  40) -- bg0
    -- Set the extended palette that has 2 Vecs of 8 Gruvbox palette colours
    , palette = ExtendedPalette gruvboxDark1 gruvboxDark2
    }
  where
    gruvboxDark1 :: List8 (AlphaColour Double)
    gruvboxDark1 = fromMaybe defaultStandardColours $ mkList8
      [ createColour  40  40  40 -- bg0
      , createColour 204  36  29 -- red.1
      , createColour 152 151  26 -- green.2
      , createColour 215 153  33 -- yellow.3
      , createColour  69 133 136 -- blue.4
      , createColour 177  98 134 -- purple.5
      , createColour 104 157 106 -- aqua.6
      , createColour 189 174 147 -- fg3
      ]

    gruvboxDark2 :: List8 (AlphaColour Double)
    gruvboxDark2 = fromMaybe defaultStandardColours $ mkList8
      [ createColour 124 111 100 -- bg4
      , createColour 251  71  52 -- red.9
      , createColour 184 187  38 -- green.10
      , createColour 250 189  47 -- yellow.11
      , createColour 131 165 152 -- blue.12
      , createColour 211 134 155 -- purple.13
      , createColour 142 192 124 -- aqua.14
      , createColour 235 219 178 -- fg1
      ]

-- This is our Gruvbox light 'ColourConfig'.  It holds all of our dark-related settings.
gruvboxLight :: ColourConfig (AlphaColour Double)
gruvboxLight =
  defaultColourConfig
    -- Set the default foreground colour of text of the terminal.
    { foregroundColour = Set (createColour  60  56  54) -- fg1
    , backgroundColour = Set (createColour 251 241 199) -- bg0
    -- Set the extended palette that has 2 Vecs of 8 Gruvbox palette colours
    , palette = ExtendedPalette gruvboxLight1 gruvboxLight2
    }
  where
    gruvboxLight1 :: List8 (AlphaColour Double)
    gruvboxLight1 = fromMaybe defaultLightColours $ mkList8
      [ createColour 251 241 199 -- bg0
      , createColour 204  36  29 -- red.1
      , createColour 152 151  26 -- green.2
      , createColour 215 153  33 -- yellow.3
      , createColour  69 133 136 -- blue.4
      , createColour 177  98 134 -- purple.5
      , createColour 104 157 106 -- aqua.6
      , createColour 102  82  84 -- fg3
      ]

    gruvboxLight2 :: List8 (AlphaColour Double)
    gruvboxLight2 = fromMaybe defaultLightColours $ mkList8
      [ createColour 168 153 132 -- bg4
      , createColour 157   0   6 -- red.9
      , createColour 121 116  14 -- green.10
      , createColour 181 118  20 -- yellow.11
      , createColour   7 102 120 -- blue.12
      , createColour 143  63 113 -- purple.13
      , createColour  66 123  88 -- aqua.14
      , createColour  60  56  54 -- fg1
      ]


-- 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 Gruvboxmodules.
  myColourExt <- createColourExtension gruvboxDark

  -- Update 'myTMConfig' with our colour extension.
  let newTMConfig = addColourExtension myTMConfig myColourExt

  -- Start Termonad with our updated 'TMConfig'.
  start newTMConfig