1use serde::Deserialize;
2
3#[derive(Debug, Clone)]
4pub struct Theme {
5 pub accent: (u8, u8, u8),
6 pub bg: (u8, u8, u8),
7 pub text: (u8, u8, u8),
8 pub muted: (u8, u8, u8),
9 pub dim: (u8, u8, u8),
10 pub green: (u8, u8, u8),
11 pub yellow: (u8, u8, u8),
12 pub red: (u8, u8, u8),
13 pub blue: (u8, u8, u8),
14}
15
16#[derive(Debug, Clone, Deserialize, Default)]
17pub enum ThemeName {
18 #[default]
19 #[serde(rename = "shipd")]
20 Shipd,
21 #[serde(rename = "catppuccin")]
22 Catppuccin,
23 #[serde(rename = "tokyo-night")]
24 TokyoNight,
25}
26
27impl ThemeName {
28 pub fn from_str(s: &str) -> Self {
29 match s {
30 "catppuccin" => ThemeName::Catppuccin,
31 "tokyo-night" => ThemeName::TokyoNight,
32 _ => ThemeName::Shipd,
33 }
34 }
35
36 pub fn to_theme(&self) -> Theme {
37 match self {
38 ThemeName::Shipd => Theme::shipd(),
39 ThemeName::Catppuccin => Theme::catppuccin(),
40 ThemeName::TokyoNight => Theme::tokyo_night(),
41 }
42 }
43}
44
45impl Theme {
46 pub fn shipd() -> Self {
47 Theme {
48 accent: (34, 211, 238),
49 bg: (10, 15, 28),
50 text: (220, 220, 230),
51 muted: (140, 140, 160),
52 dim: (80, 80, 100),
53 green: (80, 220, 120),
54 yellow: (250, 200, 60),
55 red: (250, 80, 80),
56 blue: (100, 160, 255),
57 }
58 }
59
60 pub fn catppuccin() -> Self {
61 Theme {
63 accent: (148, 226, 213), bg: (30, 30, 46), text: (205, 214, 244), muted: (166, 173, 200), dim: (69, 71, 90), green: (166, 227, 161), yellow: (249, 226, 175), red: (243, 139, 168), blue: (137, 180, 250), }
73 }
74
75 pub fn tokyo_night() -> Self {
76 Theme {
77 accent: (125, 207, 255), bg: (26, 27, 38), text: (192, 202, 245), muted: (86, 95, 137), dim: (59, 66, 97), green: (158, 206, 106), yellow: (224, 175, 104), red: (247, 118, 142), blue: (122, 162, 247), }
87 }
88}