1use super::{Color, Theme, darken_color, lighten_color};
2
3impl Theme {
4 pub fn catppuccin_mocha() -> Self {
9 const TEXT: Color = Color::Rgb { r: 0xCD, g: 0xD6, b: 0xF4 };
11 const BASE: Color = Color::Rgb { r: 0x1E, g: 0x1E, b: 0x2E };
12 const ROSEWATER: Color = Color::Rgb { r: 0xF5, g: 0xE0, b: 0xDC };
13 const YELLOW: Color = Color::Rgb { r: 0xF9, g: 0xE2, b: 0xAF };
14 const BLUE: Color = Color::Rgb { r: 0x89, g: 0xB4, b: 0xFA };
15 const PINK: Color = Color::Rgb { r: 0xF5, g: 0xC2, b: 0xE7 };
16 const TEAL: Color = Color::Rgb { r: 0x94, g: 0xE2, b: 0xD5 };
17 const GREEN: Color = Color::Rgb { r: 0xA6, g: 0xE3, b: 0xA1 };
18 const PEACH: Color = Color::Rgb { r: 0xFA, g: 0xB3, b: 0x87 };
19 const RED: Color = Color::Rgb { r: 0xF3, g: 0x8B, b: 0xA8 };
20 const MAUVE: Color = Color::Rgb { r: 0xCB, g: 0xA6, b: 0xF7 };
21 const SURFACE1: Color = Color::Rgb { r: 0x45, g: 0x45, b: 0x45 };
22 const OVERLAY0: Color = Color::Rgb { r: 0x6C, g: 0x70, b: 0x85 };
23
24 Theme::builder()
25 .fg(TEXT)
26 .bg(BASE)
27 .accent(ROSEWATER)
28 .highlight_bg(Color::Rgb { r: 0x31, g: 0x4A, b: 0x56 })
29 .highlight_fg(TEXT)
30 .text_secondary(OVERLAY0)
31 .code_fg(GREEN)
32 .code_bg(SURFACE1)
33 .heading(YELLOW)
34 .link(BLUE)
35 .blockquote(PINK)
36 .muted(TEAL)
37 .success(GREEN)
38 .warning(PEACH)
39 .error(RED)
40 .info(BLUE)
41 .secondary(MAUVE)
42 .sidebar_bg(Color::Rgb { r: 0x24, g: 0x24, b: 0x36 })
43 .diff_added_fg(GREEN)
44 .diff_removed_fg(RED)
45 .diff_added_bg(darken_color(GREEN))
46 .diff_removed_bg(darken_color(RED))
47 .build()
48 .expect("built-in catppuccin_mocha theme has all fields")
49 }
50
51 #[allow(dead_code)]
53 pub fn light() -> Self {
54 const FG: Color = Color::Rgb { r: 0x22, g: 0x22, b: 0x22 };
55 const BG: Color = Color::Rgb { r: 0xFA, g: 0xFA, b: 0xFA };
56 const ACCENT: Color = Color::Rgb { r: 0x00, g: 0x66, b: 0xCC };
57 const GREEN: Color = Color::Rgb { r: 0x22, g: 0x88, b: 0x22 };
58 const RED: Color = Color::Rgb { r: 0xCC, g: 0x22, b: 0x22 };
59 const ORANGE: Color = Color::Rgb { r: 0xCC, g: 0x66, b: 0x00 };
60
61 Theme::builder()
62 .fg(FG)
63 .bg(BG)
64 .accent(ACCENT)
65 .highlight_bg(Color::Rgb { r: 0xDD, g: 0xDD, b: 0xDD })
66 .highlight_fg(FG)
67 .text_secondary(Color::Rgb { r: 0x66, g: 0x66, b: 0x66 })
68 .code_fg(Color::Rgb { r: 0x33, g: 0x66, b: 0x33 })
69 .code_bg(Color::Rgb { r: 0xF0, g: 0xF0, b: 0xF0 })
70 .heading(ACCENT)
71 .link(Color::Rgb { r: 0x00, g: 0x44, b: 0xAA })
72 .blockquote(Color::Rgb { r: 0x66, g: 0x44, b: 0x88 })
73 .muted(Color::Rgb { r: 0x88, g: 0x88, b: 0x88 })
74 .success(GREEN)
75 .warning(ORANGE)
76 .error(RED)
77 .info(ACCENT)
78 .secondary(Color::Rgb { r: 0x66, g: 0x33, b: 0x99 })
79 .sidebar_bg(Color::Rgb { r: 0xF4, g: 0xF4, b: 0xF8 })
80 .diff_added_fg(GREEN)
81 .diff_removed_fg(RED)
82 .diff_added_bg(lighten_color(GREEN))
83 .diff_removed_bg(lighten_color(RED))
84 .build()
85 .expect("built-in light theme has all fields")
86 }
87}
88
89impl Default for Theme {
90 fn default() -> Self {
91 Self::catppuccin_mocha()
92 }
93}