-
-
Notifications
You must be signed in to change notification settings - Fork 50
/
Copy pathExampleGruvboxColourExtension.hs
150 lines (138 loc) · 4.62 KB
/
ExampleGruvboxColourExtension.hs
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