diff --git a/late-ssh/src/app/common/theme.rs b/late-ssh/src/app/common/theme.rs index 132b5ebd..e07b139e 100644 --- a/late-ssh/src/app/common/theme.rs +++ b/late-ssh/src/app/common/theme.rs @@ -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)] @@ -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, @@ -105,6 +113,7 @@ impl ThemeGroup { ThemeGroup::Crt, ThemeGroup::Seasons, ThemeGroup::Games, + ThemeGroup::Monochrome, ]; pub fn label(self) -> &'static str { @@ -123,6 +132,7 @@ impl ThemeGroup { ThemeGroup::Crt => "CRT", ThemeGroup::Seasons => "4 Seasons", ThemeGroup::Games => "Games", + ThemeGroup::Monochrome => "Monochrome", } } @@ -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, @@ -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, @@ -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), @@ -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 { @@ -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, @@ -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, diff --git a/late-ssh/src/app/icon_picker/catalog.rs b/late-ssh/src/app/icon_picker/catalog.rs index 52ea8e1e..793f00e3 100644 --- a/late-ssh/src/app/icon_picker/catalog.rs +++ b/late-ssh/src/app/icon_picker/catalog.rs @@ -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"), @@ -102,6 +101,9 @@ const COMMON_KAOMOJI: &[(&str, &str)] = &[ ("ꉂ(˵˃ ᗜ ˂˵)", "happy laugh"), ("(˶°▄°˶)", "skeptical"), ("(。ᵕ °ㅁ° ).ᐟ.ᐟ.ᐟ", "shocked"), + ("ᕙ( •̀ ᗜ •́ )ᕗ", "strong flex"), + ("✧。◝(ᵔᗜᵔ)◜✧*。", "happy excited"), + ("♡⸜(ˆᗜˆ˵ )⸝♡", "love"), ]; const COMMON_NERD_NAMES: &[&str] = &[