use ratatui::style::Color;
#[derive(Debug, Clone, Copy)]
pub struct Theme {
pub name: &'static str,
#[allow(dead_code)]
pub bg: Color,
pub fg: Color,
pub keyword: Color,
pub string: Color,
pub comment: Color,
pub number: Color,
pub type_name: Color,
pub line_no: Color,
pub editor_bg: Color,
pub status_bg: Color,
pub status_fg: Color,
pub border: Color,
pub selection_bg: Color,
pub search_bg: Color,
pub mode_normal: Color,
pub mode_insert: Color,
pub mode_visual: Color,
pub mode_xlc: Color,
pub completion_bg: Color,
pub completion_selected: Color,
pub completion_border: Color,
pub explorer_bg: Color,
pub explorer_fg: Color,
pub explorer_dir: Color,
pub explorer_selected: Color,
pub terminal_bg: Color,
#[allow(dead_code)]
pub terminal_fg: Color,
#[allow(dead_code)]
pub terminal_prompt: Color,
pub xlc_bg: Color,
pub xlc_fg: Color,
pub xlc_prompt: Color,
pub xlc_border: Color,
pub cursor: Color,
}
static THEMES: &[Theme] = &[OCEAN, MONOKAI, NORD, SOLARIZED, GRUVBOX, EVERFOREST, SAKURA, NEWSPAPER, MONO, MONO_DARK];
pub fn all_themes() -> &'static [Theme] {
THEMES
}
pub fn find(name: &str) -> Option<&'static Theme> {
THEMES
.iter()
.find(|t| t.name.to_lowercase() == name.to_lowercase())
}
pub static OCEAN: Theme = Theme {
name: "ocean",
bg: Color::Rgb(15, 17, 26),
fg: Color::Rgb(200, 210, 220),
keyword: Color::Cyan,
string: Color::Rgb(150, 230, 180),
comment: Color::Rgb(90, 100, 110),
number: Color::Rgb(255, 180, 130),
type_name: Color::Rgb(100, 200, 255),
line_no: Color::Rgb(70, 80, 100),
editor_bg: Color::Rgb(15, 17, 26),
status_bg: Color::Rgb(10, 12, 20),
status_fg: Color::Rgb(180, 190, 200),
border: Color::Rgb(50, 55, 70),
selection_bg: Color::Rgb(40, 50, 80),
search_bg: Color::Rgb(80, 70, 30),
mode_normal: Color::Rgb(60, 100, 200),
mode_insert: Color::Rgb(60, 180, 80),
mode_visual: Color::Rgb(180, 80, 200),
mode_xlc: Color::Rgb(0, 180, 200),
completion_bg: Color::Rgb(25, 28, 38),
completion_selected: Color::Cyan,
completion_border: Color::Cyan,
explorer_bg: Color::Rgb(12, 14, 22),
explorer_fg: Color::Rgb(190, 200, 210),
explorer_dir: Color::Rgb(100, 150, 255),
explorer_selected: Color::Cyan,
terminal_bg: Color::Rgb(8, 12, 8),
terminal_fg: Color::Rgb(180, 255, 180),
terminal_prompt: Color::Green,
xlc_bg: Color::Rgb(18, 20, 28),
xlc_fg: Color::Gray,
xlc_prompt: Color::Green,
xlc_border: Color::Cyan,
cursor: Color::Rgb(200, 200, 220),
};
pub static MONOKAI: Theme = Theme {
name: "monokai",
bg: Color::Rgb(39, 40, 34),
fg: Color::Rgb(248, 248, 242),
keyword: Color::Rgb(249, 38, 114),
string: Color::Rgb(230, 219, 116),
comment: Color::Rgb(117, 113, 94),
number: Color::Rgb(174, 129, 255),
type_name: Color::Rgb(166, 226, 46),
line_no: Color::Rgb(80, 80, 70),
editor_bg: Color::Rgb(39, 40, 34),
status_bg: Color::Rgb(30, 31, 26),
status_fg: Color::Rgb(200, 200, 195),
border: Color::Rgb(70, 70, 60),
selection_bg: Color::Rgb(70, 65, 55),
search_bg: Color::Rgb(100, 90, 40),
mode_normal: Color::Rgb(102, 217, 239),
mode_insert: Color::Rgb(166, 226, 46),
mode_visual: Color::Rgb(174, 129, 255),
mode_xlc: Color::Rgb(249, 38, 114),
completion_bg: Color::Rgb(45, 46, 40),
completion_selected: Color::Rgb(249, 38, 114),
completion_border: Color::Rgb(249, 38, 114),
explorer_bg: Color::Rgb(32, 33, 28),
explorer_fg: Color::Rgb(240, 240, 235),
explorer_dir: Color::Rgb(102, 217, 239),
explorer_selected: Color::Rgb(249, 38, 114),
terminal_bg: Color::Rgb(30, 31, 26),
terminal_fg: Color::Rgb(230, 219, 116),
terminal_prompt: Color::Rgb(166, 226, 46),
xlc_bg: Color::Rgb(35, 36, 30),
xlc_fg: Color::Rgb(180, 180, 170),
xlc_prompt: Color::Rgb(166, 226, 46),
xlc_border: Color::Rgb(249, 38, 114),
cursor: Color::Rgb(248, 248, 242),
};
pub static NORD: Theme = Theme {
name: "nord",
bg: Color::Rgb(46, 52, 64),
fg: Color::Rgb(216, 222, 233),
keyword: Color::Rgb(129, 161, 193),
string: Color::Rgb(163, 190, 140),
comment: Color::Rgb(97, 110, 124),
number: Color::Rgb(180, 142, 173),
type_name: Color::Rgb(143, 188, 187),
line_no: Color::Rgb(76, 86, 106),
editor_bg: Color::Rgb(46, 52, 64),
status_bg: Color::Rgb(36, 41, 51),
status_fg: Color::Rgb(200, 207, 218),
border: Color::Rgb(67, 76, 94),
selection_bg: Color::Rgb(60, 68, 88),
search_bg: Color::Rgb(100, 90, 50),
mode_normal: Color::Rgb(94, 129, 172),
mode_insert: Color::Rgb(163, 190, 140),
mode_visual: Color::Rgb(180, 142, 173),
mode_xlc: Color::Rgb(136, 192, 208),
completion_bg: Color::Rgb(52, 58, 70),
completion_selected: Color::Rgb(129, 161, 193),
completion_border: Color::Rgb(129, 161, 193),
explorer_bg: Color::Rgb(40, 45, 56),
explorer_fg: Color::Rgb(210, 216, 228),
explorer_dir: Color::Rgb(94, 129, 172),
explorer_selected: Color::Rgb(129, 161, 193),
terminal_bg: Color::Rgb(35, 40, 50),
terminal_fg: Color::Rgb(163, 190, 140),
terminal_prompt: Color::Rgb(143, 188, 187),
xlc_bg: Color::Rgb(42, 48, 58),
xlc_fg: Color::Rgb(180, 187, 200),
xlc_prompt: Color::Rgb(163, 190, 140),
xlc_border: Color::Rgb(129, 161, 193),
cursor: Color::Rgb(216, 222, 233),
};
pub static SOLARIZED: Theme = Theme {
name: "solarized",
bg: Color::Rgb(0, 43, 54),
fg: Color::Rgb(131, 148, 150),
keyword: Color::Rgb(38, 139, 210),
string: Color::Rgb(42, 161, 152),
comment: Color::Rgb(88, 110, 117),
number: Color::Rgb(203, 75, 22),
type_name: Color::Rgb(181, 137, 0),
line_no: Color::Rgb(50, 75, 85),
editor_bg: Color::Rgb(0, 43, 54),
status_bg: Color::Rgb(0, 35, 44),
status_fg: Color::Rgb(120, 135, 138),
border: Color::Rgb(0, 55, 70),
selection_bg: Color::Rgb(7, 54, 66),
search_bg: Color::Rgb(80, 60, 20),
mode_normal: Color::Rgb(38, 139, 210),
mode_insert: Color::Rgb(133, 153, 0),
mode_visual: Color::Rgb(211, 54, 130),
mode_xlc: Color::Rgb(42, 161, 152),
completion_bg: Color::Rgb(5, 48, 60),
completion_selected: Color::Rgb(38, 139, 210),
completion_border: Color::Rgb(38, 139, 210),
explorer_bg: Color::Rgb(0, 38, 48),
explorer_fg: Color::Rgb(125, 140, 143),
explorer_dir: Color::Rgb(38, 139, 210),
explorer_selected: Color::Rgb(133, 153, 0),
terminal_bg: Color::Rgb(0, 35, 44),
terminal_fg: Color::Rgb(133, 153, 0),
terminal_prompt: Color::Rgb(42, 161, 152),
xlc_bg: Color::Rgb(0, 40, 50),
xlc_fg: Color::Rgb(110, 125, 128),
xlc_prompt: Color::Rgb(133, 153, 0),
xlc_border: Color::Rgb(38, 139, 210),
cursor: Color::Rgb(131, 148, 150),
};
pub static GRUVBOX: Theme = Theme {
name: "gruvbox",
bg: Color::Rgb(40, 40, 40),
fg: Color::Rgb(235, 219, 178),
keyword: Color::Rgb(211, 134, 155),
string: Color::Rgb(184, 187, 38),
comment: Color::Rgb(146, 131, 116),
number: Color::Rgb(177, 98, 134),
type_name: Color::Rgb(142, 192, 124),
line_no: Color::Rgb(80, 73, 64),
editor_bg: Color::Rgb(40, 40, 40),
status_bg: Color::Rgb(32, 32, 32),
status_fg: Color::Rgb(220, 205, 165),
border: Color::Rgb(60, 56, 50),
selection_bg: Color::Rgb(60, 56, 50),
search_bg: Color::Rgb(90, 80, 40),
mode_normal: Color::Rgb(69, 133, 136),
mode_insert: Color::Rgb(184, 187, 38),
mode_visual: Color::Rgb(211, 134, 155),
mode_xlc: Color::Rgb(131, 165, 152),
completion_bg: Color::Rgb(48, 48, 48),
completion_selected: Color::Rgb(254, 128, 25),
completion_border: Color::Rgb(254, 128, 25),
explorer_bg: Color::Rgb(34, 34, 34),
explorer_fg: Color::Rgb(228, 212, 170),
explorer_dir: Color::Rgb(69, 133, 136),
explorer_selected: Color::Rgb(254, 128, 25),
terminal_bg: Color::Rgb(30, 30, 30),
terminal_fg: Color::Rgb(184, 187, 38),
terminal_prompt: Color::Rgb(142, 192, 124),
xlc_bg: Color::Rgb(36, 36, 36),
xlc_fg: Color::Rgb(190, 178, 150),
xlc_prompt: Color::Rgb(184, 187, 38),
xlc_border: Color::Rgb(254, 128, 25),
cursor: Color::Rgb(235, 219, 178),
};
pub static EVERFOREST: Theme = Theme {
name: "everforest",
bg: Color::Rgb(39, 46, 44),
fg: Color::Rgb(211, 198, 170),
keyword: Color::Rgb(230, 126, 128),
string: Color::Rgb(167, 192, 128),
comment: Color::Rgb(134, 140, 122),
number: Color::Rgb(223, 164, 126),
type_name: Color::Rgb(130, 202, 157),
line_no: Color::Rgb(75, 84, 68),
editor_bg: Color::Rgb(39, 46, 44),
status_bg: Color::Rgb(31, 37, 35),
status_fg: Color::Rgb(200, 188, 160),
border: Color::Rgb(58, 66, 60),
selection_bg: Color::Rgb(55, 64, 58),
search_bg: Color::Rgb(90, 80, 40),
mode_normal: Color::Rgb(130, 170, 162),
mode_insert: Color::Rgb(167, 192, 128),
mode_visual: Color::Rgb(223, 164, 126),
mode_xlc: Color::Rgb(131, 180, 175),
completion_bg: Color::Rgb(46, 52, 50),
completion_selected: Color::Rgb(230, 126, 128),
completion_border: Color::Rgb(230, 126, 128),
explorer_bg: Color::Rgb(33, 40, 38),
explorer_fg: Color::Rgb(205, 193, 165),
explorer_dir: Color::Rgb(130, 170, 162),
explorer_selected: Color::Rgb(230, 126, 128),
terminal_bg: Color::Rgb(28, 35, 33),
terminal_fg: Color::Rgb(167, 192, 128),
terminal_prompt: Color::Rgb(130, 202, 157),
xlc_bg: Color::Rgb(35, 41, 39),
xlc_fg: Color::Rgb(185, 173, 148),
xlc_prompt: Color::Rgb(167, 192, 128),
xlc_border: Color::Rgb(230, 126, 128),
cursor: Color::Rgb(211, 198, 170),
};
pub static SAKURA: Theme = Theme {
name: "sakura",
bg: Color::Rgb(255, 240, 245),
fg: Color::Rgb(60, 20, 40),
keyword: Color::Rgb(190, 60, 100),
string: Color::Rgb(100, 160, 120),
comment: Color::Rgb(200, 180, 190),
number: Color::Rgb(180, 100, 80),
type_name: Color::Rgb(160, 100, 140),
line_no: Color::Rgb(200, 170, 185),
editor_bg: Color::Rgb(255, 240, 245),
status_bg: Color::Rgb(255, 225, 235),
status_fg: Color::Rgb(60, 20, 40),
border: Color::Rgb(240, 200, 215),
selection_bg: Color::Rgb(255, 210, 225),
search_bg: Color::Rgb(255, 230, 200),
mode_normal: Color::Rgb(219, 112, 147),
mode_insert: Color::Rgb(150, 190, 140),
mode_visual: Color::Rgb(200, 150, 180),
mode_xlc: Color::Rgb(180, 140, 160),
completion_bg: Color::Rgb(255, 235, 242),
completion_selected: Color::Rgb(219, 112, 147),
completion_border: Color::Rgb(219, 112, 147),
explorer_bg: Color::Rgb(255, 230, 238),
explorer_fg: Color::Rgb(60, 20, 40),
explorer_dir: Color::Rgb(200, 130, 160),
explorer_selected: Color::Rgb(219, 112, 147),
terminal_bg: Color::Rgb(255, 235, 242),
terminal_fg: Color::Rgb(60, 20, 40),
terminal_prompt: Color::Rgb(219, 112, 147),
xlc_bg: Color::Rgb(255, 235, 242),
xlc_fg: Color::Rgb(60, 20, 40),
xlc_prompt: Color::Rgb(219, 112, 147),
xlc_border: Color::Rgb(219, 112, 147),
cursor: Color::Rgb(136, 34, 56),
};
pub static NEWSPAPER: Theme = Theme {
name: "newspaper",
bg: Color::Rgb(255, 243, 229),
fg: Color::Rgb(125, 130, 172),
keyword: Color::Rgb(125, 130, 172),
string: Color::Rgb(140, 145, 185),
comment: Color::Rgb(190, 185, 195),
number: Color::Rgb(150, 140, 175),
type_name: Color::Rgb(172, 176, 214),
line_no: Color::Rgb(200, 195, 200),
editor_bg: Color::Rgb(255, 243, 229),
status_bg: Color::Rgb(254, 249, 244),
status_fg: Color::Rgb(125, 130, 172),
border: Color::Rgb(228, 223, 225),
selection_bg: Color::Rgb(228, 223, 225),
search_bg: Color::Rgb(220, 215, 210),
mode_normal: Color::Rgb(125, 130, 172),
mode_insert: Color::Rgb(172, 176, 214),
mode_visual: Color::Rgb(140, 135, 175),
mode_xlc: Color::Rgb(172, 176, 214),
completion_bg: Color::Rgb(254, 249, 244),
completion_selected: Color::Rgb(125, 130, 172),
completion_border: Color::Rgb(172, 176, 214),
explorer_bg: Color::Rgb(254, 249, 244),
explorer_fg: Color::Rgb(125, 130, 172),
explorer_dir: Color::Rgb(125, 130, 172),
explorer_selected: Color::Rgb(172, 176, 214),
terminal_bg: Color::Rgb(254, 249, 244),
terminal_fg: Color::Rgb(125, 130, 172),
terminal_prompt: Color::Rgb(172, 176, 214),
xlc_bg: Color::Rgb(254, 249, 244),
xlc_fg: Color::Rgb(125, 130, 172),
xlc_prompt: Color::Rgb(172, 176, 214),
xlc_border: Color::Rgb(228, 223, 225),
cursor: Color::Rgb(125, 130, 172),
};
pub static MONO: Theme = Theme {
name: "mono",
bg: Color::Rgb(255, 255, 255),
fg: Color::Rgb(30, 30, 30),
keyword: Color::Rgb(0, 0, 0),
string: Color::Rgb(80, 80, 80),
comment: Color::Rgb(170, 170, 170),
number: Color::Rgb(50, 50, 50),
type_name: Color::Rgb(60, 60, 60),
line_no: Color::Rgb(190, 190, 190),
editor_bg: Color::Rgb(255, 255, 255),
status_bg: Color::Rgb(245, 245, 245),
status_fg: Color::Rgb(30, 30, 30),
border: Color::Rgb(220, 220, 220),
selection_bg: Color::Rgb(230, 230, 230),
search_bg: Color::Rgb(255, 255, 200),
mode_normal: Color::Rgb(60, 60, 60),
mode_insert: Color::Rgb(120, 120, 120),
mode_visual: Color::Rgb(80, 80, 80),
mode_xlc: Color::Rgb(100, 100, 100),
completion_bg: Color::Rgb(250, 250, 250),
completion_selected: Color::Rgb(60, 60, 60),
completion_border: Color::Rgb(200, 200, 200),
explorer_bg: Color::Rgb(248, 248, 248),
explorer_fg: Color::Rgb(30, 30, 30),
explorer_dir: Color::Rgb(50, 50, 50),
explorer_selected: Color::Rgb(220, 220, 220),
terminal_bg: Color::Rgb(250, 250, 250),
terminal_fg: Color::Rgb(30, 30, 30),
terminal_prompt: Color::Rgb(80, 80, 80),
xlc_bg: Color::Rgb(248, 248, 248),
xlc_fg: Color::Rgb(50, 50, 50),
xlc_prompt: Color::Rgb(80, 80, 80),
xlc_border: Color::Rgb(200, 200, 200),
cursor: Color::Rgb(0, 0, 0),
};
pub static MONO_DARK: Theme = Theme {
name: "mono_dark",
bg: Color::Rgb(20, 20, 20),
fg: Color::Rgb(230, 230, 230),
keyword: Color::Rgb(255, 255, 255),
string: Color::Rgb(190, 190, 190),
comment: Color::Rgb(100, 100, 100),
number: Color::Rgb(210, 210, 210),
type_name: Color::Rgb(200, 200, 200),
line_no: Color::Rgb(70, 70, 70),
editor_bg: Color::Rgb(20, 20, 20),
status_bg: Color::Rgb(28, 28, 28),
status_fg: Color::Rgb(230, 230, 230),
border: Color::Rgb(50, 50, 50),
selection_bg: Color::Rgb(60, 60, 60),
search_bg: Color::Rgb(50, 50, 30),
mode_normal: Color::Rgb(200, 200, 200),
mode_insert: Color::Rgb(150, 150, 150),
mode_visual: Color::Rgb(180, 180, 180),
mode_xlc: Color::Rgb(170, 170, 170),
completion_bg: Color::Rgb(30, 30, 30),
completion_selected: Color::Rgb(200, 200, 200),
completion_border: Color::Rgb(80, 80, 80),
explorer_bg: Color::Rgb(16, 16, 16),
explorer_fg: Color::Rgb(230, 230, 230),
explorer_dir: Color::Rgb(210, 210, 210),
explorer_selected: Color::Rgb(60, 60, 60),
terminal_bg: Color::Rgb(24, 24, 24),
terminal_fg: Color::Rgb(230, 230, 230),
terminal_prompt: Color::Rgb(190, 190, 190),
xlc_bg: Color::Rgb(26, 26, 26),
xlc_fg: Color::Rgb(210, 210, 210),
xlc_prompt: Color::Rgb(190, 190, 190),
xlc_border: Color::Rgb(70, 70, 70),
cursor: Color::Rgb(255, 255, 255),
};