1use super::types::{AppTheme, Rgb};
9
10pub const THEME_NAMES: &[&str] = &[
14 "Default",
15 "Default Light",
16 "Grape",
17 "Ocean",
18 "Sunset",
19 "Forest",
20 "Rose",
21 "Mono",
22 "Neon",
23 "Dracula",
24 "Nord",
25 "Solarized Dark",
26 "Solarized Light",
27 "Gruvbox Dark",
28 "Gruvbox Light",
29 "Catppuccin Latte",
30 "Catppuccin Frappé",
31 "Catppuccin Macchiato",
32 "Catppuccin Mocha",
33 "Tokyo Night",
34 "Tokyo Night Storm",
35 "Tokyo Night Light",
36 "Kanagawa Wave",
37 "Kanagawa Dragon",
38 "Kanagawa Lotus",
39 "Moonfly",
40 "Nightfly",
41 "Oxocarbon",
42 "Cyberpunk",
43 "Rose Pine",
44 "Rose Pine Moon",
45 "Rose Pine Dawn",
46 "Ayu Mirage",
47 "Everforest Dark",
48 "Atom One Dark",
49 "Atom One Light",
50 "Night Owl",
51 "Poimandres",
52 "Flexoki Dark",
53 "Flexoki Light",
54 "Carbonfox",
55 "Andromeda",
56 "Synthwave",
57];
58
59pub const THEME_COUNT: usize = 43;
61
62pub fn theme_by_index(index: usize) -> AppTheme {
64 match index {
65 0 => default(),
66 1 => default_light(),
67 2 => grape(),
68 3 => ocean(),
69 4 => sunset(),
70 5 => forest(),
71 6 => rose(),
72 7 => mono(),
73 8 => neon(),
74 9 => dracula(),
75 10 => nord(),
76 11 => solarized_dark(),
77 12 => solarized_light(),
78 13 => gruvbox_dark(),
79 14 => gruvbox_light(),
80 15 => catppuccin_latte(),
81 16 => catppuccin_frappe(),
82 17 => catppuccin_macchiato(),
83 18 => catppuccin_mocha(),
84 19 => tokyo_night(),
85 20 => tokyo_night_storm(),
86 21 => tokyo_night_light(),
87 22 => kanagawa_wave(),
88 23 => kanagawa_dragon(),
89 24 => kanagawa_lotus(),
90 25 => moonfly(),
91 26 => nightfly(),
92 27 => oxocarbon(),
93 28 => cyberpunk(),
94 29 => rose_pine(),
95 30 => rose_pine_moon(),
96 31 => rose_pine_dawn(),
97 32 => ayu_mirage(),
98 33 => everforest_dark(),
99 34 => atom_one_dark(),
100 35 => atom_one_light(),
101 36 => night_owl(),
102 37 => poimandres(),
103 38 => flexoki_dark(),
104 39 => flexoki_light(),
105 40 => carbonfox(),
106 41 => andromeda(),
107 42 => synthwave(),
108 _ => default(),
109 }
110}
111
112pub fn theme_index_by_name(name: &str) -> usize {
115 THEME_NAMES
116 .iter()
117 .position(|n| n.eq_ignore_ascii_case(name))
118 .unwrap_or(0)
119}
120
121pub fn default() -> AppTheme {
124 AppTheme {
125 is_dark: true,
126 background: Rgb::new(18, 18, 26),
127 surface: Rgb::new(28, 28, 40),
128 border: Rgb::new(60, 80, 100),
129 selection: Rgb::new(40, 60, 80),
130 text_primary: Rgb::new(255, 255, 255),
131 text_secondary: Rgb::new(255, 100, 30),
132 text_muted: Rgb::new(120, 120, 130),
133 accent: Rgb::new(80, 200, 255),
134 success: Rgb::new(80, 220, 120),
135 warning: Rgb::new(255, 200, 50),
136 error: Rgb::new(255, 80, 80),
137 diff_add: Rgb::new(80, 220, 120),
138 diff_del: Rgb::new(255, 80, 80),
139 diff_context: Rgb::new(120, 120, 130),
140 diff_hunk: Rgb::new(255, 100, 30),
141 graph_colors: [
142 Rgb::new(80, 200, 255),
143 Rgb::new(80, 220, 120),
144 Rgb::new(255, 80, 80),
145 Rgb::new(255, 200, 50),
146 Rgb::new(255, 100, 30),
147 Rgb::new(180, 140, 255),
148 Rgb::new(0, 200, 180),
149 Rgb::new(255, 130, 160),
150 ],
151 }
152}
153
154pub fn default_light() -> AppTheme {
155 AppTheme {
156 is_dark: false,
157 background: Rgb::new(250, 250, 255),
158 surface: Rgb::new(235, 238, 248),
159 border: Rgb::new(180, 195, 220),
160 selection: Rgb::new(200, 220, 255),
161 text_primary: Rgb::new(30, 35, 50),
162 text_secondary: Rgb::new(255, 100, 30),
163 text_muted: Rgb::new(130, 140, 160),
164 accent: Rgb::new(0, 140, 220),
165 success: Rgb::new(30, 160, 80),
166 warning: Rgb::new(200, 140, 0),
167 error: Rgb::new(210, 50, 50),
168 diff_add: Rgb::new(30, 160, 80),
169 diff_del: Rgb::new(210, 50, 50),
170 diff_context: Rgb::new(130, 140, 160),
171 diff_hunk: Rgb::new(255, 100, 30),
172 graph_colors: [
173 Rgb::new(0, 140, 220),
174 Rgb::new(30, 160, 80),
175 Rgb::new(210, 50, 50),
176 Rgb::new(200, 140, 0),
177 Rgb::new(255, 100, 30),
178 Rgb::new(140, 80, 200),
179 Rgb::new(0, 150, 150),
180 Rgb::new(190, 60, 120),
181 ],
182 }
183}
184
185pub fn grape() -> AppTheme {
186 AppTheme {
187 is_dark: true,
188 background: Rgb::new(18, 12, 30),
189 surface: Rgb::new(30, 20, 50),
190 border: Rgb::new(100, 70, 150),
191 selection: Rgb::new(50, 35, 80),
192 text_primary: Rgb::new(230, 220, 255),
193 text_secondary: Rgb::new(130, 180, 255),
194 text_muted: Rgb::new(110, 100, 130),
195 accent: Rgb::new(200, 120, 255),
196 success: Rgb::new(160, 110, 255),
197 warning: Rgb::new(210, 170, 255),
198 error: Rgb::new(255, 80, 150),
199 diff_add: Rgb::new(160, 110, 255),
200 diff_del: Rgb::new(255, 80, 150),
201 diff_context: Rgb::new(110, 100, 130),
202 diff_hunk: Rgb::new(130, 180, 255),
203 graph_colors: [
204 Rgb::new(200, 120, 255),
205 Rgb::new(160, 110, 255),
206 Rgb::new(255, 80, 150),
207 Rgb::new(210, 170, 255),
208 Rgb::new(130, 180, 255),
209 Rgb::new(80, 220, 200),
210 Rgb::new(255, 180, 100),
211 Rgb::new(120, 255, 160),
212 ],
213 }
214}
215
216pub fn ocean() -> AppTheme {
217 AppTheme {
218 is_dark: true,
219 background: Rgb::new(0, 20, 35),
220 surface: Rgb::new(0, 35, 55),
221 border: Rgb::new(0, 100, 130),
222 selection: Rgb::new(0, 50, 70),
223 text_primary: Rgb::new(200, 240, 245),
224 text_secondary: Rgb::new(0, 175, 210),
225 text_muted: Rgb::new(80, 120, 130),
226 accent: Rgb::new(0, 200, 180),
227 success: Rgb::new(80, 230, 200),
228 warning: Rgb::new(255, 220, 80),
229 error: Rgb::new(255, 100, 100),
230 diff_add: Rgb::new(80, 230, 200),
231 diff_del: Rgb::new(255, 100, 100),
232 diff_context: Rgb::new(80, 120, 130),
233 diff_hunk: Rgb::new(0, 175, 210),
234 graph_colors: [
235 Rgb::new(0, 200, 180),
236 Rgb::new(80, 230, 200),
237 Rgb::new(255, 100, 100),
238 Rgb::new(255, 220, 80),
239 Rgb::new(0, 175, 210),
240 Rgb::new(180, 130, 255),
241 Rgb::new(255, 160, 100),
242 Rgb::new(220, 120, 200),
243 ],
244 }
245}
246
247pub fn sunset() -> AppTheme {
248 AppTheme {
249 is_dark: true,
250 background: Rgb::new(22, 8, 6),
251 surface: Rgb::new(40, 15, 10),
252 border: Rgb::new(130, 60, 30),
253 selection: Rgb::new(80, 30, 20),
254 text_primary: Rgb::new(255, 235, 210),
255 text_secondary: Rgb::new(255, 150, 50),
256 text_muted: Rgb::new(140, 100, 80),
257 accent: Rgb::new(255, 80, 80),
258 success: Rgb::new(255, 180, 80),
259 warning: Rgb::new(255, 230, 80),
260 error: Rgb::new(255, 50, 50),
261 diff_add: Rgb::new(255, 180, 80),
262 diff_del: Rgb::new(255, 50, 50),
263 diff_context: Rgb::new(140, 100, 80),
264 diff_hunk: Rgb::new(255, 150, 50),
265 graph_colors: [
266 Rgb::new(255, 80, 80),
267 Rgb::new(255, 180, 80),
268 Rgb::new(255, 50, 50),
269 Rgb::new(255, 230, 80),
270 Rgb::new(255, 150, 50),
271 Rgb::new(100, 180, 255),
272 Rgb::new(180, 120, 255),
273 Rgb::new(80, 220, 200),
274 ],
275 }
276}
277
278pub fn forest() -> AppTheme {
279 AppTheme {
280 is_dark: true,
281 background: Rgb::new(8, 18, 8),
282 surface: Rgb::new(15, 30, 15),
283 border: Rgb::new(50, 100, 50),
284 selection: Rgb::new(20, 50, 20),
285 text_primary: Rgb::new(210, 235, 200),
286 text_secondary: Rgb::new(80, 160, 80),
287 text_muted: Rgb::new(90, 120, 80),
288 accent: Rgb::new(100, 200, 80),
289 success: Rgb::new(120, 210, 90),
290 warning: Rgb::new(220, 200, 80),
291 error: Rgb::new(210, 80, 80),
292 diff_add: Rgb::new(120, 210, 90),
293 diff_del: Rgb::new(210, 80, 80),
294 diff_context: Rgb::new(90, 120, 80),
295 diff_hunk: Rgb::new(80, 160, 80),
296 graph_colors: [
297 Rgb::new(100, 200, 80),
298 Rgb::new(120, 210, 90),
299 Rgb::new(210, 80, 80),
300 Rgb::new(220, 200, 80),
301 Rgb::new(80, 160, 80),
302 Rgb::new(130, 160, 255),
303 Rgb::new(200, 130, 180),
304 Rgb::new(200, 180, 100),
305 ],
306 }
307}
308
309pub fn rose() -> AppTheme {
310 AppTheme {
311 is_dark: true,
312 background: Rgb::new(28, 6, 16),
313 surface: Rgb::new(50, 12, 30),
314 border: Rgb::new(140, 60, 100),
315 selection: Rgb::new(80, 20, 40),
316 text_primary: Rgb::new(255, 230, 235),
317 text_secondary: Rgb::new(255, 140, 180),
318 text_muted: Rgb::new(140, 90, 110),
319 accent: Rgb::new(255, 100, 150),
320 success: Rgb::new(255, 160, 190),
321 warning: Rgb::new(255, 220, 180),
322 error: Rgb::new(220, 60, 100),
323 diff_add: Rgb::new(255, 160, 190),
324 diff_del: Rgb::new(220, 60, 100),
325 diff_context: Rgb::new(140, 90, 110),
326 diff_hunk: Rgb::new(255, 140, 180),
327 graph_colors: [
328 Rgb::new(255, 100, 150),
329 Rgb::new(255, 160, 190),
330 Rgb::new(220, 60, 100),
331 Rgb::new(255, 220, 180),
332 Rgb::new(255, 140, 180),
333 Rgb::new(100, 180, 255),
334 Rgb::new(120, 220, 200),
335 Rgb::new(200, 180, 100),
336 ],
337 }
338}
339
340pub fn mono() -> AppTheme {
341 AppTheme {
342 is_dark: true,
343 background: Rgb::new(8, 8, 10),
344 surface: Rgb::new(20, 20, 22),
345 border: Rgb::new(80, 80, 85),
346 selection: Rgb::new(50, 50, 55),
347 text_primary: Rgb::new(210, 210, 210),
348 text_secondary: Rgb::new(180, 180, 180),
349 text_muted: Rgb::new(110, 110, 115),
350 accent: Rgb::new(200, 200, 200),
351 success: Rgb::new(200, 200, 200),
352 warning: Rgb::new(200, 200, 200),
353 error: Rgb::new(160, 160, 160),
354 diff_add: Rgb::new(200, 200, 200),
355 diff_del: Rgb::new(160, 160, 160),
356 diff_context: Rgb::new(110, 110, 115),
357 diff_hunk: Rgb::new(180, 180, 180),
358 graph_colors: [
359 Rgb::new(230, 230, 230),
360 Rgb::new(200, 200, 200),
361 Rgb::new(160, 160, 160),
362 Rgb::new(215, 210, 205),
363 Rgb::new(180, 180, 180),
364 Rgb::new(145, 150, 155),
365 Rgb::new(195, 190, 200),
366 Rgb::new(170, 175, 170),
367 ],
368 }
369}
370
371pub fn neon() -> AppTheme {
372 AppTheme {
373 is_dark: true,
374 background: Rgb::new(6, 0, 14),
375 surface: Rgb::new(15, 0, 30),
376 border: Rgb::new(100, 0, 140),
377 selection: Rgb::new(30, 0, 50),
378 text_primary: Rgb::new(230, 230, 255),
379 text_secondary: Rgb::new(0, 255, 200),
380 text_muted: Rgb::new(100, 80, 120),
381 accent: Rgb::new(255, 0, 200),
382 success: Rgb::new(0, 255, 130),
383 warning: Rgb::new(255, 220, 0),
384 error: Rgb::new(255, 30, 80),
385 diff_add: Rgb::new(0, 255, 130),
386 diff_del: Rgb::new(255, 30, 80),
387 diff_context: Rgb::new(100, 80, 120),
388 diff_hunk: Rgb::new(0, 255, 200),
389 graph_colors: [
390 Rgb::new(255, 0, 200),
391 Rgb::new(0, 255, 130),
392 Rgb::new(255, 30, 80),
393 Rgb::new(255, 220, 0),
394 Rgb::new(0, 255, 200),
395 Rgb::new(100, 80, 255),
396 Rgb::new(255, 120, 0),
397 Rgb::new(0, 180, 255),
398 ],
399 }
400}
401
402pub fn dracula() -> AppTheme {
403 AppTheme {
404 is_dark: true,
405 background: Rgb::new(40, 42, 54),
406 surface: Rgb::new(68, 71, 90),
407 border: Rgb::new(98, 114, 164),
408 selection: Rgb::new(68, 71, 90),
409 text_primary: Rgb::new(248, 248, 242),
410 text_secondary: Rgb::new(139, 233, 253),
411 text_muted: Rgb::new(98, 114, 164),
412 accent: Rgb::new(255, 121, 198),
413 success: Rgb::new(80, 250, 123),
414 warning: Rgb::new(241, 250, 140),
415 error: Rgb::new(255, 85, 85),
416 diff_add: Rgb::new(80, 250, 123),
417 diff_del: Rgb::new(255, 85, 85),
418 diff_context: Rgb::new(98, 114, 164),
419 diff_hunk: Rgb::new(139, 233, 253),
420 graph_colors: [
421 Rgb::new(255, 121, 198),
422 Rgb::new(80, 250, 123),
423 Rgb::new(255, 85, 85),
424 Rgb::new(241, 250, 140),
425 Rgb::new(139, 233, 253),
426 Rgb::new(189, 147, 249),
427 Rgb::new(255, 184, 108),
428 Rgb::new(98, 114, 164),
429 ],
430 }
431}
432
433pub fn nord() -> AppTheme {
434 AppTheme {
435 is_dark: true,
436 background: Rgb::new(29, 35, 42),
437 surface: Rgb::new(59, 66, 82),
438 border: Rgb::new(76, 86, 106),
439 selection: Rgb::new(59, 66, 82),
440 text_primary: Rgb::new(216, 222, 233),
441 text_secondary: Rgb::new(129, 161, 193),
442 text_muted: Rgb::new(76, 86, 106),
443 accent: Rgb::new(136, 192, 208),
444 success: Rgb::new(163, 190, 140),
445 warning: Rgb::new(235, 203, 139),
446 error: Rgb::new(191, 97, 106),
447 diff_add: Rgb::new(163, 190, 140),
448 diff_del: Rgb::new(191, 97, 106),
449 diff_context: Rgb::new(76, 86, 106),
450 diff_hunk: Rgb::new(129, 161, 193),
451 graph_colors: [
452 Rgb::new(136, 192, 208),
453 Rgb::new(163, 190, 140),
454 Rgb::new(191, 97, 106),
455 Rgb::new(235, 203, 139),
456 Rgb::new(129, 161, 193),
457 Rgb::new(180, 142, 173),
458 Rgb::new(208, 135, 112),
459 Rgb::new(143, 188, 187),
460 ],
461 }
462}
463
464pub fn solarized_dark() -> AppTheme {
465 AppTheme {
466 is_dark: true,
467 background: Rgb::new(0, 43, 54),
468 surface: Rgb::new(7, 54, 66),
469 border: Rgb::new(88, 110, 117),
470 selection: Rgb::new(7, 54, 66),
471 text_primary: Rgb::new(131, 148, 150),
472 text_secondary: Rgb::new(42, 161, 152),
473 text_muted: Rgb::new(88, 110, 117),
474 accent: Rgb::new(38, 139, 210),
475 success: Rgb::new(133, 153, 0),
476 warning: Rgb::new(181, 137, 0),
477 error: Rgb::new(220, 50, 47),
478 diff_add: Rgb::new(133, 153, 0),
479 diff_del: Rgb::new(220, 50, 47),
480 diff_context: Rgb::new(88, 110, 117),
481 diff_hunk: Rgb::new(42, 161, 152),
482 graph_colors: [
483 Rgb::new(38, 139, 210),
484 Rgb::new(133, 153, 0),
485 Rgb::new(220, 50, 47),
486 Rgb::new(181, 137, 0),
487 Rgb::new(42, 161, 152),
488 Rgb::new(108, 113, 196),
489 Rgb::new(203, 75, 22),
490 Rgb::new(211, 54, 130),
491 ],
492 }
493}
494
495pub fn solarized_light() -> AppTheme {
496 AppTheme {
497 is_dark: false,
498 background: Rgb::new(253, 246, 227),
499 surface: Rgb::new(238, 232, 213),
500 border: Rgb::new(147, 161, 161),
501 selection: Rgb::new(238, 232, 213),
502 text_primary: Rgb::new(101, 123, 131),
503 text_secondary: Rgb::new(42, 161, 152),
504 text_muted: Rgb::new(147, 161, 161),
505 accent: Rgb::new(38, 139, 210),
506 success: Rgb::new(133, 153, 0),
507 warning: Rgb::new(181, 137, 0),
508 error: Rgb::new(220, 50, 47),
509 diff_add: Rgb::new(133, 153, 0),
510 diff_del: Rgb::new(220, 50, 47),
511 diff_context: Rgb::new(147, 161, 161),
512 diff_hunk: Rgb::new(42, 161, 152),
513 graph_colors: [
514 Rgb::new(38, 139, 210),
515 Rgb::new(133, 153, 0),
516 Rgb::new(220, 50, 47),
517 Rgb::new(181, 137, 0),
518 Rgb::new(42, 161, 152),
519 Rgb::new(108, 113, 196),
520 Rgb::new(203, 75, 22),
521 Rgb::new(211, 54, 130),
522 ],
523 }
524}
525
526pub fn gruvbox_dark() -> AppTheme {
527 AppTheme {
528 is_dark: true,
529 background: Rgb::new(29, 28, 27),
530 surface: Rgb::new(60, 56, 54),
531 border: Rgb::new(146, 131, 116),
532 selection: Rgb::new(60, 56, 54),
533 text_primary: Rgb::new(235, 219, 178),
534 text_secondary: Rgb::new(250, 189, 47),
535 text_muted: Rgb::new(146, 131, 116),
536 accent: Rgb::new(254, 128, 25),
537 success: Rgb::new(184, 187, 38),
538 warning: Rgb::new(250, 189, 47),
539 error: Rgb::new(251, 73, 52),
540 diff_add: Rgb::new(184, 187, 38),
541 diff_del: Rgb::new(251, 73, 52),
542 diff_context: Rgb::new(146, 131, 116),
543 diff_hunk: Rgb::new(250, 189, 47),
544 graph_colors: [
545 Rgb::new(254, 128, 25),
546 Rgb::new(184, 187, 38),
547 Rgb::new(251, 73, 52),
548 Rgb::new(250, 189, 47),
549 Rgb::new(131, 165, 152),
550 Rgb::new(211, 134, 155),
551 Rgb::new(142, 192, 124),
552 Rgb::new(69, 133, 136),
553 ],
554 }
555}
556
557pub fn gruvbox_light() -> AppTheme {
558 AppTheme {
559 is_dark: false,
560 background: Rgb::new(251, 241, 199),
561 surface: Rgb::new(213, 196, 161),
562 border: Rgb::new(146, 131, 116),
563 selection: Rgb::new(213, 196, 161),
564 text_primary: Rgb::new(60, 56, 54),
565 text_secondary: Rgb::new(215, 153, 33),
566 text_muted: Rgb::new(146, 131, 116),
567 accent: Rgb::new(214, 93, 14),
568 success: Rgb::new(121, 116, 14),
569 warning: Rgb::new(215, 153, 33),
570 error: Rgb::new(214, 93, 14),
571 diff_add: Rgb::new(121, 116, 14),
572 diff_del: Rgb::new(214, 93, 14),
573 diff_context: Rgb::new(146, 131, 116),
574 diff_hunk: Rgb::new(215, 153, 33),
575 graph_colors: [
576 Rgb::new(214, 93, 14),
577 Rgb::new(121, 116, 14),
578 Rgb::new(204, 36, 29),
579 Rgb::new(215, 153, 33),
580 Rgb::new(69, 133, 136),
581 Rgb::new(177, 98, 134),
582 Rgb::new(104, 157, 106),
583 Rgb::new(7, 102, 120),
584 ],
585 }
586}
587
588pub fn catppuccin_latte() -> AppTheme {
589 AppTheme {
590 is_dark: false,
591 background: Rgb::new(239, 241, 245),
592 surface: Rgb::new(204, 208, 218),
593 border: Rgb::new(156, 160, 176),
594 selection: Rgb::new(204, 208, 218),
595 text_primary: Rgb::new(76, 79, 105),
596 text_secondary: Rgb::new(30, 102, 245),
597 text_muted: Rgb::new(156, 160, 176),
598 accent: Rgb::new(136, 57, 239),
599 success: Rgb::new(64, 160, 43),
600 warning: Rgb::new(223, 142, 29),
601 error: Rgb::new(210, 15, 57),
602 diff_add: Rgb::new(64, 160, 43),
603 diff_del: Rgb::new(210, 15, 57),
604 diff_context: Rgb::new(156, 160, 176),
605 diff_hunk: Rgb::new(30, 102, 245),
606 graph_colors: [
607 Rgb::new(136, 57, 239),
608 Rgb::new(64, 160, 43),
609 Rgb::new(210, 15, 57),
610 Rgb::new(223, 142, 29),
611 Rgb::new(30, 102, 245),
612 Rgb::new(23, 146, 153),
613 Rgb::new(234, 118, 203),
614 Rgb::new(254, 100, 11),
615 ],
616 }
617}
618
619pub fn catppuccin_frappe() -> AppTheme {
620 AppTheme {
621 is_dark: true,
622 background: Rgb::new(48, 52, 70),
623 surface: Rgb::new(65, 69, 89),
624 border: Rgb::new(115, 121, 148),
625 selection: Rgb::new(65, 69, 89),
626 text_primary: Rgb::new(198, 208, 245),
627 text_secondary: Rgb::new(140, 170, 238),
628 text_muted: Rgb::new(115, 121, 148),
629 accent: Rgb::new(202, 158, 230),
630 success: Rgb::new(166, 209, 137),
631 warning: Rgb::new(229, 200, 144),
632 error: Rgb::new(231, 130, 132),
633 diff_add: Rgb::new(166, 209, 137),
634 diff_del: Rgb::new(231, 130, 132),
635 diff_context: Rgb::new(115, 121, 148),
636 diff_hunk: Rgb::new(140, 170, 238),
637 graph_colors: [
638 Rgb::new(202, 158, 230),
639 Rgb::new(166, 209, 137),
640 Rgb::new(231, 130, 132),
641 Rgb::new(229, 200, 144),
642 Rgb::new(140, 170, 238),
643 Rgb::new(129, 200, 190),
644 Rgb::new(244, 184, 228),
645 Rgb::new(239, 159, 118),
646 ],
647 }
648}
649
650pub fn catppuccin_macchiato() -> AppTheme {
651 AppTheme {
652 is_dark: true,
653 background: Rgb::new(36, 39, 58),
654 surface: Rgb::new(54, 58, 79),
655 border: Rgb::new(110, 115, 141),
656 selection: Rgb::new(54, 58, 79),
657 text_primary: Rgb::new(202, 211, 245),
658 text_secondary: Rgb::new(138, 173, 244),
659 text_muted: Rgb::new(110, 115, 141),
660 accent: Rgb::new(198, 160, 246),
661 success: Rgb::new(166, 218, 149),
662 warning: Rgb::new(238, 212, 159),
663 error: Rgb::new(237, 135, 150),
664 diff_add: Rgb::new(166, 218, 149),
665 diff_del: Rgb::new(237, 135, 150),
666 diff_context: Rgb::new(110, 115, 141),
667 diff_hunk: Rgb::new(138, 173, 244),
668 graph_colors: [
669 Rgb::new(198, 160, 246),
670 Rgb::new(166, 218, 149),
671 Rgb::new(237, 135, 150),
672 Rgb::new(238, 212, 159),
673 Rgb::new(138, 173, 244),
674 Rgb::new(139, 213, 202),
675 Rgb::new(245, 189, 230),
676 Rgb::new(240, 168, 128),
677 ],
678 }
679}
680
681pub fn catppuccin_mocha() -> AppTheme {
682 AppTheme {
683 is_dark: true,
684 background: Rgb::new(30, 30, 46),
685 surface: Rgb::new(49, 50, 68),
686 border: Rgb::new(108, 112, 134),
687 selection: Rgb::new(49, 50, 68),
688 text_primary: Rgb::new(205, 214, 244),
689 text_secondary: Rgb::new(137, 180, 250),
690 text_muted: Rgb::new(108, 112, 134),
691 accent: Rgb::new(203, 166, 247),
692 success: Rgb::new(166, 227, 161),
693 warning: Rgb::new(249, 226, 175),
694 error: Rgb::new(243, 139, 168),
695 diff_add: Rgb::new(166, 227, 161),
696 diff_del: Rgb::new(243, 139, 168),
697 diff_context: Rgb::new(108, 112, 134),
698 diff_hunk: Rgb::new(137, 180, 250),
699 graph_colors: [
700 Rgb::new(203, 166, 247),
701 Rgb::new(166, 227, 161),
702 Rgb::new(243, 139, 168),
703 Rgb::new(249, 226, 175),
704 Rgb::new(137, 180, 250),
705 Rgb::new(148, 226, 213),
706 Rgb::new(245, 194, 231),
707 Rgb::new(250, 179, 135),
708 ],
709 }
710}
711
712pub fn tokyo_night() -> AppTheme {
713 AppTheme {
714 is_dark: true,
715 background: Rgb::new(26, 27, 38),
716 surface: Rgb::new(41, 46, 66),
717 border: Rgb::new(86, 95, 137),
718 selection: Rgb::new(41, 46, 66),
719 text_primary: Rgb::new(192, 202, 245),
720 text_secondary: Rgb::new(122, 162, 247),
721 text_muted: Rgb::new(86, 95, 137),
722 accent: Rgb::new(187, 154, 247),
723 success: Rgb::new(158, 206, 106),
724 warning: Rgb::new(224, 175, 104),
725 error: Rgb::new(247, 118, 142),
726 diff_add: Rgb::new(158, 206, 106),
727 diff_del: Rgb::new(247, 118, 142),
728 diff_context: Rgb::new(86, 95, 137),
729 diff_hunk: Rgb::new(122, 162, 247),
730 graph_colors: [
731 Rgb::new(187, 154, 247),
732 Rgb::new(158, 206, 106),
733 Rgb::new(247, 118, 142),
734 Rgb::new(224, 175, 104),
735 Rgb::new(122, 162, 247),
736 Rgb::new(125, 207, 255),
737 Rgb::new(255, 158, 100),
738 Rgb::new(115, 218, 202),
739 ],
740 }
741}
742
743pub fn tokyo_night_storm() -> AppTheme {
744 AppTheme {
745 is_dark: true,
746 background: Rgb::new(36, 40, 59),
747 surface: Rgb::new(45, 49, 75),
748 border: Rgb::new(86, 95, 137),
749 selection: Rgb::new(45, 49, 75),
750 text_primary: Rgb::new(192, 202, 245),
751 text_secondary: Rgb::new(122, 162, 247),
752 text_muted: Rgb::new(86, 95, 137),
753 accent: Rgb::new(187, 154, 247),
754 success: Rgb::new(158, 206, 106),
755 warning: Rgb::new(224, 175, 104),
756 error: Rgb::new(247, 118, 142),
757 diff_add: Rgb::new(158, 206, 106),
758 diff_del: Rgb::new(247, 118, 142),
759 diff_context: Rgb::new(86, 95, 137),
760 diff_hunk: Rgb::new(122, 162, 247),
761 graph_colors: [
762 Rgb::new(187, 154, 247),
763 Rgb::new(158, 206, 106),
764 Rgb::new(247, 118, 142),
765 Rgb::new(224, 175, 104),
766 Rgb::new(122, 162, 247),
767 Rgb::new(125, 207, 255),
768 Rgb::new(255, 158, 100),
769 Rgb::new(115, 218, 202),
770 ],
771 }
772}
773
774pub fn tokyo_night_light() -> AppTheme {
775 AppTheme {
776 is_dark: false,
777 background: Rgb::new(213, 214, 219),
778 surface: Rgb::new(208, 213, 227),
779 border: Rgb::new(132, 140, 176),
780 selection: Rgb::new(208, 213, 227),
781 text_primary: Rgb::new(52, 59, 88),
782 text_secondary: Rgb::new(46, 126, 233),
783 text_muted: Rgb::new(132, 140, 176),
784 accent: Rgb::new(90, 74, 120),
785 success: Rgb::new(72, 94, 48),
786 warning: Rgb::new(140, 108, 62),
787 error: Rgb::new(210, 15, 57),
788 diff_add: Rgb::new(72, 94, 48),
789 diff_del: Rgb::new(210, 15, 57),
790 diff_context: Rgb::new(132, 140, 176),
791 diff_hunk: Rgb::new(46, 126, 233),
792 graph_colors: [
793 Rgb::new(90, 74, 120),
794 Rgb::new(72, 94, 48),
795 Rgb::new(210, 15, 57),
796 Rgb::new(140, 108, 62),
797 Rgb::new(46, 126, 233),
798 Rgb::new(56, 140, 150),
799 Rgb::new(166, 82, 140),
800 Rgb::new(180, 100, 50),
801 ],
802 }
803}
804
805pub fn kanagawa_wave() -> AppTheme {
806 AppTheme {
807 is_dark: true,
808 background: Rgb::new(22, 22, 30),
809 surface: Rgb::new(42, 42, 55),
810 border: Rgb::new(114, 113, 105),
811 selection: Rgb::new(42, 42, 55),
812 text_primary: Rgb::new(220, 215, 186),
813 text_secondary: Rgb::new(126, 156, 216),
814 text_muted: Rgb::new(114, 113, 105),
815 accent: Rgb::new(210, 126, 153),
816 success: Rgb::new(118, 148, 106),
817 warning: Rgb::new(220, 165, 97),
818 error: Rgb::new(210, 126, 153),
819 diff_add: Rgb::new(118, 148, 106),
820 diff_del: Rgb::new(210, 126, 153),
821 diff_context: Rgb::new(114, 113, 105),
822 diff_hunk: Rgb::new(126, 156, 216),
823 graph_colors: [
824 Rgb::new(210, 126, 153),
825 Rgb::new(118, 148, 106),
826 Rgb::new(255, 90, 100),
827 Rgb::new(220, 165, 97),
828 Rgb::new(126, 156, 216),
829 Rgb::new(106, 149, 137),
830 Rgb::new(228, 104, 118),
831 Rgb::new(149, 127, 184),
832 ],
833 }
834}
835
836pub fn kanagawa_dragon() -> AppTheme {
837 AppTheme {
838 is_dark: true,
839 background: Rgb::new(20, 20, 20),
840 surface: Rgb::new(40, 39, 39),
841 border: Rgb::new(166, 166, 156),
842 selection: Rgb::new(40, 39, 39),
843 text_primary: Rgb::new(197, 201, 197),
844 text_secondary: Rgb::new(139, 164, 176),
845 text_muted: Rgb::new(166, 166, 156),
846 accent: Rgb::new(210, 126, 153),
847 success: Rgb::new(135, 169, 135),
848 warning: Rgb::new(200, 170, 109),
849 error: Rgb::new(210, 126, 153),
850 diff_add: Rgb::new(135, 169, 135),
851 diff_del: Rgb::new(210, 126, 153),
852 diff_context: Rgb::new(166, 166, 156),
853 diff_hunk: Rgb::new(139, 164, 176),
854 graph_colors: [
855 Rgb::new(210, 126, 153),
856 Rgb::new(135, 169, 135),
857 Rgb::new(227, 100, 100),
858 Rgb::new(200, 170, 109),
859 Rgb::new(139, 164, 176),
860 Rgb::new(106, 149, 137),
861 Rgb::new(196, 108, 124),
862 Rgb::new(165, 145, 196),
863 ],
864 }
865}
866
867pub fn kanagawa_lotus() -> AppTheme {
868 AppTheme {
869 is_dark: false,
870 background: Rgb::new(246, 243, 228),
871 surface: Rgb::new(231, 219, 160),
872 border: Rgb::new(196, 178, 138),
873 selection: Rgb::new(231, 219, 160),
874 text_primary: Rgb::new(84, 84, 100),
875 text_secondary: Rgb::new(77, 105, 155),
876 text_muted: Rgb::new(196, 178, 138),
877 accent: Rgb::new(160, 154, 190),
878 success: Rgb::new(111, 137, 78),
879 warning: Rgb::new(119, 113, 63),
880 error: Rgb::new(192, 71, 71),
881 diff_add: Rgb::new(111, 137, 78),
882 diff_del: Rgb::new(192, 71, 71),
883 diff_context: Rgb::new(196, 178, 138),
884 diff_hunk: Rgb::new(77, 105, 155),
885 graph_colors: [
886 Rgb::new(160, 154, 190),
887 Rgb::new(111, 137, 78),
888 Rgb::new(192, 71, 71),
889 Rgb::new(119, 113, 63),
890 Rgb::new(77, 105, 155),
891 Rgb::new(100, 140, 130),
892 Rgb::new(180, 100, 120),
893 Rgb::new(140, 120, 170),
894 ],
895 }
896}
897
898pub fn moonfly() -> AppTheme {
899 AppTheme {
900 is_dark: true,
901 background: Rgb::new(8, 8, 8),
902 surface: Rgb::new(28, 28, 28),
903 border: Rgb::new(78, 78, 78),
904 selection: Rgb::new(28, 28, 28),
905 text_primary: Rgb::new(178, 178, 178),
906 text_secondary: Rgb::new(128, 160, 255),
907 text_muted: Rgb::new(78, 78, 78),
908 accent: Rgb::new(174, 129, 255),
909 success: Rgb::new(140, 200, 95),
910 warning: Rgb::new(226, 164, 120),
911 error: Rgb::new(255, 115, 131),
912 diff_add: Rgb::new(140, 200, 95),
913 diff_del: Rgb::new(255, 115, 131),
914 diff_context: Rgb::new(78, 78, 78),
915 diff_hunk: Rgb::new(128, 160, 255),
916 graph_colors: [
917 Rgb::new(174, 129, 255),
918 Rgb::new(140, 200, 95),
919 Rgb::new(255, 115, 131),
920 Rgb::new(226, 164, 120),
921 Rgb::new(128, 160, 255),
922 Rgb::new(116, 180, 187),
923 Rgb::new(255, 192, 120),
924 Rgb::new(200, 140, 255),
925 ],
926 }
927}
928
929pub fn nightfly() -> AppTheme {
930 AppTheme {
931 is_dark: true,
932 background: Rgb::new(1, 22, 38),
933 surface: Rgb::new(11, 41, 66),
934 border: Rgb::new(75, 100, 121),
935 selection: Rgb::new(11, 41, 66),
936 text_primary: Rgb::new(172, 187, 203),
937 text_secondary: Rgb::new(130, 170, 255),
938 text_muted: Rgb::new(75, 100, 121),
939 accent: Rgb::new(199, 146, 234),
940 success: Rgb::new(161, 205, 94),
941 warning: Rgb::new(243, 218, 11),
942 error: Rgb::new(252, 87, 73),
943 diff_add: Rgb::new(161, 205, 94),
944 diff_del: Rgb::new(252, 87, 73),
945 diff_context: Rgb::new(75, 100, 121),
946 diff_hunk: Rgb::new(130, 170, 255),
947 graph_colors: [
948 Rgb::new(199, 146, 234),
949 Rgb::new(161, 205, 94),
950 Rgb::new(252, 87, 73),
951 Rgb::new(243, 218, 11),
952 Rgb::new(130, 170, 255),
953 Rgb::new(33, 200, 215),
954 Rgb::new(238, 130, 98),
955 Rgb::new(174, 200, 255),
956 ],
957 }
958}
959
960pub fn oxocarbon() -> AppTheme {
961 AppTheme {
962 is_dark: true,
963 background: Rgb::new(22, 22, 22),
964 surface: Rgb::new(38, 38, 38),
965 border: Rgb::new(82, 82, 82),
966 selection: Rgb::new(38, 38, 38),
967 text_primary: Rgb::new(242, 244, 248),
968 text_secondary: Rgb::new(120, 169, 255),
969 text_muted: Rgb::new(82, 82, 82),
970 accent: Rgb::new(255, 126, 182),
971 success: Rgb::new(66, 190, 101),
972 warning: Rgb::new(250, 204, 55),
973 error: Rgb::new(255, 97, 101),
974 diff_add: Rgb::new(66, 190, 101),
975 diff_del: Rgb::new(255, 97, 101),
976 diff_context: Rgb::new(82, 82, 82),
977 diff_hunk: Rgb::new(120, 169, 255),
978 graph_colors: [
979 Rgb::new(255, 126, 182),
980 Rgb::new(66, 190, 101),
981 Rgb::new(255, 97, 101),
982 Rgb::new(250, 204, 55),
983 Rgb::new(120, 169, 255),
984 Rgb::new(8, 189, 186),
985 Rgb::new(190, 149, 255),
986 Rgb::new(255, 170, 120),
987 ],
988 }
989}
990
991pub fn cyberpunk() -> AppTheme {
992 AppTheme {
993 is_dark: true,
994 background: Rgb::new(10, 10, 16),
995 surface: Rgb::new(20, 20, 30),
996 border: Rgb::new(45, 45, 55),
997 selection: Rgb::new(50, 48, 20),
998 text_primary: Rgb::new(230, 230, 220),
999 text_secondary: Rgb::new(0, 210, 235),
1000 text_muted: Rgb::new(90, 90, 100),
1001 accent: Rgb::new(252, 238, 10),
1002 success: Rgb::new(0, 220, 180),
1003 warning: Rgb::new(255, 150, 0),
1004 error: Rgb::new(255, 50, 70),
1005 diff_add: Rgb::new(0, 220, 180),
1006 diff_del: Rgb::new(255, 50, 70),
1007 diff_context: Rgb::new(90, 90, 100),
1008 diff_hunk: Rgb::new(0, 210, 235),
1009 graph_colors: [
1010 Rgb::new(252, 238, 10),
1011 Rgb::new(0, 220, 180),
1012 Rgb::new(255, 50, 70),
1013 Rgb::new(255, 150, 0),
1014 Rgb::new(0, 210, 235),
1015 Rgb::new(180, 0, 255),
1016 Rgb::new(255, 0, 150),
1017 Rgb::new(0, 255, 100),
1018 ],
1019 }
1020}
1021
1022pub fn rose_pine() -> AppTheme {
1023 AppTheme {
1024 is_dark: true,
1025 background: Rgb::new(25, 23, 36),
1026 surface: Rgb::new(38, 35, 55),
1027 border: Rgb::new(110, 106, 134),
1028 selection: Rgb::new(64, 61, 82),
1029 text_primary: Rgb::new(224, 222, 244),
1030 text_secondary: Rgb::new(156, 207, 216),
1031 text_muted: Rgb::new(110, 106, 134),
1032 accent: Rgb::new(196, 167, 231),
1033 success: Rgb::new(49, 116, 143),
1034 warning: Rgb::new(246, 193, 119),
1035 error: Rgb::new(235, 111, 146),
1036 diff_add: Rgb::new(49, 116, 143),
1037 diff_del: Rgb::new(235, 111, 146),
1038 diff_context: Rgb::new(110, 106, 134),
1039 diff_hunk: Rgb::new(156, 207, 216),
1040 graph_colors: [
1041 Rgb::new(196, 167, 231),
1042 Rgb::new(49, 116, 143),
1043 Rgb::new(235, 111, 146),
1044 Rgb::new(246, 193, 119),
1045 Rgb::new(156, 207, 216),
1046 Rgb::new(234, 154, 151),
1047 Rgb::new(156, 207, 216),
1048 Rgb::new(224, 222, 244),
1049 ],
1050 }
1051}
1052
1053pub fn rose_pine_moon() -> AppTheme {
1054 AppTheme {
1055 is_dark: true,
1056 background: Rgb::new(35, 33, 54),
1057 surface: Rgb::new(48, 46, 70),
1058 border: Rgb::new(110, 106, 134),
1059 selection: Rgb::new(68, 65, 90),
1060 text_primary: Rgb::new(224, 222, 244),
1061 text_secondary: Rgb::new(156, 207, 216),
1062 text_muted: Rgb::new(110, 106, 134),
1063 accent: Rgb::new(196, 167, 231),
1064 success: Rgb::new(62, 143, 176),
1065 warning: Rgb::new(246, 193, 119),
1066 error: Rgb::new(235, 111, 146),
1067 diff_add: Rgb::new(62, 143, 176),
1068 diff_del: Rgb::new(235, 111, 146),
1069 diff_context: Rgb::new(110, 106, 134),
1070 diff_hunk: Rgb::new(156, 207, 216),
1071 graph_colors: [
1072 Rgb::new(196, 167, 231),
1073 Rgb::new(62, 143, 176),
1074 Rgb::new(235, 111, 146),
1075 Rgb::new(246, 193, 119),
1076 Rgb::new(156, 207, 216),
1077 Rgb::new(234, 154, 151),
1078 Rgb::new(156, 207, 216),
1079 Rgb::new(224, 222, 244),
1080 ],
1081 }
1082}
1083
1084pub fn rose_pine_dawn() -> AppTheme {
1085 AppTheme {
1086 is_dark: false,
1087 background: Rgb::new(250, 244, 237),
1088 surface: Rgb::new(242, 233, 221),
1089 border: Rgb::new(152, 147, 165),
1090 selection: Rgb::new(223, 218, 217),
1091 text_primary: Rgb::new(87, 82, 121),
1092 text_secondary: Rgb::new(86, 148, 159),
1093 text_muted: Rgb::new(152, 147, 165),
1094 accent: Rgb::new(144, 122, 169),
1095 success: Rgb::new(40, 105, 131),
1096 warning: Rgb::new(234, 157, 52),
1097 error: Rgb::new(180, 99, 122),
1098 diff_add: Rgb::new(40, 105, 131),
1099 diff_del: Rgb::new(180, 99, 122),
1100 diff_context: Rgb::new(152, 147, 165),
1101 diff_hunk: Rgb::new(86, 148, 159),
1102 graph_colors: [
1103 Rgb::new(144, 122, 169),
1104 Rgb::new(40, 105, 131),
1105 Rgb::new(180, 99, 122),
1106 Rgb::new(234, 157, 52),
1107 Rgb::new(86, 148, 159),
1108 Rgb::new(215, 130, 126),
1109 Rgb::new(87, 82, 121),
1110 Rgb::new(152, 147, 165),
1111 ],
1112 }
1113}
1114
1115pub fn ayu_mirage() -> AppTheme {
1116 AppTheme {
1117 is_dark: true,
1118 background: Rgb::new(31, 36, 48),
1119 surface: Rgb::new(42, 48, 62),
1120 border: Rgb::new(104, 104, 104),
1121 selection: Rgb::new(64, 159, 255),
1122 text_primary: Rgb::new(204, 202, 194),
1123 text_secondary: Rgb::new(115, 208, 255),
1124 text_muted: Rgb::new(104, 104, 104),
1125 accent: Rgb::new(115, 208, 255),
1126 success: Rgb::new(135, 217, 108),
1127 warning: Rgb::new(250, 204, 110),
1128 error: Rgb::new(237, 130, 116),
1129 diff_add: Rgb::new(135, 217, 108),
1130 diff_del: Rgb::new(237, 130, 116),
1131 diff_context: Rgb::new(104, 104, 104),
1132 diff_hunk: Rgb::new(115, 208, 255),
1133 graph_colors: [
1134 Rgb::new(115, 208, 255),
1135 Rgb::new(135, 217, 108),
1136 Rgb::new(237, 130, 116),
1137 Rgb::new(250, 204, 110),
1138 Rgb::new(64, 159, 255),
1139 Rgb::new(217, 191, 255),
1140 Rgb::new(255, 170, 108),
1141 Rgb::new(204, 202, 194),
1142 ],
1143 }
1144}
1145
1146pub fn everforest_dark() -> AppTheme {
1147 AppTheme {
1148 is_dark: true,
1149 background: Rgb::new(30, 35, 38),
1150 surface: Rgb::new(42, 48, 50),
1151 border: Rgb::new(166, 176, 160),
1152 selection: Rgb::new(76, 55, 67),
1153 text_primary: Rgb::new(211, 198, 170),
1154 text_secondary: Rgb::new(127, 187, 179),
1155 text_muted: Rgb::new(122, 132, 120),
1156 accent: Rgb::new(167, 192, 128),
1157 success: Rgb::new(167, 192, 128),
1158 warning: Rgb::new(219, 188, 127),
1159 error: Rgb::new(230, 126, 128),
1160 diff_add: Rgb::new(167, 192, 128),
1161 diff_del: Rgb::new(230, 126, 128),
1162 diff_context: Rgb::new(122, 132, 120),
1163 diff_hunk: Rgb::new(127, 187, 179),
1164 graph_colors: [
1165 Rgb::new(167, 192, 128),
1166 Rgb::new(127, 187, 179),
1167 Rgb::new(230, 126, 128),
1168 Rgb::new(219, 188, 127),
1169 Rgb::new(214, 153, 182),
1170 Rgb::new(211, 198, 170),
1171 Rgb::new(166, 176, 160),
1172 Rgb::new(122, 132, 120),
1173 ],
1174 }
1175}
1176
1177pub fn atom_one_dark() -> AppTheme {
1178 AppTheme {
1179 is_dark: true,
1180 background: Rgb::new(33, 37, 43),
1181 surface: Rgb::new(45, 50, 58),
1182 border: Rgb::new(118, 118, 118),
1183 selection: Rgb::new(50, 56, 68),
1184 text_primary: Rgb::new(171, 178, 191),
1185 text_secondary: Rgb::new(97, 175, 239),
1186 text_muted: Rgb::new(118, 118, 118),
1187 accent: Rgb::new(97, 175, 239),
1188 success: Rgb::new(152, 195, 121),
1189 warning: Rgb::new(229, 192, 123),
1190 error: Rgb::new(224, 108, 117),
1191 diff_add: Rgb::new(152, 195, 121),
1192 diff_del: Rgb::new(224, 108, 117),
1193 diff_context: Rgb::new(118, 118, 118),
1194 diff_hunk: Rgb::new(97, 175, 239),
1195 graph_colors: [
1196 Rgb::new(97, 175, 239),
1197 Rgb::new(152, 195, 121),
1198 Rgb::new(224, 108, 117),
1199 Rgb::new(229, 192, 123),
1200 Rgb::new(198, 120, 221),
1201 Rgb::new(86, 182, 194),
1202 Rgb::new(171, 178, 191),
1203 Rgb::new(118, 118, 118),
1204 ],
1205 }
1206}
1207
1208pub fn atom_one_light() -> AppTheme {
1209 AppTheme {
1210 is_dark: false,
1211 background: Rgb::new(249, 249, 249),
1212 surface: Rgb::new(237, 237, 237),
1213 border: Rgb::new(180, 180, 180),
1214 selection: Rgb::new(237, 237, 237),
1215 text_primary: Rgb::new(42, 44, 51),
1216 text_secondary: Rgb::new(47, 90, 243),
1217 text_muted: Rgb::new(118, 118, 118),
1218 accent: Rgb::new(47, 90, 243),
1219 success: Rgb::new(63, 149, 58),
1220 warning: Rgb::new(210, 182, 124),
1221 error: Rgb::new(222, 62, 53),
1222 diff_add: Rgb::new(63, 149, 58),
1223 diff_del: Rgb::new(222, 62, 53),
1224 diff_context: Rgb::new(118, 118, 118),
1225 diff_hunk: Rgb::new(47, 90, 243),
1226 graph_colors: [
1227 Rgb::new(47, 90, 243),
1228 Rgb::new(63, 149, 58),
1229 Rgb::new(222, 62, 53),
1230 Rgb::new(210, 182, 124),
1231 Rgb::new(166, 38, 164),
1232 Rgb::new(1, 132, 188),
1233 Rgb::new(42, 44, 51),
1234 Rgb::new(180, 180, 180),
1235 ],
1236 }
1237}
1238
1239pub fn night_owl() -> AppTheme {
1240 AppTheme {
1241 is_dark: true,
1242 background: Rgb::new(1, 22, 39),
1243 surface: Rgb::new(12, 35, 55),
1244 border: Rgb::new(87, 86, 86),
1245 selection: Rgb::new(95, 126, 151),
1246 text_primary: Rgb::new(214, 222, 235),
1247 text_secondary: Rgb::new(130, 170, 255),
1248 text_muted: Rgb::new(87, 86, 86),
1249 accent: Rgb::new(130, 170, 255),
1250 success: Rgb::new(34, 218, 110),
1251 warning: Rgb::new(173, 219, 103),
1252 error: Rgb::new(239, 83, 80),
1253 diff_add: Rgb::new(34, 218, 110),
1254 diff_del: Rgb::new(239, 83, 80),
1255 diff_context: Rgb::new(87, 86, 86),
1256 diff_hunk: Rgb::new(130, 170, 255),
1257 graph_colors: [
1258 Rgb::new(130, 170, 255),
1259 Rgb::new(34, 218, 110),
1260 Rgb::new(239, 83, 80),
1261 Rgb::new(173, 219, 103),
1262 Rgb::new(199, 146, 234),
1263 Rgb::new(127, 219, 202),
1264 Rgb::new(214, 222, 235),
1265 Rgb::new(255, 203, 139),
1266 ],
1267 }
1268}
1269
1270pub fn poimandres() -> AppTheme {
1271 AppTheme {
1272 is_dark: true,
1273 background: Rgb::new(26, 30, 40),
1274 surface: Rgb::new(38, 42, 55),
1275 border: Rgb::new(100, 106, 130),
1276 selection: Rgb::new(50, 55, 75),
1277 text_primary: Rgb::new(166, 172, 205),
1278 text_secondary: Rgb::new(137, 221, 255),
1279 text_muted: Rgb::new(100, 106, 130),
1280 accent: Rgb::new(93, 228, 199),
1281 success: Rgb::new(93, 228, 199),
1282 warning: Rgb::new(255, 250, 194),
1283 error: Rgb::new(208, 103, 157),
1284 diff_add: Rgb::new(93, 228, 199),
1285 diff_del: Rgb::new(208, 103, 157),
1286 diff_context: Rgb::new(100, 106, 130),
1287 diff_hunk: Rgb::new(137, 221, 255),
1288 graph_colors: [
1289 Rgb::new(93, 228, 199),
1290 Rgb::new(137, 221, 255),
1291 Rgb::new(208, 103, 157),
1292 Rgb::new(255, 250, 194),
1293 Rgb::new(166, 172, 205),
1294 Rgb::new(173, 219, 103),
1295 Rgb::new(100, 106, 130),
1296 Rgb::new(255, 180, 120),
1297 ],
1298 }
1299}
1300
1301pub fn flexoki_dark() -> AppTheme {
1302 AppTheme {
1303 is_dark: true,
1304 background: Rgb::new(16, 15, 15),
1305 surface: Rgb::new(30, 28, 28),
1306 border: Rgb::new(87, 86, 83),
1307 selection: Rgb::new(64, 62, 60),
1308 text_primary: Rgb::new(206, 205, 195),
1309 text_secondary: Rgb::new(67, 133, 190),
1310 text_muted: Rgb::new(87, 86, 83),
1311 accent: Rgb::new(67, 133, 190),
1312 success: Rgb::new(135, 154, 57),
1313 warning: Rgb::new(208, 162, 21),
1314 error: Rgb::new(209, 77, 65),
1315 diff_add: Rgb::new(135, 154, 57),
1316 diff_del: Rgb::new(209, 77, 65),
1317 diff_context: Rgb::new(87, 86, 83),
1318 diff_hunk: Rgb::new(67, 133, 190),
1319 graph_colors: [
1320 Rgb::new(67, 133, 190),
1321 Rgb::new(135, 154, 57),
1322 Rgb::new(209, 77, 65),
1323 Rgb::new(208, 162, 21),
1324 Rgb::new(206, 93, 151),
1325 Rgb::new(58, 169, 159),
1326 Rgb::new(206, 205, 195),
1327 Rgb::new(171, 141, 72),
1328 ],
1329 }
1330}
1331
1332pub fn flexoki_light() -> AppTheme {
1333 AppTheme {
1334 is_dark: false,
1335 background: Rgb::new(255, 252, 240),
1336 surface: Rgb::new(242, 238, 222),
1337 border: Rgb::new(183, 181, 172),
1338 selection: Rgb::new(206, 205, 195),
1339 text_primary: Rgb::new(16, 15, 15),
1340 text_secondary: Rgb::new(32, 94, 166),
1341 text_muted: Rgb::new(111, 110, 105),
1342 accent: Rgb::new(32, 94, 166),
1343 success: Rgb::new(102, 128, 11),
1344 warning: Rgb::new(173, 131, 1),
1345 error: Rgb::new(175, 48, 41),
1346 diff_add: Rgb::new(102, 128, 11),
1347 diff_del: Rgb::new(175, 48, 41),
1348 diff_context: Rgb::new(111, 110, 105),
1349 diff_hunk: Rgb::new(32, 94, 166),
1350 graph_colors: [
1351 Rgb::new(32, 94, 166),
1352 Rgb::new(102, 128, 11),
1353 Rgb::new(175, 48, 41),
1354 Rgb::new(173, 131, 1),
1355 Rgb::new(163, 64, 119),
1356 Rgb::new(36, 131, 123),
1357 Rgb::new(16, 15, 15),
1358 Rgb::new(133, 104, 46),
1359 ],
1360 }
1361}
1362
1363pub fn carbonfox() -> AppTheme {
1364 AppTheme {
1365 is_dark: true,
1366 background: Rgb::new(22, 22, 22),
1367 surface: Rgb::new(35, 35, 35),
1368 border: Rgb::new(72, 72, 72),
1369 selection: Rgb::new(42, 42, 42),
1370 text_primary: Rgb::new(242, 244, 248),
1371 text_secondary: Rgb::new(120, 169, 255),
1372 text_muted: Rgb::new(100, 100, 110),
1373 accent: Rgb::new(120, 169, 255),
1374 success: Rgb::new(37, 190, 106),
1375 warning: Rgb::new(8, 189, 186),
1376 error: Rgb::new(238, 83, 150),
1377 diff_add: Rgb::new(37, 190, 106),
1378 diff_del: Rgb::new(238, 83, 150),
1379 diff_context: Rgb::new(100, 100, 110),
1380 diff_hunk: Rgb::new(120, 169, 255),
1381 graph_colors: [
1382 Rgb::new(120, 169, 255),
1383 Rgb::new(37, 190, 106),
1384 Rgb::new(238, 83, 150),
1385 Rgb::new(8, 189, 186),
1386 Rgb::new(190, 149, 255),
1387 Rgb::new(255, 126, 182),
1388 Rgb::new(242, 244, 248),
1389 Rgb::new(255, 170, 120),
1390 ],
1391 }
1392}
1393
1394pub fn andromeda() -> AppTheme {
1395 AppTheme {
1396 is_dark: true,
1397 background: Rgb::new(38, 42, 51),
1398 surface: Rgb::new(50, 55, 66),
1399 border: Rgb::new(102, 102, 102),
1400 selection: Rgb::new(90, 92, 98),
1401 text_primary: Rgb::new(229, 229, 229),
1402 text_secondary: Rgb::new(15, 168, 205),
1403 text_muted: Rgb::new(102, 102, 102),
1404 accent: Rgb::new(5, 188, 121),
1405 success: Rgb::new(5, 188, 121),
1406 warning: Rgb::new(229, 229, 18),
1407 error: Rgb::new(205, 49, 49),
1408 diff_add: Rgb::new(5, 188, 121),
1409 diff_del: Rgb::new(205, 49, 49),
1410 diff_context: Rgb::new(102, 102, 102),
1411 diff_hunk: Rgb::new(15, 168, 205),
1412 graph_colors: [
1413 Rgb::new(5, 188, 121),
1414 Rgb::new(15, 168, 205),
1415 Rgb::new(205, 49, 49),
1416 Rgb::new(229, 229, 18),
1417 Rgb::new(190, 149, 255),
1418 Rgb::new(255, 126, 182),
1419 Rgb::new(229, 229, 229),
1420 Rgb::new(102, 102, 102),
1421 ],
1422 }
1423}
1424
1425pub fn synthwave() -> AppTheme {
1426 AppTheme {
1427 is_dark: true,
1428 background: Rgb::new(10, 8, 16),
1429 surface: Rgb::new(20, 16, 30),
1430 border: Rgb::new(127, 112, 148),
1431 selection: Rgb::new(25, 50, 60),
1432 text_primary: Rgb::new(218, 217, 199),
1433 text_secondary: Rgb::new(18, 195, 226),
1434 text_muted: Rgb::new(127, 112, 148),
1435 accent: Rgb::new(246, 24, 143),
1436 success: Rgb::new(30, 187, 43),
1437 warning: Rgb::new(253, 248, 52),
1438 error: Rgb::new(246, 24, 143),
1439 diff_add: Rgb::new(30, 187, 43),
1440 diff_del: Rgb::new(246, 24, 143),
1441 diff_context: Rgb::new(127, 112, 148),
1442 diff_hunk: Rgb::new(18, 195, 226),
1443 graph_colors: [
1444 Rgb::new(246, 24, 143),
1445 Rgb::new(30, 187, 43),
1446 Rgb::new(18, 195, 226),
1447 Rgb::new(253, 248, 52),
1448 Rgb::new(190, 149, 255),
1449 Rgb::new(255, 126, 182),
1450 Rgb::new(218, 217, 199),
1451 Rgb::new(127, 112, 148),
1452 ],
1453 }
1454}
1455
1456#[cfg(test)]
1457mod tests {
1458 use super::*;
1459
1460 #[test]
1461 fn theme_count_matches_names() {
1462 assert_eq!(THEME_NAMES.len(), THEME_COUNT);
1463 }
1464
1465 #[test]
1466 fn all_themes_resolve() {
1467 for i in 0..THEME_COUNT {
1468 let t = theme_by_index(i);
1469 let has_colour = t.text_primary.r > 0 || t.text_primary.g > 0 || t.text_primary.b > 0;
1470 assert!(has_colour, "theme index {i} has zero text_primary");
1471 }
1472 }
1473
1474 #[test]
1475 fn out_of_range_returns_default() {
1476 let d = theme_by_index(0);
1477 let oob = theme_by_index(999);
1478 assert_eq!(d.background.r, oob.background.r);
1479 assert_eq!(d.background.g, oob.background.g);
1480 assert_eq!(d.background.b, oob.background.b);
1481 }
1482
1483 #[test]
1484 fn theme_index_by_name_known() {
1485 assert_eq!(theme_index_by_name("Default"), 0);
1486 assert_eq!(theme_index_by_name("Cyberpunk"), 28);
1487 assert_eq!(theme_index_by_name("Synthwave"), 42);
1488 }
1489
1490 #[test]
1491 fn theme_index_by_name_unknown_returns_zero() {
1492 assert_eq!(theme_index_by_name("NonExistent"), 0);
1493 }
1494
1495 #[test]
1496 fn light_themes_are_light() {
1497 assert!(!default_light().is_dark);
1498 assert!(!solarized_light().is_dark);
1499 assert!(!gruvbox_light().is_dark);
1500 assert!(!catppuccin_latte().is_dark);
1501 assert!(!tokyo_night_light().is_dark);
1502 assert!(!kanagawa_lotus().is_dark);
1503 assert!(!rose_pine_dawn().is_dark);
1504 assert!(!atom_one_light().is_dark);
1505 assert!(!flexoki_light().is_dark);
1506 }
1507
1508 #[test]
1509 fn cyberpunk_accent_is_yellow() {
1510 let t = cyberpunk();
1511 assert!(t.accent.r > 240 && t.accent.g > 220 && t.accent.b < 30);
1512 }
1513}