Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
293 changes: 281 additions & 12 deletions late-ssh/src/app/common/theme.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,14 @@ pub enum ThemeKind {
Monokai = 62,
SolarizedLight = 63,
SolarizedDark = 64,
Crush = 65,
MonoInk = 65,
MonoDim = 66,
MonoFog = 67,
MonoInkSemantic = 68,
MonoDimSemantic = 69,
MonoFogSemantic = 70,
DeepSea = 71,
Crush = 72,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
Expand All @@ -87,10 +94,11 @@ pub enum ThemeGroup {
Crt,
Seasons,
Games,
Monochrome,
}

impl ThemeGroup {
pub const ALL: [ThemeGroup; 14] = [
pub const ALL: [ThemeGroup; 15] = [
ThemeGroup::Core,
ThemeGroup::Catppuccin,
ThemeGroup::Coffee,
Expand All @@ -105,6 +113,7 @@ impl ThemeGroup {
ThemeGroup::Crt,
ThemeGroup::Seasons,
ThemeGroup::Games,
ThemeGroup::Monochrome,
];

pub fn label(self) -> &'static str {
Expand All @@ -123,6 +132,7 @@ impl ThemeGroup {
ThemeGroup::Crt => "CRT",
ThemeGroup::Seasons => "4 Seasons",
ThemeGroup::Games => "Games",
ThemeGroup::Monochrome => "Monochrome",
}
}

Expand Down Expand Up @@ -304,6 +314,24 @@ pub const OPTIONS: &[ThemeOption] = &[
group: ThemeGroup::Ports,
id: "monokai",
label: "Monokai",
},
ThemeOption {
kind: ThemeKind::SolarizedLight,
group: ThemeGroup::Ports,
id: "solarized-light",
label: "Solarized Light",
},
ThemeOption {
kind: ThemeKind::SolarizedDark,
group: ThemeGroup::Ports,
id: "solarized-dark",
label: "Solarized Dark",
},
ThemeOption {
kind: ThemeKind::DeepSea,
group: ThemeGroup::Ports,
id: "deepsea",
label: "Deep Sea",
},
ThemeOption {
kind: ThemeKind::CopperFresh,
Expand Down Expand Up @@ -564,16 +592,40 @@ pub const OPTIONS: &[ThemeOption] = &[
label: "Cyberpunk 2077",
},
ThemeOption {
kind: ThemeKind::SolarizedLight,
group: ThemeGroup::Ports,
id: "solarized_light",
label: "Solarized Light",
kind: ThemeKind::MonoInk,
group: ThemeGroup::Monochrome,
id: "mono-ink",
label: "Mono Ink",
},
ThemeOption {
kind: ThemeKind::MonoDim,
group: ThemeGroup::Monochrome,
id: "mono-dim",
label: "Mono Dim",
},
ThemeOption {
kind: ThemeKind::MonoFog,
group: ThemeGroup::Monochrome,
id: "mono-fog",
label: "Mono Fog",
},
ThemeOption {
kind: ThemeKind::SolarizedDark,
group: ThemeGroup::Ports,
id: "solarized_dark",
label: "Solarized Dark",
kind: ThemeKind::MonoInkSemantic,
group: ThemeGroup::Monochrome,
id: "mono-ink-semantic",
label: "Mono Ink Semantic",
},
ThemeOption {
kind: ThemeKind::MonoDimSemantic,
group: ThemeGroup::Monochrome,
id: "mono-dim-semantic",
label: "Mono Dim Semantic",
},
ThemeOption {
kind: ThemeKind::MonoFogSemantic,
group: ThemeGroup::Monochrome,
id: "mono-fog-semantic",
label: "Mono Fog Semantic",
},
ThemeOption {
kind: ThemeKind::Crush,
Expand Down Expand Up @@ -2506,13 +2558,13 @@ const PALETTE_SOLARIZED_LIGHT: Palette = Palette {
};

const PALETTE_SOLARIZED_DARK: Palette = Palette {
bg_canvas: Color::Rgb(0, 43, 54),
bg_canvas: Color::Rgb(0, 33, 44),
bg_selection: Color::Rgb(7, 54, 66),
bg_highlight: Color::Rgb(7, 54, 66),
border_dim: Color::Rgb(7, 54, 66),
border: Color::Rgb(88, 110, 117),
border_active: Color::Rgb(38, 139, 210),
text_faint: Color::Rgb(7, 54, 66),
text_faint: Color::Rgb(27, 74, 86),
text_dim: Color::Rgb(88, 110, 117),
text_muted: Color::Rgb(101, 123, 131),
text: Color::Rgb(131, 148, 150),
Expand All @@ -2535,6 +2587,214 @@ const PALETTE_SOLARIZED_DARK: Palette = Palette {
badge_gold: Color::Rgb(181, 137, 0),
};

const PALETTE_MONO_INK: Palette = Palette {
bg_canvas: Color::Rgb(0, 0, 0),
bg_selection: Color::Rgb(60, 60, 60),
bg_highlight: Color::Rgb(20, 20, 20),
border_dim: Color::Rgb(80, 80, 80),
border: Color::Rgb(255, 255, 255),
border_active: Color::Rgb(255, 255, 255),
text_faint: Color::Rgb(100, 100, 100),
text_dim: Color::Rgb(200, 200, 200),
text_muted: Color::Rgb(240, 240, 240),
text: Color::Rgb(255, 255, 255),
text_bright: Color::Rgb(255, 255, 255),
amber: Color::Rgb(255, 255, 255),
amber_dim: Color::Rgb(150, 150, 150),
amber_glow: Color::Rgb(255, 255, 255),
chat_body: Color::Rgb(255, 255, 255),
chat_author: Color::Rgb(255, 255, 255),
mention: Color::Rgb(255, 255, 255),
success: Color::Rgb(255, 255, 255),
error: Color::Rgb(255, 255, 255),
bot: Color::Rgb(255, 255, 255),
bonsai_sprout: Color::Rgb(255, 255, 255),
bonsai_leaf: Color::Rgb(180, 180, 180),
bonsai_canopy: Color::Rgb(60, 60, 60),
bonsai_bloom: Color::Rgb(255, 255, 255),
badge_bronze: Color::Rgb(100, 100, 100),
badge_silver: Color::Rgb(180, 180, 180),
badge_gold: Color::Rgb(255, 255, 255),
};

const PALETTE_MONO_DIM: Palette = Palette {
bg_canvas: Color::Rgb(28, 28, 28),
bg_selection: Color::Rgb(50, 50, 50),
bg_highlight: Color::Rgb(22, 22, 22),
border_dim: Color::Rgb(65, 65, 65),
border: Color::Rgb(140, 140, 140),
border_active: Color::Rgb(210, 210, 210),
text_faint: Color::Rgb(90, 90, 90),
text_dim: Color::Rgb(150, 150, 150),
text_muted: Color::Rgb(190, 190, 190),
text: Color::Rgb(210, 210, 210),
text_bright: Color::Rgb(230, 230, 230),
amber: Color::Rgb(180, 180, 180),
amber_dim: Color::Rgb(110, 110, 110),
amber_glow: Color::Rgb(200, 200, 200),
chat_body: Color::Rgb(210, 210, 210),
chat_author: Color::Rgb(160, 160, 160),
mention: Color::Rgb(230, 230, 230),
success: Color::Rgb(210, 210, 210),
error: Color::Rgb(210, 210, 210),
bot: Color::Rgb(160, 160, 160),
bonsai_sprout: Color::Rgb(140, 140, 140),
bonsai_leaf: Color::Rgb(110, 110, 110),
bonsai_canopy: Color::Rgb(50, 50, 50),
bonsai_bloom: Color::Rgb(210, 210, 210),
badge_bronze: Color::Rgb(90, 90, 90),
badge_silver: Color::Rgb(150, 150, 150),
badge_gold: Color::Rgb(210, 210, 210),
};

const PALETTE_MONO_FOG: Palette = Palette {
bg_canvas: Color::Rgb(35, 35, 35),
bg_selection: Color::Rgb(55, 55, 55),
bg_highlight: Color::Rgb(30, 30, 30),
border_dim: Color::Rgb(60, 60, 60),
border: Color::Rgb(90, 90, 90),
border_active: Color::Rgb(130, 130, 130),
text_faint: Color::Rgb(70, 70, 70),
text_dim: Color::Rgb(100, 100, 100),
text_muted: Color::Rgb(120, 120, 120),
text: Color::Rgb(140, 140, 140),
text_bright: Color::Rgb(160, 160, 160),
amber: Color::Rgb(120, 120, 120),
amber_dim: Color::Rgb(80, 80, 80),
amber_glow: Color::Rgb(130, 130, 130),
chat_body: Color::Rgb(140, 140, 140),
chat_author: Color::Rgb(110, 110, 110),
mention: Color::Rgb(160, 160, 160),
success: Color::Rgb(120, 120, 120),
error: Color::Rgb(120, 120, 120),
bot: Color::Rgb(110, 110, 110),
bonsai_sprout: Color::Rgb(100, 100, 100),
bonsai_leaf: Color::Rgb(80, 80, 80),
bonsai_canopy: Color::Rgb(50, 50, 50),
bonsai_bloom: Color::Rgb(140, 140, 140),
badge_bronze: Color::Rgb(70, 70, 70),
badge_silver: Color::Rgb(100, 100, 100),
badge_gold: Color::Rgb(140, 140, 140),
};

const PALETTE_MONO_INK_SEMANTIC: Palette = Palette {
bg_canvas: Color::Rgb(0, 0, 0),
bg_selection: Color::Rgb(60, 60, 60),
bg_highlight: Color::Rgb(20, 20, 20),
border_dim: Color::Rgb(80, 80, 80),
border: Color::Rgb(255, 255, 255),
border_active: Color::Rgb(255, 255, 255),
text_faint: Color::Rgb(100, 100, 100),
text_dim: Color::Rgb(200, 200, 200),
text_muted: Color::Rgb(240, 240, 240),
text: Color::Rgb(255, 255, 255),
text_bright: Color::Rgb(255, 255, 255),
amber: Color::Rgb(255, 255, 255),
amber_dim: Color::Rgb(150, 150, 150),
amber_glow: Color::Rgb(255, 255, 255),
chat_body: Color::Rgb(255, 255, 255),
chat_author: Color::Rgb(255, 255, 255),
mention: Color::Rgb(255, 255, 255),
success: Color::Rgb(0, 255, 120),
error: Color::Rgb(255, 50, 50),
bot: Color::Rgb(180, 160, 255),
bonsai_sprout: Color::Rgb(0, 255, 120),
bonsai_leaf: Color::Rgb(180, 180, 180),
bonsai_canopy: Color::Rgb(60, 60, 60),
bonsai_bloom: Color::Rgb(255, 255, 255),
badge_bronze: Color::Rgb(100, 100, 100),
badge_silver: Color::Rgb(180, 180, 180),
badge_gold: Color::Rgb(255, 255, 255),
};

const PALETTE_MONO_DIM_SEMANTIC: Palette = Palette {
bg_canvas: Color::Rgb(28, 28, 28),
bg_selection: Color::Rgb(50, 50, 50),
bg_highlight: Color::Rgb(22, 22, 22),
border_dim: Color::Rgb(65, 65, 65),
border: Color::Rgb(140, 140, 140),
border_active: Color::Rgb(210, 210, 210),
text_faint: Color::Rgb(90, 90, 90),
text_dim: Color::Rgb(150, 150, 150),
text_muted: Color::Rgb(190, 190, 190),
text: Color::Rgb(210, 210, 210),
text_bright: Color::Rgb(230, 230, 230),
amber: Color::Rgb(180, 180, 180),
amber_dim: Color::Rgb(110, 110, 110),
amber_glow: Color::Rgb(200, 200, 200),
chat_body: Color::Rgb(210, 210, 210),
chat_author: Color::Rgb(140, 160, 180),
mention: Color::Rgb(160, 180, 160),
success: Color::Rgb(140, 180, 140),
error: Color::Rgb(180, 140, 140),
bot: Color::Rgb(150, 140, 180),
bonsai_sprout: Color::Rgb(140, 180, 140),
bonsai_leaf: Color::Rgb(110, 110, 110),
bonsai_canopy: Color::Rgb(50, 50, 50),
bonsai_bloom: Color::Rgb(210, 210, 210),
badge_bronze: Color::Rgb(150, 130, 110),
badge_silver: Color::Rgb(150, 150, 150),
badge_gold: Color::Rgb(180, 180, 140),
};

const PALETTE_MONO_FOG_SEMANTIC: Palette = Palette {
bg_canvas: Color::Rgb(35, 35, 35),
bg_selection: Color::Rgb(55, 55, 55),
bg_highlight: Color::Rgb(30, 30, 30),
border_dim: Color::Rgb(60, 60, 60),
border: Color::Rgb(90, 90, 90),
border_active: Color::Rgb(130, 130, 130),
text_faint: Color::Rgb(70, 70, 70),
text_dim: Color::Rgb(100, 100, 100),
text_muted: Color::Rgb(120, 120, 120),
text: Color::Rgb(140, 140, 140),
text_bright: Color::Rgb(160, 160, 160),
amber: Color::Rgb(120, 120, 120),
amber_dim: Color::Rgb(80, 80, 80),
amber_glow: Color::Rgb(130, 130, 130),
chat_body: Color::Rgb(140, 140, 140),
chat_author: Color::Rgb(110, 115, 120),
mention: Color::Rgb(130, 135, 130),
success: Color::Rgb(115, 130, 115),
error: Color::Rgb(130, 115, 115),
bot: Color::Rgb(120, 115, 130),
bonsai_sprout: Color::Rgb(115, 130, 115),
bonsai_leaf: Color::Rgb(80, 80, 80),
bonsai_canopy: Color::Rgb(50, 50, 50),
bonsai_bloom: Color::Rgb(140, 140, 140),
badge_bronze: Color::Rgb(100, 95, 90),
badge_silver: Color::Rgb(100, 100, 100),
badge_gold: Color::Rgb(110, 110, 100),
};

const PALETTE_DEEP_SEA: Palette = Palette {
bg_canvas: Color::Rgb(11, 19, 26),
bg_selection: Color::Rgb(27, 45, 62),
bg_highlight: Color::Rgb(15, 27, 36),
border_dim: Color::Rgb(34, 58, 77),
border: Color::Rgb(56, 182, 255),
border_active: Color::Rgb(255, 255, 255),
text_faint: Color::Rgb(66, 103, 128),
text_dim: Color::Rgb(130, 170, 200),
text_muted: Color::Rgb(200, 220, 240),
text: Color::Rgb(230, 240, 255),
text_bright: Color::Rgb(255, 255, 255),
amber: Color::Rgb(137, 221, 255),
amber_dim: Color::Rgb(0, 150, 200),
amber_glow: Color::Rgb(137, 221, 255),
chat_body: Color::Rgb(230, 240, 255),
chat_author: Color::Rgb(56, 182, 255),
mention: Color::Rgb(0, 255, 204),
success: Color::Rgb(0, 255, 204),
error: Color::Rgb(255, 83, 112),
bot: Color::Rgb(199, 146, 234),
bonsai_sprout: Color::Rgb(0, 255, 204),
bonsai_leaf: Color::Rgb(56, 182, 255),
bonsai_canopy: Color::Rgb(199, 146, 234),
bonsai_bloom: Color::Rgb(255, 255, 255),
badge_bronze: Color::Rgb(247, 140, 108),
badge_silver: Color::Rgb(200, 220, 240),
badge_gold: Color::Rgb(137, 221, 255),
// Ported from Charmbracelet Crush's default Charmtone Pantera theme.
// Credit: Charmbracelet — https://github.com/charmbracelet/crush/blob/main/internal/ui/styles/themes.go
const PALETTE_PANTERA: Palette = Palette {
Expand Down Expand Up @@ -2648,6 +2908,9 @@ fn palette_for_kind(kind: ThemeKind) -> &'static Palette {
ThemeKind::Nordic => &PALETTE_NORDIC,
ThemeKind::Bamboo => &PALETTE_BAMBOO,
ThemeKind::Monokai => &PALETTE_MONOKAI,
ThemeKind::SolarizedLight => &PALETTE_SOLARIZED_LIGHT,
ThemeKind::SolarizedDark => &PALETTE_SOLARIZED_DARK,
ThemeKind::DeepSea => &PALETTE_DEEP_SEA,
ThemeKind::CopperFresh => &PALETTE_COPPER_FRESH,
ThemeKind::ExposedCopper => &PALETTE_EXPOSED_COPPER,
ThemeKind::WeatheredCopper => &PALETTE_WEATHERED_COPPER,
Expand Down Expand Up @@ -2692,6 +2955,12 @@ fn palette_for_kind(kind: ThemeKind) -> &'static Palette {
ThemeKind::Winter => &PALETTE_WINTER,
ThemeKind::Cyberpunk2077 => &PALETTE_CYBERPUNK2077,
ThemeKind::Late => &PALETTE_LATE,
ThemeKind::MonoInk => &PALETTE_MONO_INK,
ThemeKind::MonoDim => &PALETTE_MONO_DIM,
ThemeKind::MonoFog => &PALETTE_MONO_FOG,
ThemeKind::MonoInkSemantic => &PALETTE_MONO_INK_SEMANTIC,
ThemeKind::MonoDimSemantic => &PALETTE_MONO_DIM_SEMANTIC,
ThemeKind::MonoFogSemantic => &PALETTE_MONO_FOG_SEMANTIC,
ThemeKind::SolarizedLight => &PALETTE_SOLARIZED_LIGHT,
ThemeKind::SolarizedDark => &PALETTE_SOLARIZED_DARK,
ThemeKind::Crush => &PALETTE_PANTERA,
Expand Down
4 changes: 3 additions & 1 deletion late-ssh/src/app/icon_picker/catalog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ const COMMON_KAOMOJI: &[(&str, &str)] = &[
("(>⩊<)", "excited laugh"),
("(„• ᴗ •„)", "cute blush"),
("(* ̄▽ ̄)b", "thumbs up good"),
("¯\\_(ツ)_/¯", "shruggie shrug"),
("(´,,•ω•,,)♡", "love affection"),
("(⁄ ⁄•⁄ω⁄•⁄ ⁄)", "blush shy"),
("(⁄ ⁄>⁄ ▽ ⁄<⁄ ⁄)", "embarrassed flustered"),
Expand Down Expand Up @@ -102,6 +101,9 @@ const COMMON_KAOMOJI: &[(&str, &str)] = &[
("ꉂ(˵˃ ᗜ ˂˵)", "happy laugh"),
("(˶°▄°˶)", "skeptical"),
("(。ᵕ °ㅁ° ).ᐟ.ᐟ.ᐟ", "shocked"),
("ᕙ( •̀ ᗜ •́ )ᕗ", "strong flex"),
("✧。◝(ᵔᗜᵔ)◜✧*。", "happy excited"),
("♡⸜(ˆᗜˆ˵ )⸝♡", "love"),
];

const COMMON_NERD_NAMES: &[&str] = &[
Expand Down