1package theme
2
3import (
4 "github.com/charmbracelet/lipgloss/v2"
5)
6
7// TokyoNightTheme implements the Theme interface with Tokyo Night colors.
8// It provides both dark and light variants.
9type TokyoNightTheme struct {
10 BaseTheme
11}
12
13// NewTokyoNightTheme creates a new instance of the Tokyo Night theme.
14func NewTokyoNightTheme() *TokyoNightTheme {
15 // Tokyo Night color palette
16 // Dark mode colors
17 darkBackground := "#222436"
18 darkCurrentLine := "#1e2030"
19 darkSelection := "#2f334d"
20 darkForeground := "#c8d3f5"
21 darkComment := "#636da6"
22 darkRed := "#ff757f"
23 darkOrange := "#ff966c"
24 darkYellow := "#ffc777"
25 darkGreen := "#c3e88d"
26 darkCyan := "#86e1fc"
27 darkBlue := "#82aaff"
28 darkPurple := "#c099ff"
29 darkBorder := "#3b4261"
30
31 theme := &TokyoNightTheme{}
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("#191B29") // Darker background from palette
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("#4fd6be") // teal from palette
61 theme.DiffRemovedColor = lipgloss.Color("#c53b53") // red1 from palette
62 theme.DiffContextColor = lipgloss.Color("#828bb8") // fg_dark from palette
63 theme.DiffHunkHeaderColor = lipgloss.Color("#828bb8") // fg_dark from palette
64 theme.DiffHighlightAddedColor = lipgloss.Color("#b8db87") // git.add from palette
65 theme.DiffHighlightRemovedColor = lipgloss.Color("#e26a75") // git.delete from palette
66 theme.DiffAddedBgColor = lipgloss.Color("#20303b")
67 theme.DiffRemovedBgColor = lipgloss.Color("#37222c")
68 theme.DiffContextBgColor = lipgloss.Color(darkBackground)
69 theme.DiffLineNumberColor = lipgloss.Color("#545c7e") // dark3 from palette
70 theme.DiffAddedLineNumberBgColor = lipgloss.Color("#1b2b34")
71 theme.DiffRemovedLineNumberBgColor = lipgloss.Color("#2d1f26")
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// NewTokyoNightDayTheme creates a new instance of the Tokyo Night Day theme.
104func NewTokyoNightDayTheme() *TokyoNightTheme {
105 // Light mode colors (Tokyo Night Day)
106 lightBackground := "#e1e2e7"
107 lightCurrentLine := "#d5d6db"
108 lightSelection := "#c8c9ce"
109 lightForeground := "#3760bf"
110 lightComment := "#848cb5"
111 lightRed := "#f52a65"
112 lightOrange := "#b15c00"
113 lightYellow := "#8c6c3e"
114 lightGreen := "#587539"
115 lightCyan := "#007197"
116 lightBlue := "#2e7de9"
117 lightPurple := "#9854f1"
118 lightBorder := "#a8aecb"
119
120 theme := &TokyoNightTheme{}
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("#f0f0f5") // 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("#1e725c")
150 theme.DiffRemovedColor = lipgloss.Color("#c53b53")
151 theme.DiffContextColor = lipgloss.Color("#7086b5")
152 theme.DiffHunkHeaderColor = lipgloss.Color("#7086b5")
153 theme.DiffHighlightAddedColor = lipgloss.Color("#4db380")
154 theme.DiffHighlightRemovedColor = lipgloss.Color("#f52a65")
155 theme.DiffAddedBgColor = lipgloss.Color("#d5e5d5")
156 theme.DiffRemovedBgColor = lipgloss.Color("#f7d8db")
157 theme.DiffContextBgColor = lipgloss.Color(lightBackground)
158 theme.DiffLineNumberColor = lipgloss.Color("#848cb5")
159 theme.DiffAddedLineNumberBgColor = lipgloss.Color("#c5d5c5")
160 theme.DiffRemovedLineNumberBgColor = lipgloss.Color("#e7c8cb")
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 Tokyo Night themes with the theme manager
194 RegisterTheme("tokyonight", NewTokyoNightTheme())
195 RegisterTheme("tokyonight-day", NewTokyoNightDayTheme())
196}