Skip to main content

try_rs/
themes.rs

1use ratatui::style::Color;
2
3#[derive(Clone)]
4pub struct Theme {
5    pub name: String,
6    // Background color (None means transparent/terminal default)
7    pub background: Option<Color>,
8    // Title colors
9    pub title_try: Color,
10    pub title_rs: Color,
11    // Search box
12    pub search_title: Color,
13    pub search_border: Color,
14    // Folder box
15    pub folder_title: Color,
16    pub folder_border: Color,
17    // Disk box
18    pub disk_title: Color,
19    pub disk_border: Color,
20    // Preview box
21    pub preview_title: Color,
22    pub preview_border: Color,
23    // Legends box
24    pub legends_title: Color,
25    pub legends_border: Color,
26    // List colors
27    pub list_date: Color,
28    pub list_highlight_bg: Color,
29    pub list_highlight_fg: Color,
30    pub list_selected_fg: Color,
31    // Helpers/status bar
32    pub helpers_colors: Color,
33    pub status_message: Color,
34    // Popup colors
35    pub popup_bg: Color,
36    pub popup_text: Color,
37    // Icon colors
38    pub icon_rust: Color,
39    pub icon_maven: Color,
40    pub icon_flutter: Color,
41    pub icon_go: Color,
42    pub icon_python: Color,
43    pub icon_mise: Color,
44    pub icon_worktree: Color,
45    pub icon_worktree_lock: Color,
46    pub icon_gitmodules: Color,
47    pub icon_git: Color,
48    pub icon_folder: Color,
49    pub icon_file: Color,
50}
51
52impl Default for Theme {
53    fn default() -> Self {
54        Self::default_theme()
55    }
56}
57
58/// A palette of named base colors used to construct themes via standard mapping.
59/// Most themes map these roles consistently:
60///   accent1 → title_try, preview_title, icon_flutter
61///   accent2 → title_rs, popup_text, icon_maven, icon_git
62///   warm    → search_title, icon_rust, icon_mise
63///   cool    → icon_go
64///   green   → folder_title, icon_worktree
65///   yellow  → disk_title, status_message, icon_python, icon_folder
66///   purple  → legends_title, icon_gitmodules
67///   overlay → all borders, helpers_colors
68///   subtext → list_date, icon_worktree_lock, icon_file
69///   surface → list_highlight_bg
70///   text    → list_highlight_fg
71///   base    → popup_bg
72struct Palette {
73    accent1: Color,
74    accent2: Color,
75    warm: Color,
76    cool: Color,
77    green: Color,
78    yellow: Color,
79    purple: Color,
80    overlay: Color,
81    subtext: Color,
82    surface: Color,
83    text: Color,
84    base: Color,
85}
86
87impl Theme {
88    /// Build a theme from a palette using the standard role mapping.
89    fn from_palette(name: &str, background: Option<Color>, p: Palette) -> Self {
90        Self {
91            name: name.to_string(),
92            background,
93            title_try: p.accent1,
94            title_rs: p.accent2,
95            search_title: p.warm,
96            search_border: p.overlay,
97            folder_title: p.green,
98            folder_border: p.overlay,
99            disk_title: p.yellow,
100            disk_border: p.overlay,
101            preview_title: p.accent1,
102            preview_border: p.overlay,
103            legends_title: p.purple,
104            legends_border: p.overlay,
105            list_date: p.subtext,
106            list_highlight_bg: p.surface,
107            list_highlight_fg: p.text,
108            list_selected_fg: p.text,
109            helpers_colors: p.overlay,
110            status_message: p.yellow,
111            popup_bg: p.base,
112            popup_text: p.accent2,
113            icon_rust: p.warm,
114            icon_maven: p.accent2,
115            icon_flutter: p.accent1,
116            icon_go: p.cool,
117            icon_python: p.yellow,
118            icon_mise: p.warm,
119            icon_worktree: p.green,
120            icon_worktree_lock: p.subtext,
121            icon_gitmodules: p.purple,
122            icon_git: p.accent2,
123            icon_folder: p.yellow,
124            icon_file: p.subtext,
125        }
126    }
127
128    pub fn default_theme() -> Self {
129        Self {
130            // Default theme keeps original hardcoded icon colors for real-world brands
131            icon_rust: Color::Rgb(230, 100, 50),
132            icon_maven: Color::Rgb(255, 150, 50),
133            icon_flutter: Color::Rgb(2, 123, 222),
134            icon_go: Color::Rgb(0, 173, 216),
135            icon_python: Color::Yellow,
136            icon_mise: Color::Rgb(250, 179, 135),
137            icon_worktree: Color::Rgb(100, 180, 100),
138            icon_worktree_lock: Color::White,
139            icon_gitmodules: Color::Rgb(180, 130, 200),
140            icon_git: Color::Rgb(240, 80, 50),
141            icon_folder: Color::Rgb(249, 226, 175),
142            icon_file: Color::Rgb(166, 173, 200),
143            ..Self::from_palette(
144                "Default",
145                None,
146                Palette {
147                    accent1: Color::Rgb(137, 180, 250), // Blue
148                    accent2: Color::Rgb(243, 139, 168), // Red
149                    warm: Color::Rgb(250, 179, 135),    // Peach
150                    cool: Color::Rgb(0, 173, 216),      // Cyan
151                    green: Color::Rgb(166, 227, 161),   // Green
152                    yellow: Color::Rgb(249, 226, 175),  // Yellow
153                    purple: Color::Rgb(203, 166, 247),  // Mauve
154                    overlay: Color::Rgb(147, 153, 178), // Overlay
155                    subtext: Color::Rgb(166, 173, 200), // Subtext
156                    surface: Color::Rgb(88, 91, 112),   // Surface
157                    text: Color::Rgb(205, 214, 244),    // Text
158                    base: Color::Rgb(30, 30, 46),       // Base
159                },
160            )
161        }
162    }
163
164    pub fn catppuccin_mocha() -> Self {
165        Self::from_palette(
166            "Catppuccin Mocha",
167            Some(Color::Rgb(30, 30, 46)),
168            Palette {
169                accent1: Color::Rgb(137, 180, 250), // Blue
170                accent2: Color::Rgb(243, 139, 168), // Red
171                warm: Color::Rgb(250, 179, 135),    // Peach
172                cool: Color::Rgb(148, 226, 213),    // Teal
173                green: Color::Rgb(166, 227, 161),   // Green
174                yellow: Color::Rgb(249, 226, 175),  // Yellow
175                purple: Color::Rgb(203, 166, 247),  // Mauve
176                overlay: Color::Rgb(147, 153, 178), // Overlay2
177                subtext: Color::Rgb(166, 173, 200), // Subtext0
178                surface: Color::Rgb(88, 91, 112),   // Surface2
179                text: Color::Rgb(205, 214, 244),    // Text
180                base: Color::Rgb(30, 30, 46),       // Base
181            },
182        )
183    }
184
185    pub fn catppuccin_macchiato() -> Self {
186        Self {
187            title_rs: Color::Rgb(238, 153, 160), // Maroon (not Red)
188            ..Self::from_palette(
189                "Catppuccin Macchiato",
190                Some(Color::Rgb(36, 39, 58)),
191                Palette {
192                    accent1: Color::Rgb(138, 173, 244), // Blue
193                    accent2: Color::Rgb(237, 135, 150), // Red
194                    warm: Color::Rgb(245, 169, 127),    // Peach
195                    cool: Color::Rgb(139, 213, 202),    // Teal
196                    green: Color::Rgb(166, 218, 149),   // Green
197                    yellow: Color::Rgb(238, 212, 159),  // Yellow
198                    purple: Color::Rgb(198, 160, 246),  // Mauve
199                    overlay: Color::Rgb(147, 154, 183), // Overlay1
200                    subtext: Color::Rgb(165, 173, 203), // Subtext0
201                    surface: Color::Rgb(91, 96, 120),   // Surface2
202                    text: Color::Rgb(202, 211, 245),    // Text
203                    base: Color::Rgb(36, 39, 58),       // Base
204                },
205            )
206        }
207    }
208
209    pub fn dracula() -> Self {
210        let cyan = Color::Rgb(139, 233, 253);
211        Self {
212            preview_title: cyan,
213            list_date: cyan,
214            popup_text: Color::Rgb(255, 85, 85), // Red (not Pink)
215            icon_flutter: cyan,
216            icon_go: cyan,
217            icon_file: cyan,
218            icon_maven: Color::Rgb(255, 85, 85), // Red (not Pink)
219            icon_worktree_lock: Color::Rgb(248, 248, 242), // Foreground
220            ..Self::from_palette(
221                "Dracula",
222                Some(Color::Rgb(40, 42, 54)),
223                Palette {
224                    accent1: Color::Rgb(189, 147, 249), // Purple
225                    accent2: Color::Rgb(255, 121, 198), // Pink
226                    warm: Color::Rgb(255, 184, 108),    // Orange
227                    cool: Color::Rgb(139, 233, 253),    // Cyan
228                    green: Color::Rgb(80, 250, 123),    // Green
229                    yellow: Color::Rgb(241, 250, 140),  // Yellow
230                    purple: Color::Rgb(189, 147, 249),  // Purple
231                    overlay: Color::Rgb(98, 114, 164),  // Comment
232                    subtext: Color::Rgb(139, 233, 253), // Cyan (for dates)
233                    surface: Color::Rgb(68, 71, 90),    // Selection
234                    text: Color::Rgb(248, 248, 242),    // Foreground
235                    base: Color::Rgb(40, 42, 54),       // Background
236                },
237            )
238        }
239    }
240
241    pub fn jetbrains_darcula() -> Self {
242        Self {
243            search_title: Color::Rgb(106, 135, 89),        // Green
244            disk_title: Color::Rgb(204, 120, 50),          // Orange
245            icon_maven: Color::Rgb(255, 198, 109),         // Gold
246            icon_worktree: Color::Rgb(106, 135, 89),       // Green
247            icon_worktree_lock: Color::Rgb(187, 187, 187), // Light Grey
248            ..Self::from_palette(
249                "JetBrains Darcula",
250                Some(Color::Rgb(43, 43, 43)),
251                Palette {
252                    accent1: Color::Rgb(78, 124, 238),  // Blue
253                    accent2: Color::Rgb(204, 120, 50),  // Orange
254                    warm: Color::Rgb(204, 120, 50),     // Orange
255                    cool: Color::Rgb(0, 173, 216),      // Go cyan
256                    green: Color::Rgb(255, 198, 109),   // Gold
257                    yellow: Color::Rgb(255, 198, 109),  // Gold
258                    purple: Color::Rgb(152, 118, 170),  // Purple
259                    overlay: Color::Rgb(128, 128, 128), // Grey
260                    subtext: Color::Rgb(128, 128, 128), // Grey
261                    surface: Color::Rgb(33, 66, 131),   // Selection
262                    text: Color::Rgb(187, 187, 187),    // Light Grey
263                    base: Color::Rgb(60, 63, 65),       // Bg
264                },
265            )
266        }
267    }
268
269    pub fn gruvbox_dark() -> Self {
270        Self {
271            title_rs: Color::Rgb(250, 189, 47),            // Yellow
272            search_title: Color::Rgb(184, 187, 38),        // Green
273            folder_title: Color::Rgb(250, 189, 47),        // Yellow
274            disk_title: Color::Rgb(254, 128, 25),          // Orange
275            preview_title: Color::Rgb(131, 165, 152),      // Aqua
276            status_message: Color::Rgb(215, 153, 33),      // Orange
277            icon_flutter: Color::Rgb(131, 165, 152),       // Aqua
278            icon_worktree_lock: Color::Rgb(168, 153, 132), // Grey (overlay)
279            ..Self::from_palette(
280                "Gruvbox Dark",
281                Some(Color::Rgb(40, 40, 40)),
282                Palette {
283                    accent1: Color::Rgb(251, 73, 52),   // Red
284                    accent2: Color::Rgb(251, 73, 52),   // Red
285                    warm: Color::Rgb(254, 128, 25),     // Orange
286                    cool: Color::Rgb(131, 165, 152),    // Aqua
287                    green: Color::Rgb(184, 187, 38),    // Green
288                    yellow: Color::Rgb(250, 189, 47),   // Yellow
289                    purple: Color::Rgb(211, 134, 155),  // Purple
290                    overlay: Color::Rgb(168, 153, 132), // Grey
291                    subtext: Color::Rgb(146, 131, 116), // Grey
292                    surface: Color::Rgb(80, 73, 69),    // Bg2
293                    text: Color::Rgb(235, 219, 178),    // Fg
294                    base: Color::Rgb(40, 40, 40),       // Bg0
295                },
296            )
297        }
298    }
299
300    pub fn nord() -> Self {
301        Self {
302            search_title: Color::Rgb(163, 190, 140),  // Green (not warm)
303            folder_title: Color::Rgb(235, 203, 139),  // Yellow (not green)
304            disk_title: Color::Rgb(208, 135, 112),    // Aurora Orange
305            icon_worktree: Color::Rgb(163, 190, 140), // Aurora Green
306            ..Self::from_palette(
307                "Nord",
308                Some(Color::Rgb(46, 52, 64)),
309                Palette {
310                    accent1: Color::Rgb(136, 192, 208), // Frost Cyan
311                    accent2: Color::Rgb(191, 97, 106),  // Aurora Red
312                    warm: Color::Rgb(208, 135, 112),    // Aurora Orange
313                    cool: Color::Rgb(136, 192, 208),    // Frost Cyan
314                    green: Color::Rgb(163, 190, 140),   // Aurora Green
315                    yellow: Color::Rgb(235, 203, 139),  // Aurora Yellow
316                    purple: Color::Rgb(180, 142, 173),  // Aurora Purple
317                    overlay: Color::Rgb(76, 86, 106),   // Polar Night 2
318                    subtext: Color::Rgb(216, 222, 233), // Snow Storm
319                    surface: Color::Rgb(67, 76, 94),    // Polar Night 3
320                    text: Color::Rgb(236, 239, 244),    // Snow Storm 3
321                    base: Color::Rgb(46, 52, 64),       // Polar Night 0
322                },
323            )
324        }
325    }
326
327    pub fn tokyo_night() -> Self {
328        let cyan = Color::Rgb(125, 207, 255);
329        Self {
330            search_title: Color::Rgb(158, 206, 106), // Green
331            disk_title: Color::Rgb(255, 158, 100),   // Orange
332            preview_title: cyan,
333            icon_flutter: cyan,
334            icon_go: cyan,
335            icon_worktree: Color::Rgb(158, 206, 106), // Green
336            ..Self::from_palette(
337                "Tokyo Night",
338                Some(Color::Rgb(26, 27, 38)),
339                Palette {
340                    accent1: Color::Rgb(122, 162, 247), // Blue
341                    accent2: Color::Rgb(247, 118, 142), // Red
342                    warm: Color::Rgb(255, 158, 100),    // Orange
343                    cool: Color::Rgb(125, 207, 255),    // Cyan
344                    green: Color::Rgb(224, 175, 104),   // Yellow (folder)
345                    yellow: Color::Rgb(224, 175, 104),  // Yellow
346                    purple: Color::Rgb(187, 154, 247),  // Purple
347                    overlay: Color::Rgb(86, 95, 137),   // Comment
348                    subtext: Color::Rgb(169, 177, 214), // Fg
349                    surface: Color::Rgb(65, 72, 104),   // Terminal Black
350                    text: Color::Rgb(192, 202, 245),    // Terminal White
351                    base: Color::Rgb(26, 27, 38),       // Bg
352                },
353            )
354        }
355    }
356
357    pub fn one_dark_pro() -> Self {
358        let cyan = Color::Rgb(86, 182, 194);
359        Self {
360            preview_title: cyan,
361            icon_flutter: cyan,
362            icon_go: cyan,
363            ..Self::from_palette(
364                "One Dark Pro",
365                Some(Color::Rgb(40, 44, 52)),
366                Palette {
367                    accent1: Color::Rgb(97, 175, 239),  // Blue
368                    accent2: Color::Rgb(224, 108, 117), // Red
369                    warm: Color::Rgb(209, 154, 102),    // Orange
370                    cool: Color::Rgb(86, 182, 194),     // Cyan
371                    green: Color::Rgb(152, 195, 121),   // Green
372                    yellow: Color::Rgb(229, 192, 123),  // Yellow
373                    purple: Color::Rgb(198, 120, 221),  // Purple
374                    overlay: Color::Rgb(92, 99, 112),   // Comment
375                    subtext: Color::Rgb(171, 178, 191), // Fg
376                    surface: Color::Rgb(62, 68, 81),    // Selection
377                    text: Color::Rgb(220, 223, 228),    // Bright Fg
378                    base: Color::Rgb(40, 44, 52),       // Bg
379                },
380            )
381        }
382    }
383
384    pub fn everforest() -> Self {
385        Self::from_palette(
386            "Everforest",
387            Some(Color::Rgb(45, 51, 48)),
388            Palette {
389                accent1: Color::Rgb(127, 187, 179), // Aqua
390                accent2: Color::Rgb(230, 126, 128), // Red
391                warm: Color::Rgb(230, 152, 117),    // Orange
392                cool: Color::Rgb(127, 187, 179),    // Aqua
393                green: Color::Rgb(167, 192, 128),   // Green
394                yellow: Color::Rgb(219, 188, 127),  // Yellow
395                purple: Color::Rgb(214, 153, 182),  // Purple
396                overlay: Color::Rgb(127, 132, 120), // Grey
397                subtext: Color::Rgb(211, 198, 170), // Fg
398                surface: Color::Rgb(80, 88, 77),    // Bg Visual
399                text: Color::Rgb(211, 198, 170),    // Fg
400                base: Color::Rgb(45, 51, 48),       // Bg
401            },
402        )
403    }
404
405    pub fn synthwave_84() -> Self {
406        Self {
407            search_title: Color::Rgb(255, 203, 107), // Yellow (not orange)
408            legends_title: Color::Rgb(254, 78, 174), // Hot Pink
409            popup_text: Color::Rgb(254, 78, 174),    // Hot Pink
410            icon_rust: Color::Rgb(255, 140, 66),     // Orange (unique)
411            icon_gitmodules: Color::Rgb(254, 78, 174), // Hot Pink
412            ..Self::from_palette(
413                "SynthWave '84",
414                Some(Color::Rgb(38, 29, 53)),
415                Palette {
416                    accent1: Color::Rgb(54, 244, 244),  // Cyan
417                    accent2: Color::Rgb(255, 126, 185), // Pink
418                    warm: Color::Rgb(255, 140, 66),     // Orange
419                    cool: Color::Rgb(54, 244, 244),     // Cyan
420                    green: Color::Rgb(114, 241, 177),   // Green
421                    yellow: Color::Rgb(255, 203, 107),  // Yellow
422                    purple: Color::Rgb(254, 78, 174),   // Hot Pink
423                    overlay: Color::Rgb(129, 91, 164),  // Purple dim
424                    subtext: Color::Rgb(187, 186, 201), // Fg
425                    surface: Color::Rgb(57, 43, 75),    // Selection
426                    text: Color::Rgb(255, 255, 255),    // White
427                    base: Color::Rgb(38, 29, 53),       // Bg
428                },
429            )
430        }
431    }
432
433    pub fn oled_true_black() -> Self {
434        Self {
435            helpers_colors: Color::Rgb(100, 100, 100), // Grey (different from overlay)
436            icon_rust: Color::Rgb(255, 120, 50),       // Bright Orange
437            icon_mise: Color::Rgb(255, 180, 0),        // Orange (different from warm)
438            ..Self::from_palette(
439                "OLED True Black",
440                Some(Color::Rgb(0, 0, 0)),
441                Palette {
442                    accent1: Color::Rgb(0, 200, 255),   // Bright Cyan
443                    accent2: Color::Rgb(255, 80, 100),  // Bright Red
444                    warm: Color::Rgb(255, 180, 0),      // Orange
445                    cool: Color::Rgb(0, 200, 255),      // Bright Cyan
446                    green: Color::Rgb(0, 230, 130),     // Bright Green
447                    yellow: Color::Rgb(255, 220, 0),    // Yellow
448                    purple: Color::Rgb(200, 100, 255),  // Purple
449                    overlay: Color::Rgb(60, 60, 60),    // Dark Grey
450                    subtext: Color::Rgb(180, 180, 180), // Light Grey
451                    surface: Color::Rgb(30, 30, 30),    // Near Black
452                    text: Color::Rgb(255, 255, 255),    // White
453                    base: Color::Rgb(0, 0, 0),          // True Black
454                },
455            )
456        }
457    }
458
459    pub fn silver_gray() -> Self {
460        Self {
461            preview_title: Color::Rgb(176, 196, 222), // Light Steel Blue
462            icon_rust: Color::Rgb(210, 105, 30),      // Chocolate
463            icon_go: Color::Rgb(176, 196, 222),       // Light Steel Blue
464            ..Self::from_palette(
465                "Silver Gray",
466                Some(Color::Rgb(47, 47, 47)),
467                Palette {
468                    accent1: Color::Rgb(100, 149, 237), // Cornflower Blue
469                    accent2: Color::Rgb(205, 92, 92),   // Indian Red
470                    warm: Color::Rgb(218, 165, 32),     // Goldenrod
471                    cool: Color::Rgb(176, 196, 222),    // Light Steel Blue
472                    green: Color::Rgb(144, 238, 144),   // Light Green
473                    yellow: Color::Rgb(240, 230, 140),  // Khaki
474                    purple: Color::Rgb(186, 85, 211),   // Medium Orchid
475                    overlay: Color::Rgb(128, 128, 128), // Gray
476                    subtext: Color::Rgb(192, 192, 192), // Silver
477                    surface: Color::Rgb(70, 70, 70),    // Dark Gray
478                    text: Color::Rgb(245, 245, 245),    // White Smoke
479                    base: Color::Rgb(47, 47, 47),       // Dark Bg
480                },
481            )
482        }
483    }
484
485    pub fn black_and_white() -> Self {
486        Self {
487            icon_mise: Color::Gray,
488            icon_gitmodules: Color::Gray,
489            popup_text: Color::White,
490            list_highlight_bg: Color::White,
491            list_highlight_fg: Color::Gray,
492            list_selected_fg: Color::Black,
493            ..Self::from_palette(
494                "Black & White",
495                Some(Color::Black),
496                Palette {
497                    accent1: Color::White,
498                    accent2: Color::White,
499                    warm: Color::White,
500                    cool: Color::White,
501                    green: Color::White,
502                    yellow: Color::White,
503                    purple: Color::White,
504                    overlay: Color::Gray,
505                    subtext: Color::Gray,
506                    surface: Color::White,
507                    text: Color::White,
508                    base: Color::Black,
509                },
510            )
511        }
512    }
513
514    pub fn matrix() -> Self {
515        let bright = Color::Rgb(0, 255, 65);
516        let dark = Color::Rgb(0, 100, 30);
517        let muted = Color::Rgb(0, 150, 40);
518        let darker = Color::Rgb(0, 200, 50);
519        Self {
520            helpers_colors: Color::Rgb(0, 150, 40), // Muted green
521            popup_text: Color::Rgb(0, 255, 65),     // Bright green
522            icon_maven: Color::Rgb(0, 220, 55),
523            icon_flutter: Color::Rgb(0, 200, 50), // Darker green
524            icon_go: Color::Rgb(0, 180, 45),
525            icon_mise: Color::Rgb(0, 150, 40), // Muted green
526            icon_worktree: darker,
527            icon_worktree_lock: Color::Rgb(0, 120, 35),
528            icon_gitmodules: Color::Rgb(0, 180, 45),
529            icon_folder: Color::Rgb(0, 220, 55),
530            ..Self::from_palette(
531                "Matrix",
532                Some(Color::Rgb(0, 10, 0)),
533                Palette {
534                    accent1: bright,
535                    accent2: darker,
536                    warm: bright,
537                    cool: Color::Rgb(0, 180, 45),
538                    green: bright,
539                    yellow: bright,
540                    purple: darker,
541                    overlay: dark,
542                    subtext: muted,
543                    surface: Color::Rgb(0, 80, 25),
544                    text: bright,
545                    base: Color::Rgb(0, 10, 0),
546                },
547            )
548        }
549    }
550
551    pub fn tron() -> Self {
552        let cyan = Color::Rgb(0, 255, 255);
553        let orange = Color::Rgb(255, 150, 0);
554        let dk_cyan = Color::Rgb(0, 150, 180);
555        Self {
556            search_title: cyan,
557            folder_title: cyan,
558            legends_title: Color::Rgb(0, 200, 220),
559            popup_text: cyan,
560            icon_maven: Color::Rgb(255, 100, 0),
561            icon_go: Color::Rgb(0, 220, 230),
562            icon_python: Color::Rgb(255, 200, 0),
563            icon_worktree: cyan,
564            icon_worktree_lock: dk_cyan,
565            icon_gitmodules: Color::Rgb(0, 200, 220),
566            icon_folder: cyan,
567            ..Self::from_palette(
568                "Tron",
569                Some(Color::Rgb(0, 10, 15)),
570                Palette {
571                    accent1: cyan,
572                    accent2: orange,
573                    warm: orange,
574                    cool: Color::Rgb(0, 220, 230),
575                    green: cyan,
576                    yellow: orange,
577                    purple: Color::Rgb(0, 200, 220),
578                    overlay: dk_cyan,
579                    subtext: Color::Rgb(0, 180, 200),
580                    surface: Color::Rgb(0, 80, 100),
581                    text: cyan,
582                    base: Color::Rgb(0, 10, 15),
583                },
584            )
585        }
586    }
587
588    pub fn all() -> Vec<Theme> {
589        vec![
590            Theme::default_theme(),
591            Theme::catppuccin_mocha(),
592            Theme::catppuccin_macchiato(),
593            Theme::dracula(),
594            Theme::jetbrains_darcula(),
595            Theme::gruvbox_dark(),
596            Theme::nord(),
597            Theme::tokyo_night(),
598            Theme::one_dark_pro(),
599            Theme::everforest(),
600            Theme::synthwave_84(),
601            Theme::oled_true_black(),
602            Theme::silver_gray(),
603            Theme::black_and_white(),
604            Theme::matrix(),
605            Theme::tron(),
606        ]
607    }
608}