onedark.go

  1package theme
  2
  3import (
  4	"github.com/charmbracelet/lipgloss/v2"
  5)
  6
  7// OneDarkTheme implements the Theme interface with Atom's One Dark colors.
  8// It provides both dark and light variants.
  9type OneDarkTheme struct {
 10	BaseTheme
 11}
 12
 13// NewOneDarkTheme creates a new instance of the One Dark theme.
 14func NewOneDarkTheme() *OneDarkTheme {
 15	// One Dark color palette
 16	// Dark mode colors from Atom One Dark
 17	darkBackground := "#282c34"
 18	darkCurrentLine := "#2c313c"
 19	darkSelection := "#3e4451"
 20	darkForeground := "#abb2bf"
 21	darkComment := "#5c6370"
 22	darkRed := "#e06c75"
 23	darkOrange := "#d19a66"
 24	darkYellow := "#e5c07b"
 25	darkGreen := "#98c379"
 26	darkCyan := "#56b6c2"
 27	darkBlue := "#61afef"
 28	darkPurple := "#c678dd"
 29	darkBorder := "#3b4048"
 30
 31	theme := &OneDarkTheme{}
 32
 33	// Base colors
 34	theme.PrimaryColor = lipgloss.Color(darkBlue)
 35	theme.SecondaryColor = lipgloss.Color(darkPurple)
 36	theme.AccentColor = lipgloss.Color(darkOrange)
 37
 38	// Status colors
 39	theme.ErrorColor = lipgloss.Color(darkRed)
 40	theme.WarningColor = lipgloss.Color(darkOrange)
 41	theme.SuccessColor = lipgloss.Color(darkGreen)
 42	theme.InfoColor = lipgloss.Color(darkBlue)
 43
 44	// Text colors
 45	theme.TextColor = lipgloss.Color(darkForeground)
 46	theme.TextMutedColor = lipgloss.Color(darkComment)
 47	theme.TextEmphasizedColor = lipgloss.Color(darkYellow)
 48
 49	// Background colors
 50	theme.BackgroundColor = lipgloss.Color(darkBackground)
 51	theme.BackgroundSecondaryColor = lipgloss.Color(darkCurrentLine)
 52	theme.BackgroundDarkerColor = lipgloss.Color("#21252b") // Slightly darker than background
 53
 54	// Border colors
 55	theme.BorderNormalColor = lipgloss.Color(darkBorder)
 56	theme.BorderFocusedColor = lipgloss.Color(darkBlue)
 57	theme.BorderDimColor = lipgloss.Color(darkSelection)
 58
 59	// Diff view colors
 60	theme.DiffAddedColor = lipgloss.Color("#478247")
 61	theme.DiffRemovedColor = lipgloss.Color("#7C4444")
 62	theme.DiffContextColor = lipgloss.Color("#a0a0a0")
 63	theme.DiffHunkHeaderColor = lipgloss.Color("#a0a0a0")
 64	theme.DiffHighlightAddedColor = lipgloss.Color("#DAFADA")
 65	theme.DiffHighlightRemovedColor = lipgloss.Color("#FADADD")
 66	theme.DiffAddedBgColor = lipgloss.Color("#303A30")
 67	theme.DiffRemovedBgColor = lipgloss.Color("#3A3030")
 68	theme.DiffContextBgColor = lipgloss.Color(darkBackground)
 69	theme.DiffLineNumberColor = lipgloss.Color("#888888")
 70	theme.DiffAddedLineNumberBgColor = lipgloss.Color("#293229")
 71	theme.DiffRemovedLineNumberBgColor = lipgloss.Color("#332929")
 72
 73	// Markdown colors
 74	theme.MarkdownTextColor = lipgloss.Color(darkForeground)
 75	theme.MarkdownHeadingColor = lipgloss.Color(darkPurple)
 76	theme.MarkdownLinkColor = lipgloss.Color(darkBlue)
 77	theme.MarkdownLinkTextColor = lipgloss.Color(darkCyan)
 78	theme.MarkdownCodeColor = lipgloss.Color(darkGreen)
 79	theme.MarkdownBlockQuoteColor = lipgloss.Color(darkYellow)
 80	theme.MarkdownEmphColor = lipgloss.Color(darkYellow)
 81	theme.MarkdownStrongColor = lipgloss.Color(darkOrange)
 82	theme.MarkdownHorizontalRuleColor = lipgloss.Color(darkComment)
 83	theme.MarkdownListItemColor = lipgloss.Color(darkBlue)
 84	theme.MarkdownListEnumerationColor = lipgloss.Color(darkCyan)
 85	theme.MarkdownImageColor = lipgloss.Color(darkBlue)
 86	theme.MarkdownImageTextColor = lipgloss.Color(darkCyan)
 87	theme.MarkdownCodeBlockColor = lipgloss.Color(darkForeground)
 88
 89	// Syntax highlighting colors
 90	theme.SyntaxCommentColor = lipgloss.Color(darkComment)
 91	theme.SyntaxKeywordColor = lipgloss.Color(darkPurple)
 92	theme.SyntaxFunctionColor = lipgloss.Color(darkBlue)
 93	theme.SyntaxVariableColor = lipgloss.Color(darkRed)
 94	theme.SyntaxStringColor = lipgloss.Color(darkGreen)
 95	theme.SyntaxNumberColor = lipgloss.Color(darkOrange)
 96	theme.SyntaxTypeColor = lipgloss.Color(darkYellow)
 97	theme.SyntaxOperatorColor = lipgloss.Color(darkCyan)
 98	theme.SyntaxPunctuationColor = lipgloss.Color(darkForeground)
 99
100	return theme
101}
102
103// NewOneLightTheme creates a new instance of the One Light theme.
104func NewOneLightTheme() *OneDarkTheme {
105	// Light mode colors from Atom One Light
106	lightBackground := "#fafafa"
107	lightCurrentLine := "#f0f0f0"
108	lightSelection := "#e5e5e6"
109	lightForeground := "#383a42"
110	lightComment := "#a0a1a7"
111	lightRed := "#e45649"
112	lightOrange := "#da8548"
113	lightYellow := "#c18401"
114	lightGreen := "#50a14f"
115	lightCyan := "#0184bc"
116	lightBlue := "#4078f2"
117	lightPurple := "#a626a4"
118	lightBorder := "#d3d3d3"
119
120	theme := &OneDarkTheme{}
121
122	// Base colors
123	theme.PrimaryColor = lipgloss.Color(lightBlue)
124	theme.SecondaryColor = lipgloss.Color(lightPurple)
125	theme.AccentColor = lipgloss.Color(lightOrange)
126
127	// Status colors
128	theme.ErrorColor = lipgloss.Color(lightRed)
129	theme.WarningColor = lipgloss.Color(lightOrange)
130	theme.SuccessColor = lipgloss.Color(lightGreen)
131	theme.InfoColor = lipgloss.Color(lightBlue)
132
133	// Text colors
134	theme.TextColor = lipgloss.Color(lightForeground)
135	theme.TextMutedColor = lipgloss.Color(lightComment)
136	theme.TextEmphasizedColor = lipgloss.Color(lightYellow)
137
138	// Background colors
139	theme.BackgroundColor = lipgloss.Color(lightBackground)
140	theme.BackgroundSecondaryColor = lipgloss.Color(lightCurrentLine)
141	theme.BackgroundDarkerColor = lipgloss.Color("#ffffff") // Slightly lighter than background
142
143	// Border colors
144	theme.BorderNormalColor = lipgloss.Color(lightBorder)
145	theme.BorderFocusedColor = lipgloss.Color(lightBlue)
146	theme.BorderDimColor = lipgloss.Color(lightSelection)
147
148	// Diff view colors
149	theme.DiffAddedColor = lipgloss.Color("#2E7D32")
150	theme.DiffRemovedColor = lipgloss.Color("#C62828")
151	theme.DiffContextColor = lipgloss.Color("#757575")
152	theme.DiffHunkHeaderColor = lipgloss.Color("#757575")
153	theme.DiffHighlightAddedColor = lipgloss.Color("#A5D6A7")
154	theme.DiffHighlightRemovedColor = lipgloss.Color("#EF9A9A")
155	theme.DiffAddedBgColor = lipgloss.Color("#E8F5E9")
156	theme.DiffRemovedBgColor = lipgloss.Color("#FFEBEE")
157	theme.DiffContextBgColor = lipgloss.Color(lightBackground)
158	theme.DiffLineNumberColor = lipgloss.Color("#9E9E9E")
159	theme.DiffAddedLineNumberBgColor = lipgloss.Color("#C8E6C9")
160	theme.DiffRemovedLineNumberBgColor = lipgloss.Color("#FFCDD2")
161
162	// Markdown colors
163	theme.MarkdownTextColor = lipgloss.Color(lightForeground)
164	theme.MarkdownHeadingColor = lipgloss.Color(lightPurple)
165	theme.MarkdownLinkColor = lipgloss.Color(lightBlue)
166	theme.MarkdownLinkTextColor = lipgloss.Color(lightCyan)
167	theme.MarkdownCodeColor = lipgloss.Color(lightGreen)
168	theme.MarkdownBlockQuoteColor = lipgloss.Color(lightYellow)
169	theme.MarkdownEmphColor = lipgloss.Color(lightYellow)
170	theme.MarkdownStrongColor = lipgloss.Color(lightOrange)
171	theme.MarkdownHorizontalRuleColor = lipgloss.Color(lightComment)
172	theme.MarkdownListItemColor = lipgloss.Color(lightBlue)
173	theme.MarkdownListEnumerationColor = lipgloss.Color(lightCyan)
174	theme.MarkdownImageColor = lipgloss.Color(lightBlue)
175	theme.MarkdownImageTextColor = lipgloss.Color(lightCyan)
176	theme.MarkdownCodeBlockColor = lipgloss.Color(lightForeground)
177
178	// Syntax highlighting colors
179	theme.SyntaxCommentColor = lipgloss.Color(lightComment)
180	theme.SyntaxKeywordColor = lipgloss.Color(lightPurple)
181	theme.SyntaxFunctionColor = lipgloss.Color(lightBlue)
182	theme.SyntaxVariableColor = lipgloss.Color(lightRed)
183	theme.SyntaxStringColor = lipgloss.Color(lightGreen)
184	theme.SyntaxNumberColor = lipgloss.Color(lightOrange)
185	theme.SyntaxTypeColor = lipgloss.Color(lightYellow)
186	theme.SyntaxOperatorColor = lipgloss.Color(lightCyan)
187	theme.SyntaxPunctuationColor = lipgloss.Color(lightForeground)
188
189	return theme
190}
191
192func init() {
193	// Register the One Dark and One Light themes with the theme manager
194	RegisterTheme("onedark", NewOneDarkTheme())
195	RegisterTheme("onelight", NewOneLightTheme())
196}