Refine theme styles (#3291)

Marshall Bowers created

This PR refines a number of styles in the default theme, as well as
updates the theme importer to support importing syntax styles from VS
Code themes.

Release Notes:

- N/A

Change summary

Cargo.lock                                    |    2 
assets/themes/src/vscode/noctis/family.json   |  118 
crates/theme2/Cargo.toml                      |    1 
crates/theme2/src/colors.rs                   |    2 
crates/theme2/src/default_colors.rs           |  135 +-
crates/theme2/src/registry.rs                 |   39 
crates/theme2/src/scale.rs                    |    2 
crates/theme2/src/theme2.rs                   |    2 
crates/theme2/src/themes/andromeda.rs         |  128 ++
crates/theme2/src/themes/ayu.rs               |  235 +++
crates/theme2/src/themes/dracula.rs           |   84 +
crates/theme2/src/themes/gruvbox.rs           |  496 ++++++++
crates/theme2/src/themes/mod.rs               |    6 
crates/theme2/src/themes/night_owl.rs         |  164 ++
crates/theme2/src/themes/noctis.rs            | 1273 +++++++++++++++++++++
crates/theme2/src/themes/nord.rs              |   93 +
crates/theme2/src/themes/notctis.rs           |  446 -------
crates/theme2/src/themes/palenight.rs         |  229 +++
crates/theme2/src/themes/rose_pine.rs         |  241 +++
crates/theme2/src/themes/solarized.rs         |  176 ++
crates/theme2/src/themes/synthwave_84.rs      |   73 +
crates/theme2/src/user_theme.rs               |   71 +
crates/theme_importer/Cargo.toml              |    4 
crates/theme_importer/src/main.rs             |    8 
crates/theme_importer/src/theme_printer.rs    |  119 +
crates/theme_importer/src/vscode.rs           |  575 ---------
crates/theme_importer/src/vscode/converter.rs |  376 ++++++
crates/theme_importer/src/vscode/syntax.rs    |  166 ++
crates/theme_importer/src/vscode/theme.rs     |  412 ++++++
crates/ui2/src/components/tooltip.rs          |    4 
30 files changed, 4,478 insertions(+), 1,202 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -9155,10 +9155,12 @@ dependencies = [
  "anyhow",
  "convert_case 0.6.0",
  "gpui2",
+ "indexmap 1.9.3",
  "log",
  "rust-embed",
  "serde",
  "simplelog",
+ "strum",
  "theme2",
  "uuid 1.4.1",
 ]

assets/themes/src/vscode/noctis/family.json 🔗

@@ -1,61 +1,61 @@
 {
-    "name": "Notctis",
-    "author": "Liviu Schera (liviuschera)",
-    "themes": [
-        {
-            "name": "Noctis Azureus",
-            "file_name": "azureus.json",
-            "appearance": "dark"
-        },
-        {
-            "name": "Noctis Bordo",
-            "file_name": "bordo.json",
-            "appearance": "dark"
-        },
-        {
-            "name": "Noctus Hibernus",
-            "file_name": "hibernus.json",
-            "appearance": "light"
-        },
-        {
-            "name": "Noctis Lilac",
-            "file_name": "lilac.json",
-            "appearance": "dark"
-        },
-        {
-            "name": "Noctis Lux",
-            "file_name": "lux.json",
-            "appearance": "light"
-        },
-        {
-            "name": "Noctis Minimus",
-            "file_name": "minimus.json",
-            "appearance": "dark"
-        },
-        {
-            "name": "Noctis",
-            "file_name": "noctis.json",
-            "appearance": "dark"
-        },
-        {
-            "name": "Noctis Obscuro",
-            "file_name": "obscuro.json",
-            "appearance": "dark"
-        },
-        {
-            "name": "Noctis Sereno",
-            "file_name": "obscuro.json",
-            "appearance": "dark"
-        },
-        {
-            "name": "Noctis Uva",
-            "file_name": "uva.json",
-            "appearance": "dark"
-        },
-        {
-            "name": "Noctis Viola",
-            "file_name": "viola.json",
-            "appearance": "dark"
-        }
-    ]
+  "name": "Noctis",
+  "author": "Liviu Schera (liviuschera)",
+  "themes": [
+    {
+      "name": "Noctis Azureus",
+      "file_name": "azureus.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Noctis Bordo",
+      "file_name": "bordo.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Noctus Hibernus",
+      "file_name": "hibernus.json",
+      "appearance": "light"
+    },
+    {
+      "name": "Noctis Lilac",
+      "file_name": "lilac.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Noctis Lux",
+      "file_name": "lux.json",
+      "appearance": "light"
+    },
+    {
+      "name": "Noctis Minimus",
+      "file_name": "minimus.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Noctis",
+      "file_name": "noctis.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Noctis Obscuro",
+      "file_name": "obscuro.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Noctis Sereno",
+      "file_name": "obscuro.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Noctis Uva",
+      "file_name": "uva.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Noctis Viola",
+      "file_name": "viola.json",
+      "appearance": "dark"
+    }
+  ]
 }

crates/theme2/Cargo.toml 🔗

@@ -6,6 +6,7 @@ publish = false
 
 [features]
 default = ["stories"]
+importing-themes = []
 stories = ["dep:itertools"]
 test-support = [
     "gpui/test-support",

crates/theme2/src/colors.rs 🔗

@@ -14,7 +14,7 @@ pub struct SystemColors {
 }
 
 #[derive(Refineable, Clone, Debug)]
-#[refineable(debug)]
+#[refineable(debug, deserialize)]
 pub struct StatusColors {
     pub conflict: Hsla,
     pub created: Hsla,

crates/theme2/src/default_colors.rs 🔗

@@ -142,24 +142,24 @@ impl SyntaxTheme {
                 ("boolean".into(), tomato().light().step_11().into()),
                 ("comment".into(), neutral().light().step_11().into()),
                 ("comment.doc".into(), iris().light().step_12().into()),
-                ("constant".into(), red().light().step_7().into()),
-                ("constructor".into(), red().light().step_7().into()),
-                ("embedded".into(), red().light().step_7().into()),
-                ("emphasis".into(), red().light().step_7().into()),
-                ("emphasis.strong".into(), red().light().step_7().into()),
-                ("enum".into(), red().light().step_7().into()),
-                ("function".into(), red().light().step_7().into()),
-                ("hint".into(), red().light().step_7().into()),
+                ("constant".into(), red().light().step_9().into()),
+                ("constructor".into(), red().light().step_9().into()),
+                ("embedded".into(), red().light().step_9().into()),
+                ("emphasis".into(), red().light().step_9().into()),
+                ("emphasis.strong".into(), red().light().step_9().into()),
+                ("enum".into(), red().light().step_9().into()),
+                ("function".into(), red().light().step_9().into()),
+                ("hint".into(), red().light().step_9().into()),
                 ("keyword".into(), orange().light().step_11().into()),
-                ("label".into(), red().light().step_7().into()),
-                ("link_text".into(), red().light().step_7().into()),
-                ("link_uri".into(), red().light().step_7().into()),
-                ("number".into(), red().light().step_7().into()),
-                ("operator".into(), red().light().step_7().into()),
-                ("predictive".into(), red().light().step_7().into()),
-                ("preproc".into(), red().light().step_7().into()),
-                ("primary".into(), red().light().step_7().into()),
-                ("property".into(), red().light().step_7().into()),
+                ("label".into(), red().light().step_9().into()),
+                ("link_text".into(), red().light().step_9().into()),
+                ("link_uri".into(), red().light().step_9().into()),
+                ("number".into(), red().light().step_9().into()),
+                ("operator".into(), red().light().step_9().into()),
+                ("predictive".into(), red().light().step_9().into()),
+                ("preproc".into(), red().light().step_9().into()),
+                ("primary".into(), red().light().step_9().into()),
+                ("property".into(), red().light().step_9().into()),
                 ("punctuation".into(), neutral().light().step_11().into()),
                 (
                     "punctuation.bracket".into(),
@@ -173,22 +173,22 @@ impl SyntaxTheme {
                     "punctuation.list_marker".into(),
                     blue().light().step_11().into(),
                 ),
-                ("punctuation.special".into(), red().light().step_7().into()),
+                ("punctuation.special".into(), red().light().step_9().into()),
                 ("string".into(), jade().light().step_11().into()),
-                ("string.escape".into(), red().light().step_7().into()),
+                ("string.escape".into(), red().light().step_9().into()),
                 ("string.regex".into(), tomato().light().step_11().into()),
-                ("string.special".into(), red().light().step_7().into()),
+                ("string.special".into(), red().light().step_9().into()),
                 (
                     "string.special.symbol".into(),
-                    red().light().step_7().into(),
+                    red().light().step_9().into(),
                 ),
-                ("tag".into(), red().light().step_7().into()),
-                ("text.literal".into(), red().light().step_7().into()),
-                ("title".into(), red().light().step_7().into()),
-                ("type".into(), red().light().step_7().into()),
-                ("variable".into(), red().light().step_7().into()),
-                ("variable.special".into(), red().light().step_7().into()),
-                ("variant".into(), red().light().step_7().into()),
+                ("tag".into(), red().light().step_9().into()),
+                ("text.literal".into(), red().light().step_9().into()),
+                ("title".into(), red().light().step_9().into()),
+                ("type".into(), red().light().step_9().into()),
+                ("variable".into(), red().light().step_9().into()),
+                ("variable.special".into(), red().light().step_9().into()),
+                ("variant".into(), red().light().step_9().into()),
             ],
             inlay_style: tomato().light().step_1().into(), // todo!("nate: use a proper style")
             suggestion_style: orange().light().step_1().into(), // todo!("nate: use proper style")
@@ -198,28 +198,28 @@ impl SyntaxTheme {
     pub fn default_dark() -> Self {
         Self {
             highlights: vec![
-                ("attribute".into(), cyan().dark().step_11().into()),
+                ("attribute".into(), tomato().dark().step_11().into()),
                 ("boolean".into(), tomato().dark().step_11().into()),
                 ("comment".into(), neutral().dark().step_11().into()),
                 ("comment.doc".into(), iris().dark().step_12().into()),
-                ("constant".into(), red().dark().step_7().into()),
-                ("constructor".into(), red().dark().step_7().into()),
-                ("embedded".into(), red().dark().step_7().into()),
-                ("emphasis".into(), red().dark().step_7().into()),
-                ("emphasis.strong".into(), red().dark().step_7().into()),
-                ("enum".into(), red().dark().step_7().into()),
-                ("function".into(), red().dark().step_7().into()),
-                ("hint".into(), red().dark().step_7().into()),
-                ("keyword".into(), orange().dark().step_11().into()),
-                ("label".into(), red().dark().step_7().into()),
-                ("link_text".into(), red().dark().step_7().into()),
-                ("link_uri".into(), red().dark().step_7().into()),
-                ("number".into(), red().dark().step_7().into()),
-                ("operator".into(), red().dark().step_7().into()),
-                ("predictive".into(), red().dark().step_7().into()),
-                ("preproc".into(), red().dark().step_7().into()),
-                ("primary".into(), red().dark().step_7().into()),
-                ("property".into(), red().dark().step_7().into()),
+                ("constant".into(), orange().dark().step_11().into()),
+                ("constructor".into(), gold().dark().step_11().into()),
+                ("embedded".into(), red().dark().step_11().into()),
+                ("emphasis".into(), red().dark().step_11().into()),
+                ("emphasis.strong".into(), red().dark().step_11().into()),
+                ("enum".into(), yellow().dark().step_11().into()),
+                ("function".into(), blue().dark().step_11().into()),
+                ("hint".into(), indigo().dark().step_11().into()),
+                ("keyword".into(), plum().dark().step_11().into()),
+                ("label".into(), red().dark().step_11().into()),
+                ("link_text".into(), red().dark().step_11().into()),
+                ("link_uri".into(), red().dark().step_11().into()),
+                ("number".into(), red().dark().step_11().into()),
+                ("operator".into(), red().dark().step_11().into()),
+                ("predictive".into(), red().dark().step_11().into()),
+                ("preproc".into(), red().dark().step_11().into()),
+                ("primary".into(), red().dark().step_11().into()),
+                ("property".into(), red().dark().step_11().into()),
                 ("punctuation".into(), neutral().dark().step_11().into()),
                 (
                     "punctuation.bracket".into(),
@@ -233,22 +233,25 @@ impl SyntaxTheme {
                     "punctuation.list_marker".into(),
                     blue().dark().step_11().into(),
                 ),
-                ("punctuation.special".into(), red().dark().step_7().into()),
-                ("string".into(), jade().dark().step_11().into()),
-                ("string.escape".into(), red().dark().step_7().into()),
+                ("punctuation.special".into(), red().dark().step_11().into()),
+                ("string".into(), lime().dark().step_11().into()),
+                ("string.escape".into(), orange().dark().step_11().into()),
                 ("string.regex".into(), tomato().dark().step_11().into()),
-                ("string.special".into(), red().dark().step_7().into()),
-                ("string.special.symbol".into(), red().dark().step_7().into()),
-                ("tag".into(), red().dark().step_7().into()),
-                ("text.literal".into(), red().dark().step_7().into()),
-                ("title".into(), red().dark().step_7().into()),
-                ("type".into(), red().dark().step_7().into()),
-                ("variable".into(), red().dark().step_7().into()),
-                ("variable.special".into(), red().dark().step_7().into()),
-                ("variant".into(), red().dark().step_7().into()),
+                ("string.special".into(), red().dark().step_11().into()),
+                (
+                    "string.special.symbol".into(),
+                    red().dark().step_11().into(),
+                ),
+                ("tag".into(), red().dark().step_11().into()),
+                ("text.literal".into(), purple().dark().step_11().into()),
+                ("title".into(), sky().dark().step_11().into()),
+                ("type".into(), mint().dark().step_11().into()),
+                ("variable".into(), red().dark().step_11().into()),
+                ("variable.special".into(), red().dark().step_11().into()),
+                ("variant".into(), red().dark().step_11().into()),
             ],
-            inlay_style: tomato().dark().step_1().into(), // todo!("nate: use a proper style")
-            suggestion_style: orange().dark().step_1().into(), // todo!("nate: use a proper style")
+            inlay_style: neutral().dark().step_11().into(), // todo!("nate: use a proper style")
+            suggestion_style: orange().dark().step_11().into(), // todo!("nate: use a proper style")
         }
     }
 }
@@ -278,7 +281,7 @@ impl ThemeColors {
             ghost_element_active: neutral().light().step_5(),
             ghost_element_selected: neutral().light().step_5(),
             ghost_element_disabled: neutral().light_alpha().step_3(),
-            text: neutral().light().step_12(),
+            text: yellow().light().step_9(),
             text_muted: neutral().light().step_11(),
             text_placeholder: neutral().light().step_10(),
             text_disabled: neutral().light().step_9(),
@@ -367,11 +370,11 @@ impl ThemeColors {
             tab_active_background: neutral().dark().step_1(),
             tab_inactive_background: neutral().dark().step_2(),
             editor_background: neutral().dark().step_1(),
-            editor_gutter_background: neutral().dark().step_1(), // todo!("pick the right colors")
-            editor_subheader_background: neutral().dark().step_2(),
+            editor_gutter_background: neutral().dark().step_1(),
+            editor_subheader_background: neutral().dark().step_3(),
             editor_active_line_background: neutral().dark_alpha().step_3(),
-            editor_line_number: neutral().dark_alpha().step_3(), // todo!("pick the right colors")
-            editor_active_line_number: neutral().dark_alpha().step_3(), // todo!("pick the right colors")
+            editor_line_number: neutral().dark_alpha().step_10(),
+            editor_active_line_number: neutral().dark_alpha().step_12(),
             editor_highlighted_line_background: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
             editor_invisible: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
             editor_wrap_guide: neutral().dark_alpha().step_4(), // todo!("pick the right colors")

crates/theme2/src/registry.rs 🔗

@@ -2,7 +2,7 @@ use std::collections::HashMap;
 use std::sync::Arc;
 
 use anyhow::{anyhow, Result};
-use gpui::SharedString;
+use gpui::{HighlightStyle, SharedString};
 use refineable::Refineable;
 
 use crate::{
@@ -27,21 +27,47 @@ impl ThemeRegistry {
         }
     }
 
+    #[allow(unused)]
     fn insert_user_theme_familes(&mut self, families: impl IntoIterator<Item = UserThemeFamily>) {
         for family in families.into_iter() {
             self.insert_user_themes(family.themes);
         }
     }
 
+    #[allow(unused)]
     fn insert_user_themes(&mut self, themes: impl IntoIterator<Item = UserTheme>) {
         self.insert_themes(themes.into_iter().map(|user_theme| {
             let mut theme_colors = match user_theme.appearance {
                 Appearance::Light => ThemeColors::default_light(),
                 Appearance::Dark => ThemeColors::default_dark(),
             };
-
             theme_colors.refine(&user_theme.styles.colors);
 
+            let mut status_colors = StatusColors::default();
+            status_colors.refine(&user_theme.styles.status);
+
+            let mut syntax_colors = match user_theme.appearance {
+                Appearance::Light => SyntaxTheme::default_light(),
+                Appearance::Dark => SyntaxTheme::default_dark(),
+            };
+            if let Some(user_syntax) = user_theme.styles.syntax {
+                syntax_colors.highlights = user_syntax
+                    .highlights
+                    .iter()
+                    .map(|(syntax_token, highlight)| {
+                        (
+                            syntax_token.clone(),
+                            HighlightStyle {
+                                color: highlight.color,
+                                font_style: highlight.font_style.map(Into::into),
+                                font_weight: highlight.font_weight.map(Into::into),
+                                ..Default::default()
+                            },
+                        )
+                    })
+                    .collect::<Vec<_>>();
+            }
+
             Theme {
                 id: uuid::Uuid::new_v4().to_string(),
                 name: user_theme.name.into(),
@@ -49,12 +75,9 @@ impl ThemeRegistry {
                 styles: ThemeStyles {
                     system: SystemColors::default(),
                     colors: theme_colors,
-                    status: StatusColors::default(),
+                    status: status_colors,
                     player: PlayerColors::default(),
-                    syntax: match user_theme.appearance {
-                        Appearance::Light => Arc::new(SyntaxTheme::default_light()),
-                        Appearance::Dark => Arc::new(SyntaxTheme::default_dark()),
-                    },
+                    syntax: Arc::new(syntax_colors),
                 },
             }
         }));
@@ -83,6 +106,8 @@ impl Default for ThemeRegistry {
         };
 
         this.insert_theme_families([zed_pro_family()]);
+
+        #[cfg(not(feature = "importing-themes"))]
         this.insert_user_theme_familes(crate::all_user_themes());
 
         this

crates/theme2/src/scale.rs 🔗

@@ -128,6 +128,8 @@ impl ColorScale {
     }
 
     /// `Step 10` - Used for hovered or active solid backgrounds, particularly when `Step 9` is their normal state.
+    ///
+    /// May also be used for extremely low contrast text. This should be used sparingly, as it may be difficult to read.
     #[inline]
     pub fn step_10(&self) -> Hsla {
         self.step(ColorScaleStep::TEN)

crates/theme2/src/theme2.rs 🔗

@@ -6,6 +6,7 @@ mod registry;
 mod scale;
 mod settings;
 mod syntax;
+#[cfg(not(feature = "importing-themes"))]
 mod themes;
 mod user_theme;
 
@@ -20,6 +21,7 @@ pub use registry::*;
 pub use scale::*;
 pub use settings::*;
 pub use syntax::*;
+#[cfg(not(feature = "importing-themes"))]
 pub use themes::*;
 pub use user_theme::*;
 

crates/theme2/src/themes/andromeda.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn andromeda() -> UserThemeFamily {
@@ -19,7 +21,7 @@ pub fn andromeda() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x1b1d23ff).into()),
                         border_variant: Some(rgba(0x1b1d23ff).into()),
-                        border_focused: Some(rgba(0x1b1d23ff).into()),
+                        border_focused: Some(rgba(0x746f77ff).into()),
                         border_selected: Some(rgba(0x1b1d23ff).into()),
                         border_transparent: Some(rgba(0x1b1d23ff).into()),
                         border_disabled: Some(rgba(0x1b1d23ff).into()),
@@ -27,9 +29,17 @@ pub fn andromeda() -> UserThemeFamily {
                         surface_background: Some(rgba(0x23262eff).into()),
                         background: Some(rgba(0x23262eff).into()),
                         element_background: Some(rgba(0x00e8c5cc).into()),
+                        element_hover: Some(rgba(0x23262eff).into()),
+                        element_selected: Some(rgba(0x23262eff).into()),
+                        drop_target_background: Some(rgba(0x3a404eff).into()),
+                        ghost_element_hover: Some(rgba(0x23262eff).into()),
                         text: Some(rgba(0xd4cdd8ff).into()),
                         tab_inactive_background: Some(rgba(0x23262eff).into()),
                         tab_active_background: Some(rgba(0x23262eff).into()),
+                        editor_background: Some(rgba(0x23262eff).into()),
+                        editor_gutter_background: Some(rgba(0x23262eff).into()),
+                        editor_line_number: Some(rgba(0x746f77ff).into()),
+                        editor_active_line_number: Some(rgba(0xd4cdd8ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xee5d42ff).into()),
                         terminal_ansi_bright_green: Some(rgba(0x95e072ff).into()),
                         terminal_ansi_bright_yellow: Some(rgba(0xffe66dff).into()),
@@ -44,6 +54,58 @@ pub fn andromeda() -> UserThemeFamily {
                         terminal_ansi_cyan: Some(rgba(0x00e8c6ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xfc634cff).into()),
+                        error: Some(rgba(0xfc634cff).into()),
+                        hidden: Some(rgba(0x746f77ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xf39c11ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9fa0a6cc).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffe66dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc64dedff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x95e072ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffe66dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -53,7 +115,7 @@ pub fn andromeda() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x1b1d23ff).into()),
                         border_variant: Some(rgba(0x1b1d23ff).into()),
-                        border_focused: Some(rgba(0x1b1d23ff).into()),
+                        border_focused: Some(rgba(0x746f77ff).into()),
                         border_selected: Some(rgba(0x1b1d23ff).into()),
                         border_transparent: Some(rgba(0x1b1d23ff).into()),
                         border_disabled: Some(rgba(0x1b1d23ff).into()),
@@ -61,9 +123,17 @@ pub fn andromeda() -> UserThemeFamily {
                         surface_background: Some(rgba(0x23262eff).into()),
                         background: Some(rgba(0x262933ff).into()),
                         element_background: Some(rgba(0x00e8c5cc).into()),
+                        element_hover: Some(rgba(0x23262eff).into()),
+                        element_selected: Some(rgba(0x23262eff).into()),
+                        drop_target_background: Some(rgba(0x3a404eff).into()),
+                        ghost_element_hover: Some(rgba(0x23262eff).into()),
                         text: Some(rgba(0xd4cdd8ff).into()),
                         tab_inactive_background: Some(rgba(0x23262eff).into()),
                         tab_active_background: Some(rgba(0x262933ff).into()),
+                        editor_background: Some(rgba(0x262933ff).into()),
+                        editor_gutter_background: Some(rgba(0x262933ff).into()),
+                        editor_line_number: Some(rgba(0x746f77ff).into()),
+                        editor_active_line_number: Some(rgba(0xd4cdd8ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xee5d42ff).into()),
                         terminal_ansi_bright_green: Some(rgba(0x95e072ff).into()),
                         terminal_ansi_bright_yellow: Some(rgba(0xffe66dff).into()),
@@ -78,6 +148,58 @@ pub fn andromeda() -> UserThemeFamily {
                         terminal_ansi_cyan: Some(rgba(0x00e8c6ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xfc634cff).into()),
+                        error: Some(rgba(0xfc634cff).into()),
+                        hidden: Some(rgba(0x746f77ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xf39c11ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9fa0a6cc).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffe66dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc64dedff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x95e072ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffe66dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
         ],

crates/theme2/src/themes/ayu.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn ayu() -> UserThemeFamily {
@@ -19,7 +21,7 @@ pub fn ayu() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x6b7d8f1f).into()),
                         border_variant: Some(rgba(0x6b7d8f1f).into()),
-                        border_focused: Some(rgba(0x6b7d8f1f).into()),
+                        border_focused: Some(rgba(0xffaa32b3).into()),
                         border_selected: Some(rgba(0x6b7d8f1f).into()),
                         border_transparent: Some(rgba(0x6b7d8f1f).into()),
                         border_disabled: Some(rgba(0x6b7d8f1f).into()),
@@ -27,9 +29,16 @@ pub fn ayu() -> UserThemeFamily {
                         surface_background: Some(rgba(0xf8f9faff).into()),
                         background: Some(rgba(0xf8f9faff).into()),
                         element_background: Some(rgba(0xffaa32ff).into()),
+                        element_hover: Some(rgba(0x55728f1f).into()),
+                        element_selected: Some(rgba(0x55728f1f).into()),
+                        ghost_element_hover: Some(rgba(0x55728f1f).into()),
                         text: Some(rgba(0x8a9199ff).into()),
                         tab_inactive_background: Some(rgba(0xf8f9faff).into()),
                         tab_active_background: Some(rgba(0xf8f9faff).into()),
+                        editor_background: Some(rgba(0xf8f9faff).into()),
+                        editor_gutter_background: Some(rgba(0xf8f9faff).into()),
+                        editor_line_number: Some(rgba(0x8a919966).into()),
+                        editor_active_line_number: Some(rgba(0x5c6166ff).into()),
                         terminal_background: Some(rgba(0xf8f9faff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x686868ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xef7070ff).into()),
@@ -49,6 +58,74 @@ pub fn ayu() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xe65050ff).into()),
+                        error: Some(rgba(0xe65050ff).into()),
+                        hidden: Some(rgba(0x8a9199ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xf2ad48ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xa37accff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x787b8099).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x4bbf98ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xf2ad48ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfa8d3eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x86b300ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x55b4d3ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -58,7 +135,7 @@ pub fn ayu() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x171a24ff).into()),
                         border_variant: Some(rgba(0x171a24ff).into()),
-                        border_focused: Some(rgba(0x171a24ff).into()),
+                        border_focused: Some(rgba(0xffcb65b3).into()),
                         border_selected: Some(rgba(0x171a24ff).into()),
                         border_transparent: Some(rgba(0x171a24ff).into()),
                         border_disabled: Some(rgba(0x171a24ff).into()),
@@ -66,9 +143,16 @@ pub fn ayu() -> UserThemeFamily {
                         surface_background: Some(rgba(0x1f2430ff).into()),
                         background: Some(rgba(0x1f2430ff).into()),
                         element_background: Some(rgba(0xffcb65ff).into()),
+                        element_hover: Some(rgba(0x63759926).into()),
+                        element_selected: Some(rgba(0x63759926).into()),
+                        ghost_element_hover: Some(rgba(0x63759926).into()),
                         text: Some(rgba(0x707a8cff).into()),
                         tab_inactive_background: Some(rgba(0x1f2430ff).into()),
                         tab_active_background: Some(rgba(0x1f2430ff).into()),
+                        editor_background: Some(rgba(0x1f2430ff).into()),
+                        editor_gutter_background: Some(rgba(0x1f2430ff).into()),
+                        editor_line_number: Some(rgba(0x8a919966).into()),
+                        editor_active_line_number: Some(rgba(0xcccac2ff).into()),
                         terminal_background: Some(rgba(0x1f2430ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x686868ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xf18678ff).into()),
@@ -88,6 +172,74 @@ pub fn ayu() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xff6565ff).into()),
+                        error: Some(rgba(0xff6565ff).into()),
+                        hidden: Some(rgba(0x707a8cff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffd173ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xdfbfffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb8cfe680).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x95e6cbff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffd173ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffad65ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xd4fe7fff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x5ccfe6ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -97,7 +249,7 @@ pub fn ayu() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x1e232bff).into()),
                         border_variant: Some(rgba(0x1e232bff).into()),
-                        border_focused: Some(rgba(0x1e232bff).into()),
+                        border_focused: Some(rgba(0xe6b450b3).into()),
                         border_selected: Some(rgba(0x1e232bff).into()),
                         border_transparent: Some(rgba(0x1e232bff).into()),
                         border_disabled: Some(rgba(0x1e232bff).into()),
@@ -105,9 +257,16 @@ pub fn ayu() -> UserThemeFamily {
                         surface_background: Some(rgba(0x0b0e14ff).into()),
                         background: Some(rgba(0x0b0e14ff).into()),
                         element_background: Some(rgba(0xe6b450ff).into()),
+                        element_hover: Some(rgba(0x47526640).into()),
+                        element_selected: Some(rgba(0x47526640).into()),
+                        ghost_element_hover: Some(rgba(0x47526640).into()),
                         text: Some(rgba(0x565b66ff).into()),
                         tab_inactive_background: Some(rgba(0x0b0e14ff).into()),
                         tab_active_background: Some(rgba(0x0b0e14ff).into()),
+                        editor_background: Some(rgba(0x0b0e14ff).into()),
+                        editor_gutter_background: Some(rgba(0x0b0e14ff).into()),
+                        editor_line_number: Some(rgba(0x6c738099).into()),
+                        editor_active_line_number: Some(rgba(0xbfbdb6ff).into()),
                         terminal_background: Some(rgba(0x0b0e14ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x686868ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xef7077ff).into()),
@@ -127,6 +286,74 @@ pub fn ayu() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xd95757ff).into()),
+                        error: Some(rgba(0xd95757ff).into()),
+                        hidden: Some(rgba(0x565b66ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffb353ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xd2a6ffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xabb5be8c).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x95e6cbff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffb353ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xff8f3fff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xa9d94bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x38b9e6ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
         ],

crates/theme2/src/themes/dracula.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn dracula() -> UserThemeFamily {
@@ -18,7 +20,7 @@ pub fn dracula() -> UserThemeFamily {
                 colors: ThemeColorsRefinement {
                     border: Some(rgba(0xbd93f9ff).into()),
                     border_variant: Some(rgba(0xbd93f9ff).into()),
-                    border_focused: Some(rgba(0xbd93f9ff).into()),
+                    border_focused: Some(rgba(0x6272a4ff).into()),
                     border_selected: Some(rgba(0xbd93f9ff).into()),
                     border_transparent: Some(rgba(0xbd93f9ff).into()),
                     border_disabled: Some(rgba(0xbd93f9ff).into()),
@@ -26,9 +28,17 @@ pub fn dracula() -> UserThemeFamily {
                     surface_background: Some(rgba(0x282a35ff).into()),
                     background: Some(rgba(0x282a35ff).into()),
                     element_background: Some(rgba(0x44475aff).into()),
+                    element_hover: Some(rgba(0x44475a75).into()),
+                    element_selected: Some(rgba(0x44475aff).into()),
+                    drop_target_background: Some(rgba(0x44475aff).into()),
+                    ghost_element_hover: Some(rgba(0x44475a75).into()),
                     text: Some(rgba(0xf8f8f2ff).into()),
                     tab_inactive_background: Some(rgba(0x21222cff).into()),
                     tab_active_background: Some(rgba(0x282a35ff).into()),
+                    editor_background: Some(rgba(0x282a35ff).into()),
+                    editor_gutter_background: Some(rgba(0x282a35ff).into()),
+                    editor_line_number: Some(rgba(0x6272a4ff).into()),
+                    editor_active_line_number: Some(rgba(0xf8f8f2ff).into()),
                     terminal_background: Some(rgba(0x282a35ff).into()),
                     terminal_ansi_bright_black: Some(rgba(0x6272a4ff).into()),
                     terminal_ansi_bright_red: Some(rgba(0xff6d6dff).into()),
@@ -48,6 +58,76 @@ pub fn dracula() -> UserThemeFamily {
                     terminal_ansi_white: Some(rgba(0xf8f8f2ff).into()),
                     ..Default::default()
                 },
+                status: StatusColorsRefinement {
+                    deleted: Some(rgba(0xff5555ff).into()),
+                    error: Some(rgba(0xff5555ff).into()),
+                    hidden: Some(rgba(0x6272a4ff).into()),
+                    warning: Some(rgba(0xffb76bff).into()),
+                    ..Default::default()
+                },
+                syntax: Some(UserSyntaxTheme {
+                    highlights: vec![
+                        (
+                            "attribute".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x50fa7bff).into()),
+                                font_style: Some(UserFontStyle::Italic),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "comment".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x6272a4ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "emphasis".into(),
+                            UserHighlightStyle {
+                                font_style: Some(UserFontStyle::Italic),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "function".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x50fa7bff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "keyword".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xff79c6ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "string".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xf1fa8cff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "type".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x8be9fdff).into()),
+                                font_style: Some(UserFontStyle::Italic),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "variable".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xbd93f9ff).into()),
+                                font_style: Some(UserFontStyle::Italic),
+                                ..Default::default()
+                            },
+                        ),
+                    ],
+                }),
             },
         }],
     }

crates/theme2/src/themes/gruvbox.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn gruvbox() -> UserThemeFamily {
@@ -25,9 +27,17 @@ pub fn gruvbox() -> UserThemeFamily {
                         border_disabled: Some(rgba(0x3c3836ff).into()),
                         background: Some(rgba(0x1d2021ff).into()),
                         element_background: Some(rgba(0x44858780).into()),
+                        element_hover: Some(rgba(0x3c383680).into()),
+                        element_selected: Some(rgba(0x3c383680).into()),
+                        drop_target_background: Some(rgba(0x3c3836ff).into()),
+                        ghost_element_hover: Some(rgba(0x3c383680).into()),
                         text: Some(rgba(0xebdbb2ff).into()),
                         tab_inactive_background: Some(rgba(0x1d2021ff).into()),
                         tab_active_background: Some(rgba(0x32302fff).into()),
+                        editor_background: Some(rgba(0x1d2021ff).into()),
+                        editor_gutter_background: Some(rgba(0x1d2021ff).into()),
+                        editor_line_number: Some(rgba(0x665c54ff).into()),
+                        editor_active_line_number: Some(rgba(0xebdbb2ff).into()),
                         terminal_background: Some(rgba(0x1d2021ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xfb4833ff).into()),
@@ -47,6 +57,80 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xa89984ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xfb4833ff).into()),
+                        error: Some(rgba(0xfb4833ff).into()),
+                        hidden: Some(rgba(0xa89984ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfabd2eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x928374ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "emphasis".into(),
+                                UserHighlightStyle {
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfabd2eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfb4833ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "punctuation".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xa89984ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb8bb25ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string.escape".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfb4833ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfabd2eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -62,9 +146,17 @@ pub fn gruvbox() -> UserThemeFamily {
                         border_disabled: Some(rgba(0x3c3836ff).into()),
                         background: Some(rgba(0x282828ff).into()),
                         element_background: Some(rgba(0x44858780).into()),
+                        element_hover: Some(rgba(0x3c383680).into()),
+                        element_selected: Some(rgba(0x3c383680).into()),
+                        drop_target_background: Some(rgba(0x3c3836ff).into()),
+                        ghost_element_hover: Some(rgba(0x3c383680).into()),
                         text: Some(rgba(0xebdbb2ff).into()),
                         tab_inactive_background: Some(rgba(0x282828ff).into()),
                         tab_active_background: Some(rgba(0x3c3836ff).into()),
+                        editor_background: Some(rgba(0x282828ff).into()),
+                        editor_gutter_background: Some(rgba(0x282828ff).into()),
+                        editor_line_number: Some(rgba(0x665c54ff).into()),
+                        editor_active_line_number: Some(rgba(0xebdbb2ff).into()),
                         terminal_background: Some(rgba(0x282828ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xfb4833ff).into()),
@@ -84,6 +176,80 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xa89984ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xfb4833ff).into()),
+                        error: Some(rgba(0xfb4833ff).into()),
+                        hidden: Some(rgba(0xa89984ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfabd2eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x928374ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "emphasis".into(),
+                                UserHighlightStyle {
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfabd2eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfb4833ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "punctuation".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xa89984ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb8bb25ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string.escape".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfb4833ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfabd2eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -99,9 +265,17 @@ pub fn gruvbox() -> UserThemeFamily {
                         border_disabled: Some(rgba(0x3c3836ff).into()),
                         background: Some(rgba(0x32302fff).into()),
                         element_background: Some(rgba(0x44858780).into()),
+                        element_hover: Some(rgba(0x3c383680).into()),
+                        element_selected: Some(rgba(0x3c383680).into()),
+                        drop_target_background: Some(rgba(0x3c3836ff).into()),
+                        ghost_element_hover: Some(rgba(0x3c383680).into()),
                         text: Some(rgba(0xebdbb2ff).into()),
                         tab_inactive_background: Some(rgba(0x32302fff).into()),
                         tab_active_background: Some(rgba(0x504945ff).into()),
+                        editor_background: Some(rgba(0x32302fff).into()),
+                        editor_gutter_background: Some(rgba(0x32302fff).into()),
+                        editor_line_number: Some(rgba(0x665c54ff).into()),
+                        editor_active_line_number: Some(rgba(0xebdbb2ff).into()),
                         terminal_background: Some(rgba(0x32302fff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xfb4833ff).into()),
@@ -121,6 +295,80 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xa89984ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xfb4833ff).into()),
+                        error: Some(rgba(0xfb4833ff).into()),
+                        hidden: Some(rgba(0xa89984ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfabd2eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x928374ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "emphasis".into(),
+                                UserHighlightStyle {
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfabd2eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfb4833ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "punctuation".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xa89984ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb8bb25ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string.escape".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfb4833ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xfabd2eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -136,9 +384,17 @@ pub fn gruvbox() -> UserThemeFamily {
                         border_disabled: Some(rgba(0xebdbb2ff).into()),
                         background: Some(rgba(0xf9f5d7ff).into()),
                         element_background: Some(rgba(0x44858780).into()),
+                        element_hover: Some(rgba(0xebdbb280).into()),
+                        element_selected: Some(rgba(0xebdbb280).into()),
+                        drop_target_background: Some(rgba(0xebdbb2ff).into()),
+                        ghost_element_hover: Some(rgba(0xebdbb280).into()),
                         text: Some(rgba(0x3c3836ff).into()),
                         tab_inactive_background: Some(rgba(0xf9f5d7ff).into()),
                         tab_active_background: Some(rgba(0xf2e5bcff).into()),
+                        editor_background: Some(rgba(0xf9f5d7ff).into()),
+                        editor_gutter_background: Some(rgba(0xf9f5d7ff).into()),
+                        editor_line_number: Some(rgba(0xbdae93ff).into()),
+                        editor_active_line_number: Some(rgba(0x3c3836ff).into()),
                         terminal_background: Some(rgba(0xf9f5d7ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0x9d0006ff).into()),
@@ -158,6 +414,80 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0x7c6f64ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0x9d0006ff).into()),
+                        error: Some(rgba(0x9d0006ff).into()),
+                        hidden: Some(rgba(0x7c6f64ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb57613ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x928374ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "emphasis".into(),
+                                UserHighlightStyle {
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb57613ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9d0006ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "punctuation".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x7c6f64ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x79740eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string.escape".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9d0006ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb57613ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -173,9 +503,17 @@ pub fn gruvbox() -> UserThemeFamily {
                         border_disabled: Some(rgba(0xebdbb2ff).into()),
                         background: Some(rgba(0xfbf1c7ff).into()),
                         element_background: Some(rgba(0x44858780).into()),
+                        element_hover: Some(rgba(0xebdbb280).into()),
+                        element_selected: Some(rgba(0xebdbb280).into()),
+                        drop_target_background: Some(rgba(0xebdbb2ff).into()),
+                        ghost_element_hover: Some(rgba(0xebdbb280).into()),
                         text: Some(rgba(0x3c3836ff).into()),
                         tab_inactive_background: Some(rgba(0xfbf1c7ff).into()),
                         tab_active_background: Some(rgba(0xebdbb2ff).into()),
+                        editor_background: Some(rgba(0xfbf1c7ff).into()),
+                        editor_gutter_background: Some(rgba(0xfbf1c7ff).into()),
+                        editor_line_number: Some(rgba(0xbdae93ff).into()),
+                        editor_active_line_number: Some(rgba(0x3c3836ff).into()),
                         terminal_background: Some(rgba(0xfbf1c7ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0x9d0006ff).into()),
@@ -195,6 +533,80 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0x7c6f64ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0x9d0006ff).into()),
+                        error: Some(rgba(0x9d0006ff).into()),
+                        hidden: Some(rgba(0x7c6f64ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb57613ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x928374ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "emphasis".into(),
+                                UserHighlightStyle {
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb57613ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9d0006ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "punctuation".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x7c6f64ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x79740eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string.escape".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9d0006ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb57613ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -210,9 +622,17 @@ pub fn gruvbox() -> UserThemeFamily {
                         border_disabled: Some(rgba(0xebdbb2ff).into()),
                         background: Some(rgba(0xf2e5bcff).into()),
                         element_background: Some(rgba(0x44858780).into()),
+                        element_hover: Some(rgba(0xebdbb280).into()),
+                        element_selected: Some(rgba(0xebdbb280).into()),
+                        drop_target_background: Some(rgba(0xebdbb2ff).into()),
+                        ghost_element_hover: Some(rgba(0xebdbb280).into()),
                         text: Some(rgba(0x3c3836ff).into()),
                         tab_inactive_background: Some(rgba(0xf2e5bcff).into()),
                         tab_active_background: Some(rgba(0xd5c4a1ff).into()),
+                        editor_background: Some(rgba(0xf2e5bcff).into()),
+                        editor_gutter_background: Some(rgba(0xf2e5bcff).into()),
+                        editor_line_number: Some(rgba(0xbdae93ff).into()),
+                        editor_active_line_number: Some(rgba(0x3c3836ff).into()),
                         terminal_background: Some(rgba(0xf2e5bcff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0x9d0006ff).into()),
@@ -232,6 +652,80 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0x7c6f64ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0x9d0006ff).into()),
+                        error: Some(rgba(0x9d0006ff).into()),
+                        hidden: Some(rgba(0x7c6f64ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb57613ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x928374ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "emphasis".into(),
+                                UserHighlightStyle {
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb57613ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9d0006ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "punctuation".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x7c6f64ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x79740eff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string.escape".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9d0006ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb57613ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
         ],

crates/theme2/src/themes/mod.rs 🔗

@@ -6,8 +6,8 @@ mod ayu;
 mod dracula;
 mod gruvbox;
 mod night_owl;
+mod noctis;
 mod nord;
-mod notctis;
 mod palenight;
 mod rose_pine;
 mod solarized;
@@ -18,8 +18,8 @@ pub use ayu::*;
 pub use dracula::*;
 pub use gruvbox::*;
 pub use night_owl::*;
+pub use noctis::*;
 pub use nord::*;
-pub use notctis::*;
 pub use palenight::*;
 pub use rose_pine::*;
 pub use solarized::*;
@@ -37,7 +37,7 @@ pub(crate) fn all_user_themes() -> Vec<UserThemeFamily> {
         dracula(),
         solarized(),
         nord(),
-        notctis(),
+        noctis(),
         ayu(),
         gruvbox(),
     ]

crates/theme2/src/themes/night_owl.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn night_owl() -> UserThemeFamily {
@@ -19,7 +21,7 @@ pub fn night_owl() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x5f7e97ff).into()),
                         border_variant: Some(rgba(0x5f7e97ff).into()),
-                        border_focused: Some(rgba(0x5f7e97ff).into()),
+                        border_focused: Some(rgba(0x122d42ff).into()),
                         border_selected: Some(rgba(0x5f7e97ff).into()),
                         border_transparent: Some(rgba(0x5f7e97ff).into()),
                         border_disabled: Some(rgba(0x5f7e97ff).into()),
@@ -27,9 +29,17 @@ pub fn night_owl() -> UserThemeFamily {
                         surface_background: Some(rgba(0x011526ff).into()),
                         background: Some(rgba(0x011526ff).into()),
                         element_background: Some(rgba(0x7d56c1cc).into()),
+                        element_hover: Some(rgba(0x011526ff).into()),
+                        element_selected: Some(rgba(0x234c708c).into()),
+                        drop_target_background: Some(rgba(0x011526ff).into()),
+                        ghost_element_hover: Some(rgba(0x011526ff).into()),
                         text: Some(rgba(0xd6deebff).into()),
                         tab_inactive_background: Some(rgba(0x01101cff).into()),
                         tab_active_background: Some(rgba(0x0a2842ff).into()),
+                        editor_background: Some(rgba(0x011526ff).into()),
+                        editor_gutter_background: Some(rgba(0x011526ff).into()),
+                        editor_line_number: Some(rgba(0x4b6479ff).into()),
+                        editor_active_line_number: Some(rgba(0xd6deebff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x575656ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xef524fff).into()),
                         terminal_ansi_bright_green: Some(rgba(0x21da6eff).into()),
@@ -48,6 +58,76 @@ pub fn night_owl() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xffffffff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xef524fff).into()),
+                        error: Some(rgba(0xef524fff).into()),
+                        hidden: Some(rgba(0x5f7e97ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc5e478ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x637777ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc792eaff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc792eaff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xecc48dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x7fdbcaff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -57,7 +137,7 @@ pub fn night_owl() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0xd9d9d9ff).into()),
                         border_variant: Some(rgba(0xd9d9d9ff).into()),
-                        border_focused: Some(rgba(0xd9d9d9ff).into()),
+                        border_focused: Some(rgba(0x93a1a1ff).into()),
                         border_selected: Some(rgba(0xd9d9d9ff).into()),
                         border_transparent: Some(rgba(0xd9d9d9ff).into()),
                         border_disabled: Some(rgba(0xd9d9d9ff).into()),
@@ -65,9 +145,16 @@ pub fn night_owl() -> UserThemeFamily {
                         surface_background: Some(rgba(0xf0f0f0ff).into()),
                         background: Some(rgba(0xfbfbfbff).into()),
                         element_background: Some(rgba(0x29a298ff).into()),
+                        element_hover: Some(rgba(0xd3e7f8ff).into()),
+                        element_selected: Some(rgba(0xd3e7f8ff).into()),
+                        ghost_element_hover: Some(rgba(0xd3e7f8ff).into()),
                         text: Some(rgba(0x403f53ff).into()),
                         tab_inactive_background: Some(rgba(0xf0f0f0ff).into()),
                         tab_active_background: Some(rgba(0xf6f6f6ff).into()),
+                        editor_background: Some(rgba(0xfbfbfbff).into()),
+                        editor_gutter_background: Some(rgba(0xfbfbfbff).into()),
+                        editor_line_number: Some(rgba(0x90a7b2ff).into()),
+                        editor_active_line_number: Some(rgba(0x403f53ff).into()),
                         terminal_background: Some(rgba(0xf6f6f6ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x403f53ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xde3c3aff).into()),
@@ -87,6 +174,77 @@ pub fn night_owl() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xf0f0f0ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0x403f53ff).into()),
+                        error: Some(rgba(0x403f53ff).into()),
+                        hidden: Some(rgba(0x403f53ff).into()),
+                        warning: Some(rgba(0xdaa900ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x4876d6ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x4876d6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x989fb1ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x4876d6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x994bc3ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x994bc3ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x4876d6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x0b969bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
         ],

crates/theme2/src/themes/noctis.rs 🔗

@@ -0,0 +1,1273 @@
+// This file was generated by the `theme_importer`.
+// Be careful when modifying it by hand.
+
+use gpui::rgba;
+
+#[allow(unused)]
+use crate::{
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+};
+
+pub fn noctis() -> UserThemeFamily {
+    UserThemeFamily {
+        name: "Noctis".into(),
+        author: "Liviu Schera (liviuschera)".into(),
+        themes: vec![
+            UserTheme {
+                name: "Noctis Azureus".into(),
+                appearance: Appearance::Dark,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x1579b6ff).into()),
+                        border_variant: Some(rgba(0x1579b6ff).into()),
+                        border_focused: Some(rgba(0x08324eff).into()),
+                        border_selected: Some(rgba(0x1579b6ff).into()),
+                        border_transparent: Some(rgba(0x1579b6ff).into()),
+                        border_disabled: Some(rgba(0x1579b6ff).into()),
+                        elevated_surface_background: Some(rgba(0x051b28ff).into()),
+                        surface_background: Some(rgba(0x051b28ff).into()),
+                        background: Some(rgba(0x07263aff).into()),
+                        element_background: Some(rgba(0x007e99ff).into()),
+                        element_hover: Some(rgba(0x00558a65).into()),
+                        element_selected: Some(rgba(0x0b3f5fff).into()),
+                        drop_target_background: Some(rgba(0x00294dff).into()),
+                        ghost_element_hover: Some(rgba(0x00558a65).into()),
+                        text: Some(rgba(0xbecfdaff).into()),
+                        tab_inactive_background: Some(rgba(0x08324eff).into()),
+                        tab_active_background: Some(rgba(0x07263aff).into()),
+                        editor_background: Some(rgba(0x07263aff).into()),
+                        editor_gutter_background: Some(rgba(0x07263aff).into()),
+                        editor_line_number: Some(rgba(0x4c6b7fff).into()),
+                        editor_active_line_number: Some(rgba(0xbecfdaff).into()),
+                        terminal_background: Some(rgba(0x051b28ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x475e6cff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xbecfdaff).into()),
+                        terminal_ansi_black: Some(rgba(0x28343dff).into()),
+                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
+                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
+                        terminal_ansi_white: Some(rgba(0xaec3d0ff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xe34d1bff).into()),
+                        error: Some(rgba(0xe34d1bff).into()),
+                        hidden: Some(rgba(0x9fb6c6ff).into()),
+                        warning: Some(rgba(0xffa857ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x705febff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x5888a5ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xbecfdaff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x15a2b6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xdf759aff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x49e9a6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe66432ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctis Bordo".into(),
+                appearance: Appearance::Dark,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x997582ff).into()),
+                        border_variant: Some(rgba(0x997582ff).into()),
+                        border_focused: Some(rgba(0x413036ff).into()),
+                        border_selected: Some(rgba(0x997582ff).into()),
+                        border_transparent: Some(rgba(0x997582ff).into()),
+                        border_disabled: Some(rgba(0x997582ff).into()),
+                        elevated_surface_background: Some(rgba(0x272022ff).into()),
+                        surface_background: Some(rgba(0x272022ff).into()),
+                        background: Some(rgba(0x322a2dff).into()),
+                        element_background: Some(rgba(0x007e99ff).into()),
+                        element_hover: Some(rgba(0x533641ff).into()),
+                        element_selected: Some(rgba(0x5c2e3e99).into()),
+                        drop_target_background: Some(rgba(0x38292eff).into()),
+                        ghost_element_hover: Some(rgba(0x533641ff).into()),
+                        text: Some(rgba(0xcbbec2ff).into()),
+                        tab_inactive_background: Some(rgba(0x413036ff).into()),
+                        tab_active_background: Some(rgba(0x322a2dff).into()),
+                        editor_background: Some(rgba(0x322a2dff).into()),
+                        editor_gutter_background: Some(rgba(0x322a2dff).into()),
+                        editor_line_number: Some(rgba(0x715b63ff).into()),
+                        editor_active_line_number: Some(rgba(0xcbbec2ff).into()),
+                        terminal_background: Some(rgba(0x272022ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x69545bff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xcbbec2ff).into()),
+                        terminal_ansi_black: Some(rgba(0x47393eff).into()),
+                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
+                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
+                        terminal_ansi_white: Some(rgba(0xb9acb0ff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xe34d1bff).into()),
+                        error: Some(rgba(0xe34d1bff).into()),
+                        hidden: Some(rgba(0xbbaab0ff).into()),
+                        warning: Some(rgba(0xffa857ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x705febff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x8b737bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xcbbec2ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x15a2b6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xdf759aff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x49e9a6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe66432ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctus Hibernus".into(),
+                appearance: Appearance::Light,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x00c6e0ff).into()),
+                        border_variant: Some(rgba(0x00c6e0ff).into()),
+                        border_focused: Some(rgba(0xe0eff1ff).into()),
+                        border_selected: Some(rgba(0x00c6e0ff).into()),
+                        border_transparent: Some(rgba(0x00c6e0ff).into()),
+                        border_disabled: Some(rgba(0x00c6e0ff).into()),
+                        elevated_surface_background: Some(rgba(0xe1eeefff).into()),
+                        surface_background: Some(rgba(0xe1eeefff).into()),
+                        background: Some(rgba(0xf4f6f6ff).into()),
+                        element_background: Some(rgba(0x089099ff).into()),
+                        element_hover: Some(rgba(0xd1eafaff).into()),
+                        element_selected: Some(rgba(0xb6e1e7ff).into()),
+                        drop_target_background: Some(rgba(0xb1c9ccff).into()),
+                        ghost_element_hover: Some(rgba(0xd1eafaff).into()),
+                        text: Some(rgba(0x005661ff).into()),
+                        tab_inactive_background: Some(rgba(0xcaedf2ff).into()),
+                        tab_active_background: Some(rgba(0xf4f6f6ff).into()),
+                        editor_background: Some(rgba(0xf4f6f6ff).into()),
+                        editor_gutter_background: Some(rgba(0xf4f6f6ff).into()),
+                        editor_line_number: Some(rgba(0xa0abacff).into()),
+                        editor_active_line_number: Some(rgba(0x005661ff).into()),
+                        terminal_background: Some(rgba(0xe1eeefff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x004d57ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xff3f00ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x00d17aff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xff8c00ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x0ea3ffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xff6b9eff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x00cae6ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xbbc3c4ff).into()),
+                        terminal_ansi_black: Some(rgba(0x003b41ff).into()),
+                        terminal_ansi_red: Some(rgba(0xe34d1bff).into()),
+                        terminal_ansi_green: Some(rgba(0x00b368ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xf49724ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x0094f0ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
+                        terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xff3f00ff).into()),
+                        error: Some(rgba(0xff3f00ff).into()),
+                        hidden: Some(rgba(0x70838dff).into()),
+                        warning: Some(rgba(0xe07a52ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x5841ffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x8ca6a6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x004d57ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x0094a8ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xff5792ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x00b368ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe64100ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctis Lilac".into(),
+                appearance: Appearance::Dark,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0xaea4f4ff).into()),
+                        border_variant: Some(rgba(0xaea4f4ff).into()),
+                        border_focused: Some(rgba(0xdedbf5ff).into()),
+                        border_selected: Some(rgba(0xaea4f4ff).into()),
+                        border_transparent: Some(rgba(0xaea4f4ff).into()),
+                        border_disabled: Some(rgba(0xaea4f4ff).into()),
+                        elevated_surface_background: Some(rgba(0xe9e7f3ff).into()),
+                        surface_background: Some(rgba(0xe9e7f3ff).into()),
+                        background: Some(rgba(0xf2f1f8ff).into()),
+                        element_background: Some(rgba(0x8d7ffeff).into()),
+                        element_hover: Some(rgba(0xd1cbfeff).into()),
+                        element_selected: Some(rgba(0xbcb6e7ff).into()),
+                        drop_target_background: Some(rgba(0xafaad4aa).into()),
+                        ghost_element_hover: Some(rgba(0xd1cbfeff).into()),
+                        text: Some(rgba(0x0c006bff).into()),
+                        tab_inactive_background: Some(rgba(0xe2dff6ff).into()),
+                        tab_active_background: Some(rgba(0xf2f1f8ff).into()),
+                        editor_background: Some(rgba(0xf2f1f8ff).into()),
+                        editor_gutter_background: Some(rgba(0xf2f1f8ff).into()),
+                        editor_line_number: Some(rgba(0x9c99b0ff).into()),
+                        editor_active_line_number: Some(rgba(0x0c006bff).into()),
+                        terminal_background: Some(rgba(0xe9e7f3ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x0f0080ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xff3f00ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x00d17aff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xff8c00ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x0ea3ffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xff6b9eff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x00cae6ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xbbc3c4ff).into()),
+                        terminal_ansi_black: Some(rgba(0x0c006bff).into()),
+                        terminal_ansi_red: Some(rgba(0xe34d1bff).into()),
+                        terminal_ansi_green: Some(rgba(0x00b368ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xf49724ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x0094f0ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
+                        terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xff3f00ff).into()),
+                        error: Some(rgba(0xff3f00ff).into()),
+                        hidden: Some(rgba(0x74708dff).into()),
+                        warning: Some(rgba(0xe07a52ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x5841ffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9995b7ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x0c006bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x0094a8ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xff5792ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x00b368ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe64100ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctis Lux".into(),
+                appearance: Appearance::Light,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x00c6e0ff).into()),
+                        border_variant: Some(rgba(0x00c6e0ff).into()),
+                        border_focused: Some(rgba(0xf2eddeff).into()),
+                        border_selected: Some(rgba(0x00c6e0ff).into()),
+                        border_transparent: Some(rgba(0x00c6e0ff).into()),
+                        border_disabled: Some(rgba(0x00c6e0ff).into()),
+                        elevated_surface_background: Some(rgba(0xf6eddaff).into()),
+                        surface_background: Some(rgba(0xf6eddaff).into()),
+                        background: Some(rgba(0xfef8ecff).into()),
+                        element_background: Some(rgba(0x089099ff).into()),
+                        element_hover: Some(rgba(0xd1f2f8ff).into()),
+                        element_selected: Some(rgba(0xb6e1e7ff).into()),
+                        drop_target_background: Some(rgba(0xcccab1ff).into()),
+                        ghost_element_hover: Some(rgba(0xd1f2f8ff).into()),
+                        text: Some(rgba(0x005661ff).into()),
+                        tab_inactive_background: Some(rgba(0xf0e9d6ff).into()),
+                        tab_active_background: Some(rgba(0xfef8ecff).into()),
+                        editor_background: Some(rgba(0xfef8ecff).into()),
+                        editor_gutter_background: Some(rgba(0xfef8ecff).into()),
+                        editor_line_number: Some(rgba(0xa0abacff).into()),
+                        editor_active_line_number: Some(rgba(0x005661ff).into()),
+                        terminal_background: Some(rgba(0xf6eddaff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x004d57ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xff3f00ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x00d17aff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xff8c00ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x0ea3ffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xff6b9eff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x00cae6ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xbbc3c4ff).into()),
+                        terminal_ansi_black: Some(rgba(0x003b41ff).into()),
+                        terminal_ansi_red: Some(rgba(0xe34d1bff).into()),
+                        terminal_ansi_green: Some(rgba(0x00b368ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xf49724ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x0094f0ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
+                        terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xff3f00ff).into()),
+                        error: Some(rgba(0xff3f00ff).into()),
+                        hidden: Some(rgba(0x878476ff).into()),
+                        warning: Some(rgba(0xe07a52ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x5841ffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x8ca6a6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x004d57ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x0094a8ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xff5792ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x00b368ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe64100ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctis Minimus".into(),
+                appearance: Appearance::Dark,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x496c83ff).into()),
+                        border_variant: Some(rgba(0x496c83ff).into()),
+                        border_focused: Some(rgba(0x202d37ff).into()),
+                        border_selected: Some(rgba(0x496c83ff).into()),
+                        border_transparent: Some(rgba(0x496c83ff).into()),
+                        border_disabled: Some(rgba(0x496c83ff).into()),
+                        elevated_surface_background: Some(rgba(0x0e1920ff).into()),
+                        surface_background: Some(rgba(0x0e1920ff).into()),
+                        background: Some(rgba(0x1b2932ff).into()),
+                        element_background: Some(rgba(0x2e616bff).into()),
+                        element_hover: Some(rgba(0x00558aff).into()),
+                        element_selected: Some(rgba(0x2c414eff).into()),
+                        drop_target_background: Some(rgba(0x152836ff).into()),
+                        ghost_element_hover: Some(rgba(0x00558aff).into()),
+                        text: Some(rgba(0xc5cdd3ff).into()),
+                        tab_inactive_background: Some(rgba(0x202d37ff).into()),
+                        tab_active_background: Some(rgba(0x1b2932ff).into()),
+                        editor_background: Some(rgba(0x1b2932ff).into()),
+                        editor_gutter_background: Some(rgba(0x1b2932ff).into()),
+                        editor_line_number: Some(rgba(0x5d6e79ff).into()),
+                        editor_active_line_number: Some(rgba(0xc5cdd3ff).into()),
+                        terminal_background: Some(rgba(0x0e1920ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x425866ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xca8468ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x84c8abff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xd1aa7bff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x68a4caff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xc88da2ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x84bfc8ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xc5d1d3ff).into()),
+                        terminal_ansi_black: Some(rgba(0x182935ff).into()),
+                        terminal_ansi_red: Some(rgba(0xc08872ff).into()),
+                        terminal_ansi_green: Some(rgba(0x72c09fff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xc8a984ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x6095b7ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xc28097ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x72b7c0ff).into()),
+                        terminal_ansi_white: Some(rgba(0xc5cdd3ff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xb96245ff).into()),
+                        error: Some(rgba(0xb96245ff).into()),
+                        hidden: Some(rgba(0x96a8b6ff).into()),
+                        warning: Some(rgba(0xffa857ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x7067b1ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x5d7787ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc5cdd3ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x3e848dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc88da2ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x72c09fff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc37455ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctis".into(),
+                appearance: Appearance::Dark,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x0d6571ff).into()),
+                        border_variant: Some(rgba(0x0d6571ff).into()),
+                        border_focused: Some(rgba(0x063940ff).into()),
+                        border_selected: Some(rgba(0x0d6571ff).into()),
+                        border_transparent: Some(rgba(0x0d6571ff).into()),
+                        border_disabled: Some(rgba(0x0d6571ff).into()),
+                        elevated_surface_background: Some(rgba(0x03181aff).into()),
+                        surface_background: Some(rgba(0x03181aff).into()),
+                        background: Some(rgba(0x052428ff).into()),
+                        element_background: Some(rgba(0x089099ff).into()),
+                        element_hover: Some(rgba(0x0b505aff).into()),
+                        element_selected: Some(rgba(0x0d6571ff).into()),
+                        drop_target_background: Some(rgba(0x00404dff).into()),
+                        ghost_element_hover: Some(rgba(0x0b505aff).into()),
+                        text: Some(rgba(0xb1c9ccff).into()),
+                        tab_inactive_background: Some(rgba(0x052e32ff).into()),
+                        tab_active_background: Some(rgba(0x052428ff).into()),
+                        editor_background: Some(rgba(0x052428ff).into()),
+                        editor_gutter_background: Some(rgba(0x052428ff).into()),
+                        editor_line_number: Some(rgba(0x4e6b6eff).into()),
+                        editor_active_line_number: Some(rgba(0xb1c9ccff).into()),
+                        terminal_background: Some(rgba(0x03181aff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x47686cff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xc1d4d7ff).into()),
+                        terminal_ansi_black: Some(rgba(0x324a4dff).into()),
+                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
+                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
+                        terminal_ansi_white: Some(rgba(0xb1c9ccff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xe34d1bff).into()),
+                        error: Some(rgba(0xe34d1bff).into()),
+                        hidden: Some(rgba(0x87a7abff).into()),
+                        warning: Some(rgba(0xffa487ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x705febff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x5b858bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb1c9ccff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x15a2b6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xdf759aff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x49e9a6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe66432ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctis Obscuro".into(),
+                appearance: Appearance::Dark,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x0d6571ff).into()),
+                        border_variant: Some(rgba(0x0d6571ff).into()),
+                        border_focused: Some(rgba(0x052e32ff).into()),
+                        border_selected: Some(rgba(0x0d6571ff).into()),
+                        border_transparent: Some(rgba(0x0d6571ff).into()),
+                        border_disabled: Some(rgba(0x0d6571ff).into()),
+                        elevated_surface_background: Some(rgba(0x020c0eff).into()),
+                        surface_background: Some(rgba(0x020c0eff).into()),
+                        background: Some(rgba(0x031316ff).into()),
+                        element_background: Some(rgba(0x089099ff).into()),
+                        element_hover: Some(rgba(0x0b505aff).into()),
+                        element_selected: Some(rgba(0x0d6571ff).into()),
+                        drop_target_background: Some(rgba(0x00404dff).into()),
+                        ghost_element_hover: Some(rgba(0x0b505aff).into()),
+                        text: Some(rgba(0xb1c9ccff).into()),
+                        tab_inactive_background: Some(rgba(0x052e32ff).into()),
+                        tab_active_background: Some(rgba(0x031316ff).into()),
+                        editor_background: Some(rgba(0x031316ff).into()),
+                        editor_gutter_background: Some(rgba(0x031316ff).into()),
+                        editor_line_number: Some(rgba(0x4e6b6eff).into()),
+                        editor_active_line_number: Some(rgba(0xb1c9ccff).into()),
+                        terminal_background: Some(rgba(0x020c0eff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x47686cff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xc1d4d7ff).into()),
+                        terminal_ansi_black: Some(rgba(0x324a4dff).into()),
+                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
+                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
+                        terminal_ansi_white: Some(rgba(0xb1c9ccff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xe34d1bff).into()),
+                        error: Some(rgba(0xe34d1bff).into()),
+                        hidden: Some(rgba(0x87a7abff).into()),
+                        warning: Some(rgba(0xffa487ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x705febff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x5b858bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb1c9ccff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x15a2b6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xdf759aff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x49e9a6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe66432ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctis Sereno".into(),
+                appearance: Appearance::Dark,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x0d6571ff).into()),
+                        border_variant: Some(rgba(0x0d6571ff).into()),
+                        border_focused: Some(rgba(0x052e32ff).into()),
+                        border_selected: Some(rgba(0x0d6571ff).into()),
+                        border_transparent: Some(rgba(0x0d6571ff).into()),
+                        border_disabled: Some(rgba(0x0d6571ff).into()),
+                        elevated_surface_background: Some(rgba(0x020c0eff).into()),
+                        surface_background: Some(rgba(0x020c0eff).into()),
+                        background: Some(rgba(0x031316ff).into()),
+                        element_background: Some(rgba(0x089099ff).into()),
+                        element_hover: Some(rgba(0x0b505aff).into()),
+                        element_selected: Some(rgba(0x0d6571ff).into()),
+                        drop_target_background: Some(rgba(0x00404dff).into()),
+                        ghost_element_hover: Some(rgba(0x0b505aff).into()),
+                        text: Some(rgba(0xb1c9ccff).into()),
+                        tab_inactive_background: Some(rgba(0x052e32ff).into()),
+                        tab_active_background: Some(rgba(0x031316ff).into()),
+                        editor_background: Some(rgba(0x031316ff).into()),
+                        editor_gutter_background: Some(rgba(0x031316ff).into()),
+                        editor_line_number: Some(rgba(0x4e6b6eff).into()),
+                        editor_active_line_number: Some(rgba(0xb1c9ccff).into()),
+                        terminal_background: Some(rgba(0x020c0eff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x47686cff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xc1d4d7ff).into()),
+                        terminal_ansi_black: Some(rgba(0x324a4dff).into()),
+                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
+                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
+                        terminal_ansi_white: Some(rgba(0xb1c9ccff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xe34d1bff).into()),
+                        error: Some(rgba(0xe34d1bff).into()),
+                        hidden: Some(rgba(0x87a7abff).into()),
+                        warning: Some(rgba(0xffa487ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x705febff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x5b858bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb1c9ccff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x15a2b6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xdf759aff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x49e9a6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe66432ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctis Uva".into(),
+                appearance: Appearance::Dark,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x6d66a7ff).into()),
+                        border_variant: Some(rgba(0x6d66a7ff).into()),
+                        border_focused: Some(rgba(0x2f2c49ff).into()),
+                        border_selected: Some(rgba(0x6d66a7ff).into()),
+                        border_transparent: Some(rgba(0x6d66a7ff).into()),
+                        border_disabled: Some(rgba(0x6d66a7ff).into()),
+                        elevated_surface_background: Some(rgba(0x1f1d30ff).into()),
+                        surface_background: Some(rgba(0x1f1d30ff).into()),
+                        background: Some(rgba(0x292640ff).into()),
+                        element_background: Some(rgba(0x007e99ff).into()),
+                        element_hover: Some(rgba(0x383866ff).into()),
+                        element_selected: Some(rgba(0x322e5cff).into()),
+                        drop_target_background: Some(rgba(0x202040ff).into()),
+                        ghost_element_hover: Some(rgba(0x383866ff).into()),
+                        text: Some(rgba(0xc5c2d6ff).into()),
+                        tab_inactive_background: Some(rgba(0x2f2c49ff).into()),
+                        tab_active_background: Some(rgba(0x292640ff).into()),
+                        editor_background: Some(rgba(0x292640ff).into()),
+                        editor_gutter_background: Some(rgba(0x292640ff).into()),
+                        editor_line_number: Some(rgba(0x5c5973ff).into()),
+                        editor_active_line_number: Some(rgba(0xc5c2d6ff).into()),
+                        terminal_background: Some(rgba(0x1f1d30ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x504e65ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xc5c2d6ff).into()),
+                        terminal_ansi_black: Some(rgba(0x302f3dff).into()),
+                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
+                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
+                        terminal_ansi_white: Some(rgba(0xb6b3ccff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xe34d1bff).into()),
+                        error: Some(rgba(0xe34d1bff).into()),
+                        hidden: Some(rgba(0xa9a5c0ff).into()),
+                        warning: Some(rgba(0xffa857ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x705febff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x716b93ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc5c2d6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x15a2b6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xdf759aff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x49e9a6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe66432ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+            UserTheme {
+                name: "Noctis Viola".into(),
+                appearance: Appearance::Dark,
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x8666a7ff).into()),
+                        border_variant: Some(rgba(0x8666a7ff).into()),
+                        border_focused: Some(rgba(0x3d2e4dff).into()),
+                        border_selected: Some(rgba(0x8666a7ff).into()),
+                        border_transparent: Some(rgba(0x8666a7ff).into()),
+                        border_disabled: Some(rgba(0x8666a7ff).into()),
+                        elevated_surface_background: Some(rgba(0x291d35ff).into()),
+                        surface_background: Some(rgba(0x291d35ff).into()),
+                        background: Some(rgba(0x30243dff).into()),
+                        element_background: Some(rgba(0x007e99ff).into()),
+                        element_hover: Some(rgba(0x69438dff).into()),
+                        element_selected: Some(rgba(0x472e60ff).into()),
+                        drop_target_background: Some(rgba(0x302040ff).into()),
+                        ghost_element_hover: Some(rgba(0x69438dff).into()),
+                        text: Some(rgba(0xccbfd9ff).into()),
+                        tab_inactive_background: Some(rgba(0x3d2e4dff).into()),
+                        tab_active_background: Some(rgba(0x30243dff).into()),
+                        editor_background: Some(rgba(0x30243dff).into()),
+                        editor_gutter_background: Some(rgba(0x30243dff).into()),
+                        editor_line_number: Some(rgba(0x665973ff).into()),
+                        editor_active_line_number: Some(rgba(0xccbfd9ff).into()),
+                        terminal_background: Some(rgba(0x291d35ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x594e65ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xccbfd9ff).into()),
+                        terminal_ansi_black: Some(rgba(0x362f3dff).into()),
+                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
+                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
+                        terminal_ansi_white: Some(rgba(0xbfafcfff).into()),
+                        ..Default::default()
+                    },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xe34d1bff).into()),
+                        error: Some(rgba(0xe34d1bff).into()),
+                        hidden: Some(rgba(0xb3a5c0ff).into()),
+                        warning: Some(rgba(0xffa857ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x705febff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x7e6499ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xccbfd9ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constructor".into(),
+                                UserHighlightStyle {
+                                    font_weight: Some(UserFontWeight(700.0)),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x15a2b6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xdf759aff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x49e9a6ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe66432ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
+                },
+            },
+        ],
+    }
+}

crates/theme2/src/themes/nord.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn nord() -> UserThemeFamily {
@@ -26,9 +28,17 @@ pub fn nord() -> UserThemeFamily {
                     surface_background: Some(rgba(0x2e3440ff).into()),
                     background: Some(rgba(0x2e3440ff).into()),
                     element_background: Some(rgba(0x88bfd0ee).into()),
+                    element_hover: Some(rgba(0x3b4252ff).into()),
+                    element_selected: Some(rgba(0x88bfd0ff).into()),
+                    drop_target_background: Some(rgba(0x88bfd099).into()),
+                    ghost_element_hover: Some(rgba(0x3b4252ff).into()),
                     text: Some(rgba(0xd8dee9ff).into()),
                     tab_inactive_background: Some(rgba(0x2e3440ff).into()),
                     tab_active_background: Some(rgba(0x3b4252ff).into()),
+                    editor_background: Some(rgba(0x2e3440ff).into()),
+                    editor_gutter_background: Some(rgba(0x2e3440ff).into()),
+                    editor_line_number: Some(rgba(0x4c566aff).into()),
+                    editor_active_line_number: Some(rgba(0xd8dee9ff).into()),
                     terminal_background: Some(rgba(0x2e3440ff).into()),
                     terminal_ansi_bright_black: Some(rgba(0x4c566aff).into()),
                     terminal_ansi_bright_red: Some(rgba(0xbf616aff).into()),
@@ -48,6 +58,87 @@ pub fn nord() -> UserThemeFamily {
                     terminal_ansi_white: Some(rgba(0xe5e9f0ff).into()),
                     ..Default::default()
                 },
+                status: StatusColorsRefinement {
+                    deleted: Some(rgba(0xbf616aff).into()),
+                    error: Some(rgba(0xbf616aff).into()),
+                    hidden: Some(rgba(0xd8dee966).into()),
+                    warning: Some(rgba(0xebcb8bff).into()),
+                    ..Default::default()
+                },
+                syntax: Some(UserSyntaxTheme {
+                    highlights: vec![
+                        (
+                            "attribute".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x8fbcbbff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "boolean".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x81a1c1ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "comment".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x606e87ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "constant".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xebcb8bff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "emphasis".into(),
+                            UserHighlightStyle {
+                                font_style: Some(UserFontStyle::Italic),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "function".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x88bfd0ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "keyword".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x81a1c1ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "punctuation".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xeceff4ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "string".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xa3be8cff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "variable".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x81a1c1ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                    ],
+                }),
             },
         }],
     }

crates/theme2/src/themes/notctis.rs 🔗

@@ -1,446 +0,0 @@
-// This file was generated by the `theme_importer`.
-// Be careful when modifying it by hand.
-
-use gpui::rgba;
-
-use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
-};
-
-pub fn notctis() -> UserThemeFamily {
-    UserThemeFamily {
-        name: "Notctis".into(),
-        author: "Liviu Schera (liviuschera)".into(),
-        themes: vec![
-            UserTheme {
-                name: "Noctis Azureus".into(),
-                appearance: Appearance::Dark,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x1579b6ff).into()),
-                        border_variant: Some(rgba(0x1579b6ff).into()),
-                        border_focused: Some(rgba(0x1579b6ff).into()),
-                        border_selected: Some(rgba(0x1579b6ff).into()),
-                        border_transparent: Some(rgba(0x1579b6ff).into()),
-                        border_disabled: Some(rgba(0x1579b6ff).into()),
-                        elevated_surface_background: Some(rgba(0x051b28ff).into()),
-                        surface_background: Some(rgba(0x051b28ff).into()),
-                        background: Some(rgba(0x07263aff).into()),
-                        element_background: Some(rgba(0x007e99ff).into()),
-                        text: Some(rgba(0xbecfdaff).into()),
-                        tab_inactive_background: Some(rgba(0x08324eff).into()),
-                        tab_active_background: Some(rgba(0x07263aff).into()),
-                        terminal_background: Some(rgba(0x051b28ff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x475e6cff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xbecfdaff).into()),
-                        terminal_ansi_black: Some(rgba(0x28343dff).into()),
-                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
-                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
-                        terminal_ansi_white: Some(rgba(0xaec3d0ff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctis Bordo".into(),
-                appearance: Appearance::Dark,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x997582ff).into()),
-                        border_variant: Some(rgba(0x997582ff).into()),
-                        border_focused: Some(rgba(0x997582ff).into()),
-                        border_selected: Some(rgba(0x997582ff).into()),
-                        border_transparent: Some(rgba(0x997582ff).into()),
-                        border_disabled: Some(rgba(0x997582ff).into()),
-                        elevated_surface_background: Some(rgba(0x272022ff).into()),
-                        surface_background: Some(rgba(0x272022ff).into()),
-                        background: Some(rgba(0x322a2dff).into()),
-                        element_background: Some(rgba(0x007e99ff).into()),
-                        text: Some(rgba(0xcbbec2ff).into()),
-                        tab_inactive_background: Some(rgba(0x413036ff).into()),
-                        tab_active_background: Some(rgba(0x322a2dff).into()),
-                        terminal_background: Some(rgba(0x272022ff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x69545bff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xcbbec2ff).into()),
-                        terminal_ansi_black: Some(rgba(0x47393eff).into()),
-                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
-                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
-                        terminal_ansi_white: Some(rgba(0xb9acb0ff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctus Hibernus".into(),
-                appearance: Appearance::Light,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x00c6e0ff).into()),
-                        border_variant: Some(rgba(0x00c6e0ff).into()),
-                        border_focused: Some(rgba(0x00c6e0ff).into()),
-                        border_selected: Some(rgba(0x00c6e0ff).into()),
-                        border_transparent: Some(rgba(0x00c6e0ff).into()),
-                        border_disabled: Some(rgba(0x00c6e0ff).into()),
-                        elevated_surface_background: Some(rgba(0xe1eeefff).into()),
-                        surface_background: Some(rgba(0xe1eeefff).into()),
-                        background: Some(rgba(0xf4f6f6ff).into()),
-                        element_background: Some(rgba(0x089099ff).into()),
-                        text: Some(rgba(0x005661ff).into()),
-                        tab_inactive_background: Some(rgba(0xcaedf2ff).into()),
-                        tab_active_background: Some(rgba(0xf4f6f6ff).into()),
-                        terminal_background: Some(rgba(0xe1eeefff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x004d57ff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xff3f00ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x00d17aff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xff8c00ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x0ea3ffff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xff6b9eff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x00cae6ff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xbbc3c4ff).into()),
-                        terminal_ansi_black: Some(rgba(0x003b41ff).into()),
-                        terminal_ansi_red: Some(rgba(0xe34d1bff).into()),
-                        terminal_ansi_green: Some(rgba(0x00b368ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xf49724ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x0094f0ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
-                        terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctis Lilac".into(),
-                appearance: Appearance::Dark,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0xaea4f4ff).into()),
-                        border_variant: Some(rgba(0xaea4f4ff).into()),
-                        border_focused: Some(rgba(0xaea4f4ff).into()),
-                        border_selected: Some(rgba(0xaea4f4ff).into()),
-                        border_transparent: Some(rgba(0xaea4f4ff).into()),
-                        border_disabled: Some(rgba(0xaea4f4ff).into()),
-                        elevated_surface_background: Some(rgba(0xe9e7f3ff).into()),
-                        surface_background: Some(rgba(0xe9e7f3ff).into()),
-                        background: Some(rgba(0xf2f1f8ff).into()),
-                        element_background: Some(rgba(0x8d7ffeff).into()),
-                        text: Some(rgba(0x0c006bff).into()),
-                        tab_inactive_background: Some(rgba(0xe2dff6ff).into()),
-                        tab_active_background: Some(rgba(0xf2f1f8ff).into()),
-                        terminal_background: Some(rgba(0xe9e7f3ff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x0f0080ff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xff3f00ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x00d17aff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xff8c00ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x0ea3ffff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xff6b9eff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x00cae6ff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xbbc3c4ff).into()),
-                        terminal_ansi_black: Some(rgba(0x0c006bff).into()),
-                        terminal_ansi_red: Some(rgba(0xe34d1bff).into()),
-                        terminal_ansi_green: Some(rgba(0x00b368ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xf49724ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x0094f0ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
-                        terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctis Lux".into(),
-                appearance: Appearance::Light,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x00c6e0ff).into()),
-                        border_variant: Some(rgba(0x00c6e0ff).into()),
-                        border_focused: Some(rgba(0x00c6e0ff).into()),
-                        border_selected: Some(rgba(0x00c6e0ff).into()),
-                        border_transparent: Some(rgba(0x00c6e0ff).into()),
-                        border_disabled: Some(rgba(0x00c6e0ff).into()),
-                        elevated_surface_background: Some(rgba(0xf6eddaff).into()),
-                        surface_background: Some(rgba(0xf6eddaff).into()),
-                        background: Some(rgba(0xfef8ecff).into()),
-                        element_background: Some(rgba(0x089099ff).into()),
-                        text: Some(rgba(0x005661ff).into()),
-                        tab_inactive_background: Some(rgba(0xf0e9d6ff).into()),
-                        tab_active_background: Some(rgba(0xfef8ecff).into()),
-                        terminal_background: Some(rgba(0xf6eddaff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x004d57ff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xff3f00ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x00d17aff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xff8c00ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x0ea3ffff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xff6b9eff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x00cae6ff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xbbc3c4ff).into()),
-                        terminal_ansi_black: Some(rgba(0x003b41ff).into()),
-                        terminal_ansi_red: Some(rgba(0xe34d1bff).into()),
-                        terminal_ansi_green: Some(rgba(0x00b368ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xf49724ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x0094f0ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
-                        terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctis Minimus".into(),
-                appearance: Appearance::Dark,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x496c83ff).into()),
-                        border_variant: Some(rgba(0x496c83ff).into()),
-                        border_focused: Some(rgba(0x496c83ff).into()),
-                        border_selected: Some(rgba(0x496c83ff).into()),
-                        border_transparent: Some(rgba(0x496c83ff).into()),
-                        border_disabled: Some(rgba(0x496c83ff).into()),
-                        elevated_surface_background: Some(rgba(0x0e1920ff).into()),
-                        surface_background: Some(rgba(0x0e1920ff).into()),
-                        background: Some(rgba(0x1b2932ff).into()),
-                        element_background: Some(rgba(0x2e616bff).into()),
-                        text: Some(rgba(0xc5cdd3ff).into()),
-                        tab_inactive_background: Some(rgba(0x202d37ff).into()),
-                        tab_active_background: Some(rgba(0x1b2932ff).into()),
-                        terminal_background: Some(rgba(0x0e1920ff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x425866ff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xca8468ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x84c8abff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xd1aa7bff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x68a4caff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xc88da2ff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x84bfc8ff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xc5d1d3ff).into()),
-                        terminal_ansi_black: Some(rgba(0x182935ff).into()),
-                        terminal_ansi_red: Some(rgba(0xc08872ff).into()),
-                        terminal_ansi_green: Some(rgba(0x72c09fff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xc8a984ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x6095b7ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xc28097ff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x72b7c0ff).into()),
-                        terminal_ansi_white: Some(rgba(0xc5cdd3ff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctis".into(),
-                appearance: Appearance::Dark,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x0d6571ff).into()),
-                        border_variant: Some(rgba(0x0d6571ff).into()),
-                        border_focused: Some(rgba(0x0d6571ff).into()),
-                        border_selected: Some(rgba(0x0d6571ff).into()),
-                        border_transparent: Some(rgba(0x0d6571ff).into()),
-                        border_disabled: Some(rgba(0x0d6571ff).into()),
-                        elevated_surface_background: Some(rgba(0x03181aff).into()),
-                        surface_background: Some(rgba(0x03181aff).into()),
-                        background: Some(rgba(0x052428ff).into()),
-                        element_background: Some(rgba(0x089099ff).into()),
-                        text: Some(rgba(0xb1c9ccff).into()),
-                        tab_inactive_background: Some(rgba(0x052e32ff).into()),
-                        tab_active_background: Some(rgba(0x052428ff).into()),
-                        terminal_background: Some(rgba(0x03181aff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x47686cff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xc1d4d7ff).into()),
-                        terminal_ansi_black: Some(rgba(0x324a4dff).into()),
-                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
-                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
-                        terminal_ansi_white: Some(rgba(0xb1c9ccff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctis Obscuro".into(),
-                appearance: Appearance::Dark,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x0d6571ff).into()),
-                        border_variant: Some(rgba(0x0d6571ff).into()),
-                        border_focused: Some(rgba(0x0d6571ff).into()),
-                        border_selected: Some(rgba(0x0d6571ff).into()),
-                        border_transparent: Some(rgba(0x0d6571ff).into()),
-                        border_disabled: Some(rgba(0x0d6571ff).into()),
-                        elevated_surface_background: Some(rgba(0x020c0eff).into()),
-                        surface_background: Some(rgba(0x020c0eff).into()),
-                        background: Some(rgba(0x031316ff).into()),
-                        element_background: Some(rgba(0x089099ff).into()),
-                        text: Some(rgba(0xb1c9ccff).into()),
-                        tab_inactive_background: Some(rgba(0x052e32ff).into()),
-                        tab_active_background: Some(rgba(0x031316ff).into()),
-                        terminal_background: Some(rgba(0x020c0eff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x47686cff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xc1d4d7ff).into()),
-                        terminal_ansi_black: Some(rgba(0x324a4dff).into()),
-                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
-                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
-                        terminal_ansi_white: Some(rgba(0xb1c9ccff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctis Sereno".into(),
-                appearance: Appearance::Dark,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x0d6571ff).into()),
-                        border_variant: Some(rgba(0x0d6571ff).into()),
-                        border_focused: Some(rgba(0x0d6571ff).into()),
-                        border_selected: Some(rgba(0x0d6571ff).into()),
-                        border_transparent: Some(rgba(0x0d6571ff).into()),
-                        border_disabled: Some(rgba(0x0d6571ff).into()),
-                        elevated_surface_background: Some(rgba(0x020c0eff).into()),
-                        surface_background: Some(rgba(0x020c0eff).into()),
-                        background: Some(rgba(0x031316ff).into()),
-                        element_background: Some(rgba(0x089099ff).into()),
-                        text: Some(rgba(0xb1c9ccff).into()),
-                        tab_inactive_background: Some(rgba(0x052e32ff).into()),
-                        tab_active_background: Some(rgba(0x031316ff).into()),
-                        terminal_background: Some(rgba(0x020c0eff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x47686cff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xc1d4d7ff).into()),
-                        terminal_ansi_black: Some(rgba(0x324a4dff).into()),
-                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
-                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
-                        terminal_ansi_white: Some(rgba(0xb1c9ccff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctis Uva".into(),
-                appearance: Appearance::Dark,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x6d66a7ff).into()),
-                        border_variant: Some(rgba(0x6d66a7ff).into()),
-                        border_focused: Some(rgba(0x6d66a7ff).into()),
-                        border_selected: Some(rgba(0x6d66a7ff).into()),
-                        border_transparent: Some(rgba(0x6d66a7ff).into()),
-                        border_disabled: Some(rgba(0x6d66a7ff).into()),
-                        elevated_surface_background: Some(rgba(0x1f1d30ff).into()),
-                        surface_background: Some(rgba(0x1f1d30ff).into()),
-                        background: Some(rgba(0x292640ff).into()),
-                        element_background: Some(rgba(0x007e99ff).into()),
-                        text: Some(rgba(0xc5c2d6ff).into()),
-                        tab_inactive_background: Some(rgba(0x2f2c49ff).into()),
-                        tab_active_background: Some(rgba(0x292640ff).into()),
-                        terminal_background: Some(rgba(0x1f1d30ff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x504e65ff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xc5c2d6ff).into()),
-                        terminal_ansi_black: Some(rgba(0x302f3dff).into()),
-                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
-                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
-                        terminal_ansi_white: Some(rgba(0xb6b3ccff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-            UserTheme {
-                name: "Noctis Viola".into(),
-                appearance: Appearance::Dark,
-                styles: UserThemeStylesRefinement {
-                    colors: ThemeColorsRefinement {
-                        border: Some(rgba(0x8666a7ff).into()),
-                        border_variant: Some(rgba(0x8666a7ff).into()),
-                        border_focused: Some(rgba(0x8666a7ff).into()),
-                        border_selected: Some(rgba(0x8666a7ff).into()),
-                        border_transparent: Some(rgba(0x8666a7ff).into()),
-                        border_disabled: Some(rgba(0x8666a7ff).into()),
-                        elevated_surface_background: Some(rgba(0x291d35ff).into()),
-                        surface_background: Some(rgba(0x291d35ff).into()),
-                        background: Some(rgba(0x30243dff).into()),
-                        element_background: Some(rgba(0x007e99ff).into()),
-                        text: Some(rgba(0xccbfd9ff).into()),
-                        tab_inactive_background: Some(rgba(0x3d2e4dff).into()),
-                        tab_active_background: Some(rgba(0x30243dff).into()),
-                        terminal_background: Some(rgba(0x291d35ff).into()),
-                        terminal_ansi_bright_black: Some(rgba(0x594e65ff).into()),
-                        terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
-                        terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
-                        terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
-                        terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
-                        terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
-                        terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
-                        terminal_ansi_bright_white: Some(rgba(0xccbfd9ff).into()),
-                        terminal_ansi_black: Some(rgba(0x362f3dff).into()),
-                        terminal_ansi_red: Some(rgba(0xe66432ff).into()),
-                        terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
-                        terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
-                        terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
-                        terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
-                        terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
-                        terminal_ansi_white: Some(rgba(0xbfafcfff).into()),
-                        ..Default::default()
-                    },
-                },
-            },
-        ],
-    }
-}

crates/theme2/src/themes/palenight.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn palenight() -> UserThemeFamily {
@@ -27,9 +29,17 @@ pub fn palenight() -> UserThemeFamily {
                         surface_background: Some(rgba(0x292c3eff).into()),
                         background: Some(rgba(0x292c3eff).into()),
                         element_background: Some(rgba(0x7d56c1cc).into()),
+                        element_hover: Some(rgba(0x0000001a).into()),
+                        element_selected: Some(rgba(0x7d56c1ff).into()),
+                        drop_target_background: Some(rgba(0x2e3245ff).into()),
+                        ghost_element_hover: Some(rgba(0x0000001a).into()),
                         text: Some(rgba(0xffffffff).into()),
                         tab_inactive_background: Some(rgba(0x31364aff).into()),
                         tab_active_background: Some(rgba(0x292c3eff).into()),
+                        editor_background: Some(rgba(0x292c3eff).into()),
+                        editor_gutter_background: Some(rgba(0x292c3eff).into()),
+                        editor_line_number: Some(rgba(0x4c5374ff).into()),
+                        editor_active_line_number: Some(rgba(0xbfc7d5ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x676e95ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xff5571ff).into()),
                         terminal_ansi_bright_green: Some(rgba(0xc3e88dff).into()),
@@ -48,6 +58,73 @@ pub fn palenight() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xffffffff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xef524fff).into()),
+                        error: Some(rgba(0xef524fff).into()),
+                        hidden: Some(rgba(0x9199c8ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffcb6bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x687097ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc792eaff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc3e88dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xff5571ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -65,9 +142,17 @@ pub fn palenight() -> UserThemeFamily {
                         surface_background: Some(rgba(0x292c3eff).into()),
                         background: Some(rgba(0x292c3eff).into()),
                         element_background: Some(rgba(0x7d56c1cc).into()),
+                        element_hover: Some(rgba(0x0000001a).into()),
+                        element_selected: Some(rgba(0x7d56c1ff).into()),
+                        drop_target_background: Some(rgba(0x2e3245ff).into()),
+                        ghost_element_hover: Some(rgba(0x0000001a).into()),
                         text: Some(rgba(0xffffffff).into()),
                         tab_inactive_background: Some(rgba(0x31364aff).into()),
                         tab_active_background: Some(rgba(0x292c3eff).into()),
+                        editor_background: Some(rgba(0x292c3eff).into()),
+                        editor_gutter_background: Some(rgba(0x292c3eff).into()),
+                        editor_line_number: Some(rgba(0x4c5374ff).into()),
+                        editor_active_line_number: Some(rgba(0xbfc7d5ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x676e95ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xff5571ff).into()),
                         terminal_ansi_bright_green: Some(rgba(0xc3e88dff).into()),
@@ -86,6 +171,73 @@ pub fn palenight() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xffffffff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xef524fff).into()),
+                        error: Some(rgba(0xef524fff).into()),
+                        hidden: Some(rgba(0x9199c8ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffcb6bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x687097ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc792eaff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc3e88dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xff5571ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -103,9 +255,17 @@ pub fn palenight() -> UserThemeFamily {
                         surface_background: Some(rgba(0x25283aff).into()),
                         background: Some(rgba(0x292c3eff).into()),
                         element_background: Some(rgba(0x7d56c1cc).into()),
+                        element_hover: Some(rgba(0x0000001a).into()),
+                        element_selected: Some(rgba(0x7d56c1ff).into()),
+                        drop_target_background: Some(rgba(0x2e3245ff).into()),
+                        ghost_element_hover: Some(rgba(0x0000001a).into()),
                         text: Some(rgba(0xffffffff).into()),
                         tab_inactive_background: Some(rgba(0x31364aff).into()),
                         tab_active_background: Some(rgba(0x25283aff).into()),
+                        editor_background: Some(rgba(0x292c3eff).into()),
+                        editor_gutter_background: Some(rgba(0x292c3eff).into()),
+                        editor_line_number: Some(rgba(0x4c5374ff).into()),
+                        editor_active_line_number: Some(rgba(0xbfc7d5ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x676e95ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xff5571ff).into()),
                         terminal_ansi_bright_green: Some(rgba(0xc3e88dff).into()),
@@ -124,6 +284,73 @@ pub fn palenight() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xffffffff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xef524fff).into()),
+                        error: Some(rgba(0xef524fff).into()),
+                        hidden: Some(rgba(0x9199c8ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xffcb6bff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x687097ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x82aaffff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc792eaff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc3e88dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xff5571ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
         ],

crates/theme2/src/themes/rose_pine.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn rose_pine() -> UserThemeFamily {
@@ -19,7 +21,7 @@ pub fn rose_pine() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x000000ff).into()),
                         border_variant: Some(rgba(0x000000ff).into()),
-                        border_focused: Some(rgba(0x000000ff).into()),
+                        border_focused: Some(rgba(0x6e6a8633).into()),
                         border_selected: Some(rgba(0x000000ff).into()),
                         border_transparent: Some(rgba(0x000000ff).into()),
                         border_disabled: Some(rgba(0x000000ff).into()),
@@ -27,9 +29,17 @@ pub fn rose_pine() -> UserThemeFamily {
                         surface_background: Some(rgba(0x1f1d2eff).into()),
                         background: Some(rgba(0x191724ff).into()),
                         element_background: Some(rgba(0xebbcbaff).into()),
+                        element_hover: Some(rgba(0x6e6a861a).into()),
+                        element_selected: Some(rgba(0x6e6a8633).into()),
+                        drop_target_background: Some(rgba(0x1f1d2eff).into()),
+                        ghost_element_hover: Some(rgba(0x6e6a861a).into()),
                         text: Some(rgba(0xe0def4ff).into()),
                         tab_inactive_background: Some(rgba(0x000000ff).into()),
                         tab_active_background: Some(rgba(0x6e6a861a).into()),
+                        editor_background: Some(rgba(0x191724ff).into()),
+                        editor_gutter_background: Some(rgba(0x191724ff).into()),
+                        editor_line_number: Some(rgba(0x908caaff).into()),
+                        editor_active_line_number: Some(rgba(0xe0def4ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x908caaff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xeb6f92ff).into()),
                         terminal_ansi_bright_green: Some(rgba(0x30738fff).into()),
@@ -48,6 +58,75 @@ pub fn rose_pine() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xe0def4ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xeb6f92ff).into()),
+                        error: Some(rgba(0xeb6f92ff).into()),
+                        hidden: Some(rgba(0x908caaff).into()),
+                        warning: Some(rgba(0xf5c177ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc4a7e7ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xebbcbaff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x6e6a86ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x30738fff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "punctuation".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x908caaff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xf5c177ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9ccfd8ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe0def4ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -57,7 +136,7 @@ pub fn rose_pine() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x000000ff).into()),
                         border_variant: Some(rgba(0x000000ff).into()),
-                        border_focused: Some(rgba(0x000000ff).into()),
+                        border_focused: Some(rgba(0x817c9c26).into()),
                         border_selected: Some(rgba(0x000000ff).into()),
                         border_transparent: Some(rgba(0x000000ff).into()),
                         border_disabled: Some(rgba(0x000000ff).into()),
@@ -65,9 +144,17 @@ pub fn rose_pine() -> UserThemeFamily {
                         surface_background: Some(rgba(0x2a273eff).into()),
                         background: Some(rgba(0x232136ff).into()),
                         element_background: Some(rgba(0xea9a97ff).into()),
+                        element_hover: Some(rgba(0x817c9c14).into()),
+                        element_selected: Some(rgba(0x817c9c26).into()),
+                        drop_target_background: Some(rgba(0x2a273eff).into()),
+                        ghost_element_hover: Some(rgba(0x817c9c14).into()),
                         text: Some(rgba(0xe0def4ff).into()),
                         tab_inactive_background: Some(rgba(0x000000ff).into()),
                         tab_active_background: Some(rgba(0x817c9c14).into()),
+                        editor_background: Some(rgba(0x232136ff).into()),
+                        editor_gutter_background: Some(rgba(0x232136ff).into()),
+                        editor_line_number: Some(rgba(0x908caaff).into()),
+                        editor_active_line_number: Some(rgba(0xe0def4ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x908caaff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xeb6f92ff).into()),
                         terminal_ansi_bright_green: Some(rgba(0x3d8fb0ff).into()),
@@ -86,6 +173,75 @@ pub fn rose_pine() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xe0def4ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xeb6f92ff).into()),
+                        error: Some(rgba(0xeb6f92ff).into()),
+                        hidden: Some(rgba(0x908caaff).into()),
+                        warning: Some(rgba(0xf5c177ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xc4a7e7ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xea9a97ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x6e6a86ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x3d8fb0ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "punctuation".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x908caaff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xf5c177ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9ccfd8ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xe0def4ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -95,7 +251,7 @@ pub fn rose_pine() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x000000ff).into()),
                         border_variant: Some(rgba(0x000000ff).into()),
-                        border_focused: Some(rgba(0x000000ff).into()),
+                        border_focused: Some(rgba(0x6e6a8614).into()),
                         border_selected: Some(rgba(0x000000ff).into()),
                         border_transparent: Some(rgba(0x000000ff).into()),
                         border_disabled: Some(rgba(0x000000ff).into()),
@@ -103,9 +259,17 @@ pub fn rose_pine() -> UserThemeFamily {
                         surface_background: Some(rgba(0xfffaf3ff).into()),
                         background: Some(rgba(0xfaf4edff).into()),
                         element_background: Some(rgba(0xd7827dff).into()),
+                        element_hover: Some(rgba(0x6e6a860d).into()),
+                        element_selected: Some(rgba(0x6e6a8614).into()),
+                        drop_target_background: Some(rgba(0xfffaf3ff).into()),
+                        ghost_element_hover: Some(rgba(0x6e6a860d).into()),
                         text: Some(rgba(0x575279ff).into()),
                         tab_inactive_background: Some(rgba(0x000000ff).into()),
                         tab_active_background: Some(rgba(0x6e6a860d).into()),
+                        editor_background: Some(rgba(0xfaf4edff).into()),
+                        editor_gutter_background: Some(rgba(0xfaf4edff).into()),
+                        editor_line_number: Some(rgba(0x797593ff).into()),
+                        editor_active_line_number: Some(rgba(0x575279ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x797593ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xb3627aff).into()),
                         terminal_ansi_bright_green: Some(rgba(0x276983ff).into()),
@@ -124,6 +288,75 @@ pub fn rose_pine() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0x575279ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xb3627aff).into()),
+                        error: Some(rgba(0xb3627aff).into()),
+                        hidden: Some(rgba(0x797593ff).into()),
+                        warning: Some(rgba(0xea9d34ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9079a9ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xd7827dff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x9893a5ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x276983ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "punctuation".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x797593ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xea9d34ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x55949fff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x575279ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
         ],

crates/theme2/src/themes/solarized.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn solarized() -> UserThemeFamily {
@@ -19,14 +21,22 @@ pub fn solarized() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x003847ff).into()),
                         border_variant: Some(rgba(0x003847ff).into()),
-                        border_focused: Some(rgba(0x003847ff).into()),
+                        border_focused: Some(rgba(0x29a19899).into()),
                         border_selected: Some(rgba(0x003847ff).into()),
                         border_transparent: Some(rgba(0x003847ff).into()),
                         border_disabled: Some(rgba(0x003847ff).into()),
                         background: Some(rgba(0x002a35ff).into()),
                         element_background: Some(rgba(0x29a19899).into()),
+                        element_hover: Some(rgba(0x004353aa).into()),
+                        element_selected: Some(rgba(0x005a6fff).into()),
+                        drop_target_background: Some(rgba(0x00435388).into()),
+                        ghost_element_hover: Some(rgba(0x004353aa).into()),
+                        text: Some(rgba(0xbbbbbbff).into()),
                         tab_inactive_background: Some(rgba(0x003f51ff).into()),
                         tab_active_background: Some(rgba(0x002a36ff).into()),
+                        editor_background: Some(rgba(0x002a35ff).into()),
+                        editor_gutter_background: Some(rgba(0x002a35ff).into()),
+                        editor_line_number: Some(rgba(0x566c74ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x586e75ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xcb4b15ff).into()),
                         terminal_ansi_bright_green: Some(rgba(0x859900ff).into()),
@@ -45,6 +55,87 @@ pub fn solarized() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0x839496ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        deleted: Some(rgba(0xffeaeaff).into()),
+                        error: Some(rgba(0xffeaeaff).into()),
+                        hidden: Some(rgba(0x93a1a1ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x93a1a1ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb58800ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x657b83ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xcb4b15ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x258ad2ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x859900ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "property".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x839496ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x29a198ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xcb4b15ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x258ad2ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
             UserTheme {
@@ -54,14 +145,21 @@ pub fn solarized() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0xddd6c1ff).into()),
                         border_variant: Some(rgba(0xddd6c1ff).into()),
-                        border_focused: Some(rgba(0xddd6c1ff).into()),
+                        border_focused: Some(rgba(0xd3af86ff).into()),
                         border_selected: Some(rgba(0xddd6c1ff).into()),
                         border_transparent: Some(rgba(0xddd6c1ff).into()),
                         border_disabled: Some(rgba(0xddd6c1ff).into()),
                         background: Some(rgba(0xfdf6e3ff).into()),
                         element_background: Some(rgba(0xab9d56ff).into()),
+                        element_hover: Some(rgba(0xdec98744).into()),
+                        element_selected: Some(rgba(0xdec987ff).into()),
+                        ghost_element_hover: Some(rgba(0xdec98744).into()),
+                        text: Some(rgba(0x333333ff).into()),
                         tab_inactive_background: Some(rgba(0xd3cbb7ff).into()),
                         tab_active_background: Some(rgba(0xfdf6e3ff).into()),
+                        editor_background: Some(rgba(0xfdf6e3ff).into()),
+                        editor_gutter_background: Some(rgba(0xfdf6e3ff).into()),
+                        editor_line_number: Some(rgba(0x9ca8a6ff).into()),
                         terminal_ansi_bright_black: Some(rgba(0x657b83ff).into()),
                         terminal_ansi_bright_red: Some(rgba(0xcb4b15ff).into()),
                         terminal_ansi_bright_green: Some(rgba(0x859900ff).into()),
@@ -80,6 +178,78 @@ pub fn solarized() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xeee8d5ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        hidden: Some(rgba(0x586e75ff).into()),
+                        ..Default::default()
+                    },
+                    syntax: Some(UserSyntaxTheme {
+                        highlights: vec![
+                            (
+                                "attribute".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x93a1a1ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "boolean".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xb58800ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "comment".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x93a1a1ff).into()),
+                                    font_style: Some(UserFontStyle::Italic),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "constant".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0xcb4b15ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "function".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x258ad2ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "keyword".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x859900ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "string".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x29a198ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "type".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x258ad2ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                            (
+                                "variable".into(),
+                                UserHighlightStyle {
+                                    color: Some(rgba(0x258ad2ff).into()),
+                                    ..Default::default()
+                                },
+                            ),
+                        ],
+                    }),
                 },
             },
         ],

crates/theme2/src/themes/synthwave_84.rs 🔗

@@ -3,8 +3,10 @@
 
 use gpui::rgba;
 
+#[allow(unused)]
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 pub fn synthwave_84() -> UserThemeFamily {
@@ -16,10 +18,18 @@ pub fn synthwave_84() -> UserThemeFamily {
             appearance: Appearance::Dark,
             styles: UserThemeStylesRefinement {
                 colors: ThemeColorsRefinement {
+                    border_focused: Some(rgba(0x1f212bff).into()),
                     background: Some(rgba(0x252334ff).into()),
                     element_background: Some(rgba(0x614d85ff).into()),
+                    element_hover: Some(rgba(0x37294d99).into()),
+                    element_selected: Some(rgba(0xffffff20).into()),
+                    drop_target_background: Some(rgba(0x34294f66).into()),
+                    ghost_element_hover: Some(rgba(0x37294d99).into()),
                     text: Some(rgba(0xffffffff).into()),
                     tab_inactive_background: Some(rgba(0x252334ff).into()),
+                    editor_background: Some(rgba(0x252334ff).into()),
+                    editor_gutter_background: Some(rgba(0x252334ff).into()),
+                    editor_line_number: Some(rgba(0xffffff73).into()),
                     terminal_ansi_bright_red: Some(rgba(0xfe444fff).into()),
                     terminal_ansi_bright_green: Some(rgba(0x71f1b7ff).into()),
                     terminal_ansi_bright_yellow: Some(rgba(0xfede5cff).into()),
@@ -34,6 +44,67 @@ pub fn synthwave_84() -> UserThemeFamily {
                     terminal_ansi_cyan: Some(rgba(0x02edf9ff).into()),
                     ..Default::default()
                 },
+                status: StatusColorsRefinement {
+                    deleted: Some(rgba(0xfe444fff).into()),
+                    error: Some(rgba(0xfe444fff).into()),
+                    warning: Some(rgba(0x71f1b7bb).into()),
+                    ..Default::default()
+                },
+                syntax: Some(UserSyntaxTheme {
+                    highlights: vec![
+                        (
+                            "attribute".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xfede5cff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "boolean".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xf97d71ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "comment".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x848bbdff).into()),
+                                font_style: Some(UserFontStyle::Italic),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "function".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0x35f9f5ff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "keyword".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xfede5cff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "type".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xfe444fff).into()),
+                                ..Default::default()
+                            },
+                        ),
+                        (
+                            "variable".into(),
+                            UserHighlightStyle {
+                                color: Some(rgba(0xfe444fff).into()),
+                                font_weight: Some(UserFontWeight(700.0)),
+                                ..Default::default()
+                            },
+                        ),
+                    ],
+                }),
             },
         }],
     }

crates/theme2/src/user_theme.rs 🔗

@@ -1,7 +1,8 @@
+use gpui::{FontStyle, FontWeight, Hsla};
 use refineable::Refineable;
 use serde::Deserialize;
 
-use crate::{Appearance, ThemeColors, ThemeColorsRefinement};
+use crate::{Appearance, StatusColors, StatusColorsRefinement, ThemeColors, ThemeColorsRefinement};
 
 #[derive(Deserialize)]
 pub struct UserThemeFamily {
@@ -22,4 +23,72 @@ pub struct UserTheme {
 pub struct UserThemeStyles {
     #[refineable]
     pub colors: ThemeColors,
+    #[refineable]
+    pub status: StatusColors,
+    pub syntax: UserSyntaxTheme,
+}
+
+#[derive(Clone, Default, Deserialize)]
+pub struct UserSyntaxTheme {
+    pub highlights: Vec<(String, UserHighlightStyle)>,
+}
+
+#[derive(Clone, Default, Deserialize)]
+pub struct UserHighlightStyle {
+    pub color: Option<Hsla>,
+    pub font_style: Option<UserFontStyle>,
+    pub font_weight: Option<UserFontWeight>,
+}
+
+#[derive(Clone, Copy, Default, Deserialize)]
+pub struct UserFontWeight(pub f32);
+
+impl UserFontWeight {
+    /// Thin weight (100), the thinnest value.
+    pub const THIN: Self = Self(FontWeight::THIN.0);
+    /// Extra light weight (200).
+    pub const EXTRA_LIGHT: Self = Self(FontWeight::EXTRA_LIGHT.0);
+    /// Light weight (300).
+    pub const LIGHT: Self = Self(FontWeight::LIGHT.0);
+    /// Normal (400).
+    pub const NORMAL: Self = Self(FontWeight::NORMAL.0);
+    /// Medium weight (500, higher than normal).
+    pub const MEDIUM: Self = Self(FontWeight::MEDIUM.0);
+    /// Semibold weight (600).
+    pub const SEMIBOLD: Self = Self(FontWeight::SEMIBOLD.0);
+    /// Bold weight (700).
+    pub const BOLD: Self = Self(FontWeight::BOLD.0);
+    /// Extra-bold weight (800).
+    pub const EXTRA_BOLD: Self = Self(FontWeight::EXTRA_BOLD.0);
+    /// Black weight (900), the thickest value.
+    pub const BLACK: Self = Self(FontWeight::BLACK.0);
+}
+
+impl From<UserFontWeight> for FontWeight {
+    fn from(value: UserFontWeight) -> Self {
+        Self(value.0)
+    }
+}
+
+#[derive(Debug, Clone, Copy, Deserialize)]
+pub enum UserFontStyle {
+    Normal,
+    Italic,
+    Oblique,
+}
+
+impl From<UserFontStyle> for FontStyle {
+    fn from(value: UserFontStyle) -> Self {
+        match value {
+            UserFontStyle::Normal => FontStyle::Normal,
+            UserFontStyle::Italic => FontStyle::Italic,
+            UserFontStyle::Oblique => FontStyle::Oblique,
+        }
+    }
+}
+
+impl UserHighlightStyle {
+    pub fn is_empty(&self) -> bool {
+        self.color.is_none() && self.font_style.is_none() && self.font_weight.is_none()
+    }
 }

crates/theme_importer/Cargo.toml 🔗

@@ -10,9 +10,11 @@ publish = false
 anyhow.workspace = true
 convert_case = "0.6.0"
 gpui = { package = "gpui2", path = "../gpui2" }
+indexmap = "1.6.2"
 log.workspace = true
 rust-embed.workspace = true
 serde.workspace = true
 simplelog = "0.9"
-theme = { package = "theme2", path = "../theme2" }
+strum = { version = "0.25.0", features = ["derive"] }
+theme = { package = "theme2", path = "../theme2", features = ["importing-themes"] }
 uuid.workspace = true

crates/theme_importer/src/main.rs 🔗

@@ -15,10 +15,10 @@ use log::LevelFilter;
 use serde::Deserialize;
 use simplelog::SimpleLogger;
 use theme::{Appearance, UserThemeFamily};
-use vscode::VsCodeThemeConverter;
 
 use crate::theme_printer::UserThemeFamilyPrinter;
 use crate::vscode::VsCodeTheme;
+use crate::vscode::VsCodeThemeConverter;
 
 #[derive(Debug, Deserialize)]
 struct FamilyMetadata {
@@ -27,7 +27,7 @@ struct FamilyMetadata {
     pub themes: Vec<ThemeMetadata>,
 }
 
-#[derive(Debug, Deserialize)]
+#[derive(Debug, Clone, Copy, Deserialize)]
 #[serde(rename_all = "snake_case")]
 pub enum ThemeAppearanceJson {
     Light,
@@ -158,8 +158,10 @@ fn main() -> Result<()> {
 
             use gpui::rgba;
 
+            #[allow(unused)]
             use crate::{{
-                Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+                Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserHighlightStyle, UserSyntaxTheme,
+                UserTheme, UserThemeFamily, UserThemeStylesRefinement, UserFontWeight, UserFontStyle
             }};
 
             pub fn {theme_family_slug}() -> UserThemeFamily {{

crates/theme_importer/src/theme_printer.rs 🔗

@@ -2,8 +2,9 @@ use std::fmt::{self, Debug};
 
 use gpui::{Hsla, Rgba};
 use theme::{
-    Appearance, PlayerColor, PlayerColors, StatusColors, SyntaxTheme, SystemColors,
-    ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, PlayerColor, PlayerColors, StatusColorsRefinement, SystemColors,
+    ThemeColorsRefinement, UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 struct RawSyntaxPrinter<'a>(&'a str);
@@ -30,6 +31,17 @@ impl<'a, D: Debug> Debug for IntoPrinter<'a, D> {
     }
 }
 
+pub struct OptionPrinter<'a, T>(&'a Option<T>);
+
+impl<'a, T: Debug> Debug for OptionPrinter<'a, T> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        match self.0 {
+            Some(value) => write!(f, "Some({:?})", value),
+            None => write!(f, "None"),
+        }
+    }
+}
+
 pub struct VecPrinter<'a, T>(&'a Vec<T>);
 
 impl<'a, T: Debug> Debug for VecPrinter<'a, T> {
@@ -92,6 +104,17 @@ impl<'a> Debug for UserThemeStylesRefinementPrinter<'a> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         f.debug_struct("UserThemeStylesRefinement")
             .field("colors", &ThemeColorsRefinementPrinter(&self.0.colors))
+            .field("status", &StatusColorsRefinementPrinter(&self.0.status))
+            .field(
+                "syntax",
+                &OptionPrinter(
+                    &self
+                        .0
+                        .syntax
+                        .as_ref()
+                        .map(|syntax| UserSyntaxThemePrinter(syntax)),
+                ),
+            )
             .finish()
     }
 }
@@ -250,23 +273,39 @@ impl<'a> Debug for ThemeColorsRefinementPrinter<'a> {
     }
 }
 
-pub struct StatusColorsPrinter<'a>(&'a StatusColors);
+pub struct StatusColorsRefinementPrinter<'a>(&'a StatusColorsRefinement);
 
-impl<'a> Debug for StatusColorsPrinter<'a> {
+impl<'a> Debug for StatusColorsRefinementPrinter<'a> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.debug_struct("StatusColors")
-            .field("conflict", &HslaPrinter(self.0.conflict))
-            .field("created", &HslaPrinter(self.0.created))
-            .field("deleted", &HslaPrinter(self.0.deleted))
-            .field("error", &HslaPrinter(self.0.error))
-            .field("hidden", &HslaPrinter(self.0.hidden))
-            .field("ignored", &HslaPrinter(self.0.ignored))
-            .field("info", &HslaPrinter(self.0.info))
-            .field("modified", &HslaPrinter(self.0.modified))
-            .field("renamed", &HslaPrinter(self.0.renamed))
-            .field("success", &HslaPrinter(self.0.success))
-            .field("warning", &HslaPrinter(self.0.warning))
-            .finish()
+        let status_colors = vec![
+            ("conflict", self.0.conflict),
+            ("created", self.0.created),
+            ("deleted", self.0.deleted),
+            ("error", self.0.error),
+            ("hidden", self.0.hidden),
+            ("ignored", self.0.ignored),
+            ("info", self.0.info),
+            ("modified", self.0.modified),
+            ("renamed", self.0.renamed),
+            ("success", self.0.success),
+            ("warning", self.0.warning),
+        ];
+
+        f.write_str("StatusColorsRefinement {")?;
+
+        for (color_name, color) in status_colors {
+            if let Some(color) = color {
+                f.write_str(color_name)?;
+                f.write_str(": ")?;
+                f.write_str("Some(")?;
+                HslaPrinter(color).fmt(f)?;
+                f.write_str(")")?;
+                f.write_str(",")?;
+            }
+        }
+
+        f.write_str("..Default::default()")?;
+        f.write_str("}")
     }
 }
 
@@ -299,11 +338,11 @@ impl<'a> Debug for PlayerColorPrinter<'a> {
     }
 }
 
-pub struct SyntaxThemePrinter<'a>(&'a SyntaxTheme);
+pub struct UserSyntaxThemePrinter<'a>(&'a UserSyntaxTheme);
 
-impl<'a> Debug for SyntaxThemePrinter<'a> {
+impl<'a> Debug for UserSyntaxThemePrinter<'a> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.debug_struct("SyntaxTheme")
+        f.debug_struct("UserSyntaxTheme")
             .field(
                 "highlights",
                 &VecPrinter(
@@ -312,7 +351,7 @@ impl<'a> Debug for SyntaxThemePrinter<'a> {
                         .highlights
                         .iter()
                         .map(|(token, highlight)| {
-                            (IntoPrinter(token), HslaPrinter(highlight.color.unwrap()))
+                            (IntoPrinter(token), UserHighlightStylePrinter(&highlight))
                         })
                         .collect(),
                 ),
@@ -320,3 +359,41 @@ impl<'a> Debug for SyntaxThemePrinter<'a> {
             .finish()
     }
 }
+
+pub struct UserHighlightStylePrinter<'a>(&'a UserHighlightStyle);
+
+impl<'a> Debug for UserHighlightStylePrinter<'a> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        f.write_str("UserHighlightStyle {")?;
+
+        if let Some(color) = self.0.color {
+            f.write_str("color")?;
+            f.write_str(": ")?;
+            f.write_str("Some(")?;
+            HslaPrinter(color).fmt(f)?;
+            f.write_str(")")?;
+            f.write_str(",")?;
+        }
+
+        if let Some(font_style) = self.0.font_style {
+            f.write_str("font_style")?;
+            f.write_str(": ")?;
+            f.write_str("Some(")?;
+            write!(f, "UserFontStyle::{:?}", font_style)?;
+            f.write_str(")")?;
+            f.write_str(",")?;
+        }
+
+        if let Some(font_weight) = self.0.font_weight.as_ref() {
+            f.write_str("font_weight")?;
+            f.write_str(": ")?;
+            f.write_str("Some(")?;
+            write!(f, "UserFontWeight({:?})", font_weight.0)?;
+            f.write_str(")")?;
+            f.write_str(",")?;
+        }
+
+        f.write_str("..Default::default()")?;
+        f.write_str("}")
+    }
+}

crates/theme_importer/src/vscode.rs 🔗

@@ -1,570 +1,7 @@
-use anyhow::Result;
-use gpui::{Hsla, Rgba};
-use serde::Deserialize;
-use theme::{ThemeColorsRefinement, UserTheme, UserThemeStylesRefinement};
+mod converter;
+mod syntax;
+mod theme;
 
-use crate::util::Traverse;
-use crate::ThemeMetadata;
-
-#[derive(Deserialize, Debug)]
-pub struct VsCodeTheme {
-    #[serde(rename = "$schema")]
-    pub schema: Option<String>,
-    pub name: Option<String>,
-    pub author: Option<String>,
-    pub maintainers: Option<Vec<String>>,
-    #[serde(rename = "semanticClass")]
-    pub semantic_class: Option<String>,
-    #[serde(rename = "semanticHighlighting")]
-    pub semantic_highlighting: Option<bool>,
-    pub colors: VsCodeColors,
-}
-
-#[derive(Debug, Deserialize)]
-pub struct VsCodeColors {
-    #[serde(rename = "terminal.background")]
-    pub terminal_background: Option<String>,
-    #[serde(rename = "terminal.foreground")]
-    pub terminal_foreground: Option<String>,
-    #[serde(rename = "terminal.ansiBrightBlack")]
-    pub terminal_ansi_bright_black: Option<String>,
-    #[serde(rename = "terminal.ansiBrightRed")]
-    pub terminal_ansi_bright_red: Option<String>,
-    #[serde(rename = "terminal.ansiBrightGreen")]
-    pub terminal_ansi_bright_green: Option<String>,
-    #[serde(rename = "terminal.ansiBrightYellow")]
-    pub terminal_ansi_bright_yellow: Option<String>,
-    #[serde(rename = "terminal.ansiBrightBlue")]
-    pub terminal_ansi_bright_blue: Option<String>,
-    #[serde(rename = "terminal.ansiBrightMagenta")]
-    pub terminal_ansi_bright_magenta: Option<String>,
-    #[serde(rename = "terminal.ansiBrightCyan")]
-    pub terminal_ansi_bright_cyan: Option<String>,
-    #[serde(rename = "terminal.ansiBrightWhite")]
-    pub terminal_ansi_bright_white: Option<String>,
-    #[serde(rename = "terminal.ansiBlack")]
-    pub terminal_ansi_black: Option<String>,
-    #[serde(rename = "terminal.ansiRed")]
-    pub terminal_ansi_red: Option<String>,
-    #[serde(rename = "terminal.ansiGreen")]
-    pub terminal_ansi_green: Option<String>,
-    #[serde(rename = "terminal.ansiYellow")]
-    pub terminal_ansi_yellow: Option<String>,
-    #[serde(rename = "terminal.ansiBlue")]
-    pub terminal_ansi_blue: Option<String>,
-    #[serde(rename = "terminal.ansiMagenta")]
-    pub terminal_ansi_magenta: Option<String>,
-    #[serde(rename = "terminal.ansiCyan")]
-    pub terminal_ansi_cyan: Option<String>,
-    #[serde(rename = "terminal.ansiWhite")]
-    pub terminal_ansi_white: Option<String>,
-    #[serde(rename = "focusBorder")]
-    pub focus_border: Option<String>,
-    pub foreground: Option<String>,
-    #[serde(rename = "selection.background")]
-    pub selection_background: Option<String>,
-    #[serde(rename = "errorForeground")]
-    pub error_foreground: Option<String>,
-    #[serde(rename = "button.background")]
-    pub button_background: Option<String>,
-    #[serde(rename = "button.foreground")]
-    pub button_foreground: Option<String>,
-    #[serde(rename = "button.secondaryBackground")]
-    pub button_secondary_background: Option<String>,
-    #[serde(rename = "button.secondaryForeground")]
-    pub button_secondary_foreground: Option<String>,
-    #[serde(rename = "button.secondaryHoverBackground")]
-    pub button_secondary_hover_background: Option<String>,
-    #[serde(rename = "dropdown.background")]
-    pub dropdown_background: Option<String>,
-    #[serde(rename = "dropdown.border")]
-    pub dropdown_border: Option<String>,
-    #[serde(rename = "dropdown.foreground")]
-    pub dropdown_foreground: Option<String>,
-    #[serde(rename = "input.background")]
-    pub input_background: Option<String>,
-    #[serde(rename = "input.foreground")]
-    pub input_foreground: Option<String>,
-    #[serde(rename = "input.border")]
-    pub input_border: Option<String>,
-    #[serde(rename = "input.placeholderForeground")]
-    pub input_placeholder_foreground: Option<String>,
-    #[serde(rename = "inputOption.activeBorder")]
-    pub input_option_active_border: Option<String>,
-    #[serde(rename = "inputValidation.infoBorder")]
-    pub input_validation_info_border: Option<String>,
-    #[serde(rename = "inputValidation.warningBorder")]
-    pub input_validation_warning_border: Option<String>,
-    #[serde(rename = "inputValidation.errorBorder")]
-    pub input_validation_error_border: Option<String>,
-    #[serde(rename = "badge.foreground")]
-    pub badge_foreground: Option<String>,
-    #[serde(rename = "badge.background")]
-    pub badge_background: Option<String>,
-    #[serde(rename = "progressBar.background")]
-    pub progress_bar_background: Option<String>,
-    #[serde(rename = "list.activeSelectionBackground")]
-    pub list_active_selection_background: Option<String>,
-    #[serde(rename = "list.activeSelectionForeground")]
-    pub list_active_selection_foreground: Option<String>,
-    #[serde(rename = "list.dropBackground")]
-    pub list_drop_background: Option<String>,
-    #[serde(rename = "list.focusBackground")]
-    pub list_focus_background: Option<String>,
-    #[serde(rename = "list.highlightForeground")]
-    pub list_highlight_foreground: Option<String>,
-    #[serde(rename = "list.hoverBackground")]
-    pub list_hover_background: Option<String>,
-    #[serde(rename = "list.inactiveSelectionBackground")]
-    pub list_inactive_selection_background: Option<String>,
-    #[serde(rename = "list.warningForeground")]
-    pub list_warning_foreground: Option<String>,
-    #[serde(rename = "list.errorForeground")]
-    pub list_error_foreground: Option<String>,
-    #[serde(rename = "activityBar.background")]
-    pub activity_bar_background: Option<String>,
-    #[serde(rename = "activityBar.inactiveForeground")]
-    pub activity_bar_inactive_foreground: Option<String>,
-    #[serde(rename = "activityBar.foreground")]
-    pub activity_bar_foreground: Option<String>,
-    #[serde(rename = "activityBar.activeBorder")]
-    pub activity_bar_active_border: Option<String>,
-    #[serde(rename = "activityBar.activeBackground")]
-    pub activity_bar_active_background: Option<String>,
-    #[serde(rename = "activityBarBadge.background")]
-    pub activity_bar_badge_background: Option<String>,
-    #[serde(rename = "activityBarBadge.foreground")]
-    pub activity_bar_badge_foreground: Option<String>,
-    #[serde(rename = "sideBar.background")]
-    pub side_bar_background: Option<String>,
-    #[serde(rename = "sideBarTitle.foreground")]
-    pub side_bar_title_foreground: Option<String>,
-    #[serde(rename = "sideBarSectionHeader.background")]
-    pub side_bar_section_header_background: Option<String>,
-    #[serde(rename = "sideBarSectionHeader.border")]
-    pub side_bar_section_header_border: Option<String>,
-    #[serde(rename = "editorGroup.border")]
-    pub editor_group_border: Option<String>,
-    #[serde(rename = "editorGroup.dropBackground")]
-    pub editor_group_drop_background: Option<String>,
-    #[serde(rename = "editorGroupHeader.tabsBackground")]
-    pub editor_group_header_tabs_background: Option<String>,
-    #[serde(rename = "tab.activeBackground")]
-    pub tab_active_background: Option<String>,
-    #[serde(rename = "tab.activeForeground")]
-    pub tab_active_foreground: Option<String>,
-    #[serde(rename = "tab.border")]
-    pub tab_border: Option<String>,
-    #[serde(rename = "tab.activeBorderTop")]
-    pub tab_active_border_top: Option<String>,
-    #[serde(rename = "tab.inactiveBackground")]
-    pub tab_inactive_background: Option<String>,
-    #[serde(rename = "tab.inactiveForeground")]
-    pub tab_inactive_foreground: Option<String>,
-    #[serde(rename = "editor.foreground")]
-    pub editor_foreground: Option<String>,
-    #[serde(rename = "editor.background")]
-    pub editor_background: Option<String>,
-    #[serde(rename = "editorLineNumber.foreground")]
-    pub editor_line_number_foreground: Option<String>,
-    #[serde(rename = "editor.selectionBackground")]
-    pub editor_selection_background: Option<String>,
-    #[serde(rename = "editor.selectionHighlightBackground")]
-    pub editor_selection_highlight_background: Option<String>,
-    #[serde(rename = "editor.foldBackground")]
-    pub editor_fold_background: Option<String>,
-    #[serde(rename = "editor.wordHighlightBackground")]
-    pub editor_word_highlight_background: Option<String>,
-    #[serde(rename = "editor.wordHighlightStrongBackground")]
-    pub editor_word_highlight_strong_background: Option<String>,
-    #[serde(rename = "editor.findMatchBackground")]
-    pub editor_find_match_background: Option<String>,
-    #[serde(rename = "editor.findMatchHighlightBackground")]
-    pub editor_find_match_highlight_background: Option<String>,
-    #[serde(rename = "editor.findRangeHighlightBackground")]
-    pub editor_find_range_highlight_background: Option<String>,
-    #[serde(rename = "editor.hoverHighlightBackground")]
-    pub editor_hover_highlight_background: Option<String>,
-    #[serde(rename = "editor.lineHighlightBorder")]
-    pub editor_line_highlight_border: Option<String>,
-    #[serde(rename = "editorLink.activeForeground")]
-    pub editor_link_active_foreground: Option<String>,
-    #[serde(rename = "editor.rangeHighlightBackground")]
-    pub editor_range_highlight_background: Option<String>,
-    #[serde(rename = "editor.snippetTabstopHighlightBackground")]
-    pub editor_snippet_tabstop_highlight_background: Option<String>,
-    #[serde(rename = "editor.snippetTabstopHighlightBorder")]
-    pub editor_snippet_tabstop_highlight_border: Option<String>,
-    #[serde(rename = "editor.snippetFinalTabstopHighlightBackground")]
-    pub editor_snippet_final_tabstop_highlight_background: Option<String>,
-    #[serde(rename = "editor.snippetFinalTabstopHighlightBorder")]
-    pub editor_snippet_final_tabstop_highlight_border: Option<String>,
-    #[serde(rename = "editorWhitespace.foreground")]
-    pub editor_whitespace_foreground: Option<String>,
-    #[serde(rename = "editorIndentGuide.background")]
-    pub editor_indent_guide_background: Option<String>,
-    #[serde(rename = "editorIndentGuide.activeBackground")]
-    pub editor_indent_guide_active_background: Option<String>,
-    #[serde(rename = "editorRuler.foreground")]
-    pub editor_ruler_foreground: Option<String>,
-    #[serde(rename = "editorCodeLens.foreground")]
-    pub editor_code_lens_foreground: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground1")]
-    pub editor_bracket_highlight_foreground1: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground2")]
-    pub editor_bracket_highlight_foreground2: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground3")]
-    pub editor_bracket_highlight_foreground3: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground4")]
-    pub editor_bracket_highlight_foreground4: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground5")]
-    pub editor_bracket_highlight_foreground5: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground6")]
-    pub editor_bracket_highlight_foreground6: Option<String>,
-    #[serde(rename = "editorBracketHighlight.unexpectedBracket.foreground")]
-    pub editor_bracket_highlight_unexpected_bracket_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.border")]
-    pub editor_overview_ruler_border: Option<String>,
-    #[serde(rename = "editorOverviewRuler.selectionHighlightForeground")]
-    pub editor_overview_ruler_selection_highlight_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.wordHighlightForeground")]
-    pub editor_overview_ruler_word_highlight_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.wordHighlightStrongForeground")]
-    pub editor_overview_ruler_word_highlight_strong_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.modifiedForeground")]
-    pub editor_overview_ruler_modified_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.addedForeground")]
-    pub editor_overview_ruler_added_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.deletedForeground")]
-    pub editor_overview_ruler_deleted_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.errorForeground")]
-    pub editor_overview_ruler_error_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.warningForeground")]
-    pub editor_overview_ruler_warning_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.infoForeground")]
-    pub editor_overview_ruler_info_foreground: Option<String>,
-    #[serde(rename = "editorError.foreground")]
-    pub editor_error_foreground: Option<String>,
-    #[serde(rename = "editorWarning.foreground")]
-    pub editor_warning_foreground: Option<String>,
-    #[serde(rename = "editorGutter.modifiedBackground")]
-    pub editor_gutter_modified_background: Option<String>,
-    #[serde(rename = "editorGutter.addedBackground")]
-    pub editor_gutter_added_background: Option<String>,
-    #[serde(rename = "editorGutter.deletedBackground")]
-    pub editor_gutter_deleted_background: Option<String>,
-    #[serde(rename = "gitDecoration.modifiedResourceForeground")]
-    pub git_decoration_modified_resource_foreground: Option<String>,
-    #[serde(rename = "gitDecoration.deletedResourceForeground")]
-    pub git_decoration_deleted_resource_foreground: Option<String>,
-    #[serde(rename = "gitDecoration.untrackedResourceForeground")]
-    pub git_decoration_untracked_resource_foreground: Option<String>,
-    #[serde(rename = "gitDecoration.ignoredResourceForeground")]
-    pub git_decoration_ignored_resource_foreground: Option<String>,
-    #[serde(rename = "gitDecoration.conflictingResourceForeground")]
-    pub git_decoration_conflicting_resource_foreground: Option<String>,
-    #[serde(rename = "diffEditor.insertedTextBackground")]
-    pub diff_editor_inserted_text_background: Option<String>,
-    #[serde(rename = "diffEditor.removedTextBackground")]
-    pub diff_editor_removed_text_background: Option<String>,
-    #[serde(rename = "inlineChat.regionHighlight")]
-    pub inline_chat_region_highlight: Option<String>,
-    #[serde(rename = "editorWidget.background")]
-    pub editor_widget_background: Option<String>,
-    #[serde(rename = "editorSuggestWidget.background")]
-    pub editor_suggest_widget_background: Option<String>,
-    #[serde(rename = "editorSuggestWidget.foreground")]
-    pub editor_suggest_widget_foreground: Option<String>,
-    #[serde(rename = "editorSuggestWidget.selectedBackground")]
-    pub editor_suggest_widget_selected_background: Option<String>,
-    #[serde(rename = "editorHoverWidget.background")]
-    pub editor_hover_widget_background: Option<String>,
-    #[serde(rename = "editorHoverWidget.border")]
-    pub editor_hover_widget_border: Option<String>,
-    #[serde(rename = "editorMarkerNavigation.background")]
-    pub editor_marker_navigation_background: Option<String>,
-    #[serde(rename = "peekView.border")]
-    pub peek_view_border: Option<String>,
-    #[serde(rename = "peekViewEditor.background")]
-    pub peek_view_editor_background: Option<String>,
-    #[serde(rename = "peekViewEditor.matchHighlightBackground")]
-    pub peek_view_editor_match_highlight_background: Option<String>,
-    #[serde(rename = "peekViewResult.background")]
-    pub peek_view_result_background: Option<String>,
-    #[serde(rename = "peekViewResult.fileForeground")]
-    pub peek_view_result_file_foreground: Option<String>,
-    #[serde(rename = "peekViewResult.lineForeground")]
-    pub peek_view_result_line_foreground: Option<String>,
-    #[serde(rename = "peekViewResult.matchHighlightBackground")]
-    pub peek_view_result_match_highlight_background: Option<String>,
-    #[serde(rename = "peekViewResult.selectionBackground")]
-    pub peek_view_result_selection_background: Option<String>,
-    #[serde(rename = "peekViewResult.selectionForeground")]
-    pub peek_view_result_selection_foreground: Option<String>,
-    #[serde(rename = "peekViewTitle.background")]
-    pub peek_view_title_background: Option<String>,
-    #[serde(rename = "peekViewTitleDescription.foreground")]
-    pub peek_view_title_description_foreground: Option<String>,
-    #[serde(rename = "peekViewTitleLabel.foreground")]
-    pub peek_view_title_label_foreground: Option<String>,
-    #[serde(rename = "merge.currentHeaderBackground")]
-    pub merge_current_header_background: Option<String>,
-    #[serde(rename = "merge.incomingHeaderBackground")]
-    pub merge_incoming_header_background: Option<String>,
-    #[serde(rename = "editorOverviewRuler.currentContentForeground")]
-    pub editor_overview_ruler_current_content_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.incomingContentForeground")]
-    pub editor_overview_ruler_incoming_content_foreground: Option<String>,
-    #[serde(rename = "panel.background")]
-    pub panel_background: Option<String>,
-    #[serde(rename = "panel.border")]
-    pub panel_border: Option<String>,
-    #[serde(rename = "panelTitle.activeBorder")]
-    pub panel_title_active_border: Option<String>,
-    #[serde(rename = "panelTitle.activeForeground")]
-    pub panel_title_active_foreground: Option<String>,
-    #[serde(rename = "panelTitle.inactiveForeground")]
-    pub panel_title_inactive_foreground: Option<String>,
-    #[serde(rename = "statusBar.background")]
-    pub status_bar_background: Option<String>,
-    #[serde(rename = "statusBar.foreground")]
-    pub status_bar_foreground: Option<String>,
-    #[serde(rename = "statusBar.debuggingBackground")]
-    pub status_bar_debugging_background: Option<String>,
-    #[serde(rename = "statusBar.debuggingForeground")]
-    pub status_bar_debugging_foreground: Option<String>,
-    #[serde(rename = "statusBar.noFolderBackground")]
-    pub status_bar_no_folder_background: Option<String>,
-    #[serde(rename = "statusBar.noFolderForeground")]
-    pub status_bar_no_folder_foreground: Option<String>,
-    #[serde(rename = "statusBarItem.prominentBackground")]
-    pub status_bar_item_prominent_background: Option<String>,
-    #[serde(rename = "statusBarItem.prominentHoverBackground")]
-    pub status_bar_item_prominent_hover_background: Option<String>,
-    #[serde(rename = "statusBarItem.remoteForeground")]
-    pub status_bar_item_remote_foreground: Option<String>,
-    #[serde(rename = "statusBarItem.remoteBackground")]
-    pub status_bar_item_remote_background: Option<String>,
-    #[serde(rename = "titleBar.activeBackground")]
-    pub title_bar_active_background: Option<String>,
-    #[serde(rename = "titleBar.activeForeground")]
-    pub title_bar_active_foreground: Option<String>,
-    #[serde(rename = "titleBar.inactiveBackground")]
-    pub title_bar_inactive_background: Option<String>,
-    #[serde(rename = "titleBar.inactiveForeground")]
-    pub title_bar_inactive_foreground: Option<String>,
-    #[serde(rename = "extensionButton.prominentForeground")]
-    pub extension_button_prominent_foreground: Option<String>,
-    #[serde(rename = "extensionButton.prominentBackground")]
-    pub extension_button_prominent_background: Option<String>,
-    #[serde(rename = "extensionButton.prominentHoverBackground")]
-    pub extension_button_prominent_hover_background: Option<String>,
-    #[serde(rename = "pickerGroup.border")]
-    pub picker_group_border: Option<String>,
-    #[serde(rename = "pickerGroup.foreground")]
-    pub picker_group_foreground: Option<String>,
-    #[serde(rename = "debugToolBar.background")]
-    pub debug_tool_bar_background: Option<String>,
-    #[serde(rename = "walkThrough.embeddedEditorBackground")]
-    pub walk_through_embedded_editor_background: Option<String>,
-    #[serde(rename = "settings.headerForeground")]
-    pub settings_header_foreground: Option<String>,
-    #[serde(rename = "settings.modifiedItemIndicator")]
-    pub settings_modified_item_indicator: Option<String>,
-    #[serde(rename = "settings.dropdownBackground")]
-    pub settings_dropdown_background: Option<String>,
-    #[serde(rename = "settings.dropdownForeground")]
-    pub settings_dropdown_foreground: Option<String>,
-    #[serde(rename = "settings.dropdownBorder")]
-    pub settings_dropdown_border: Option<String>,
-    #[serde(rename = "settings.checkboxBackground")]
-    pub settings_checkbox_background: Option<String>,
-    #[serde(rename = "settings.checkboxForeground")]
-    pub settings_checkbox_foreground: Option<String>,
-    #[serde(rename = "settings.checkboxBorder")]
-    pub settings_checkbox_border: Option<String>,
-    #[serde(rename = "settings.textInputBackground")]
-    pub settings_text_input_background: Option<String>,
-    #[serde(rename = "settings.textInputForeground")]
-    pub settings_text_input_foreground: Option<String>,
-    #[serde(rename = "settings.textInputBorder")]
-    pub settings_text_input_border: Option<String>,
-    #[serde(rename = "settings.numberInputBackground")]
-    pub settings_number_input_background: Option<String>,
-    #[serde(rename = "settings.numberInputForeground")]
-    pub settings_number_input_foreground: Option<String>,
-    #[serde(rename = "settings.numberInputBorder")]
-    pub settings_number_input_border: Option<String>,
-    #[serde(rename = "breadcrumb.foreground")]
-    pub breadcrumb_foreground: Option<String>,
-    #[serde(rename = "breadcrumb.background")]
-    pub breadcrumb_background: Option<String>,
-    #[serde(rename = "breadcrumb.focusForeground")]
-    pub breadcrumb_focus_foreground: Option<String>,
-    #[serde(rename = "breadcrumb.activeSelectionForeground")]
-    pub breadcrumb_active_selection_foreground: Option<String>,
-    #[serde(rename = "breadcrumbPicker.background")]
-    pub breadcrumb_picker_background: Option<String>,
-    #[serde(rename = "listFilterWidget.background")]
-    pub list_filter_widget_background: Option<String>,
-    #[serde(rename = "listFilterWidget.outline")]
-    pub list_filter_widget_outline: Option<String>,
-    #[serde(rename = "listFilterWidget.noMatchesOutline")]
-    pub list_filter_widget_no_matches_outline: Option<String>,
-}
-
-fn try_parse_color(color: &str) -> Result<Hsla> {
-    Ok(Rgba::try_from(color)?.into())
-}
-
-pub struct VsCodeThemeConverter {
-    theme: VsCodeTheme,
-    theme_metadata: ThemeMetadata,
-}
-
-impl VsCodeThemeConverter {
-    pub fn new(theme: VsCodeTheme, theme_metadata: ThemeMetadata) -> Self {
-        Self {
-            theme,
-            theme_metadata,
-        }
-    }
-
-    pub fn convert(self) -> Result<UserTheme> {
-        let appearance = self.theme_metadata.appearance.into();
-
-        let vscode_colors = &self.theme.colors;
-
-        let theme_colors_refinements = ThemeColorsRefinement {
-            border: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_variant: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_focused: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_disabled: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_selected: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_transparent: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            elevated_surface_background: vscode_colors
-                .panel_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            surface_background: vscode_colors
-                .panel_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            background: vscode_colors
-                .editor_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            element_background: vscode_colors
-                .button_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            text: vscode_colors
-                .foreground
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            tab_active_background: vscode_colors
-                .tab_active_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            tab_inactive_background: vscode_colors
-                .tab_inactive_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_background: vscode_colors
-                .terminal_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_black: vscode_colors
-                .terminal_ansi_bright_black
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_red: vscode_colors
-                .terminal_ansi_bright_red
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_green: vscode_colors
-                .terminal_ansi_bright_green
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_yellow: vscode_colors
-                .terminal_ansi_bright_yellow
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_blue: vscode_colors
-                .terminal_ansi_bright_blue
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_magenta: vscode_colors
-                .terminal_ansi_bright_magenta
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_cyan: vscode_colors
-                .terminal_ansi_bright_cyan
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_white: vscode_colors
-                .terminal_ansi_bright_white
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_black: vscode_colors
-                .terminal_ansi_black
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_red: vscode_colors
-                .terminal_ansi_red
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_green: vscode_colors
-                .terminal_ansi_green
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_yellow: vscode_colors
-                .terminal_ansi_yellow
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_blue: vscode_colors
-                .terminal_ansi_blue
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_magenta: vscode_colors
-                .terminal_ansi_magenta
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_cyan: vscode_colors
-                .terminal_ansi_cyan
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_white: vscode_colors
-                .terminal_ansi_white
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            ..Default::default()
-        };
-
-        Ok(UserTheme {
-            name: self.theme_metadata.name.into(),
-            appearance,
-            styles: UserThemeStylesRefinement {
-                colors: theme_colors_refinements,
-            },
-        })
-    }
-}
+pub use converter::*;
+pub use syntax::*;
+pub use theme::*;

crates/theme_importer/src/vscode/converter.rs 🔗

@@ -0,0 +1,376 @@
+use anyhow::Result;
+use gpui::{Hsla, Rgba};
+use indexmap::IndexMap;
+use strum::IntoEnumIterator;
+use theme::{
+    StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
+    UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeStylesRefinement,
+};
+
+use crate::util::Traverse;
+use crate::vscode::VsCodeTheme;
+use crate::ThemeMetadata;
+
+use super::{VsCodeTokenScope, ZedSyntaxToken};
+
+pub(crate) fn try_parse_color(color: &str) -> Result<Hsla> {
+    Ok(Rgba::try_from(color)?.into())
+}
+
+pub(crate) fn try_parse_font_weight(font_style: &str) -> Option<UserFontWeight> {
+    match font_style {
+        style if style.contains("bold") => Some(UserFontWeight::BOLD),
+        _ => None,
+    }
+}
+
+pub(crate) fn try_parse_font_style(font_style: &str) -> Option<UserFontStyle> {
+    match font_style {
+        style if style.contains("italic") => Some(UserFontStyle::Italic),
+        style if style.contains("oblique") => Some(UserFontStyle::Oblique),
+        _ => None,
+    }
+}
+
+pub struct VsCodeThemeConverter {
+    theme: VsCodeTheme,
+    theme_metadata: ThemeMetadata,
+}
+
+impl VsCodeThemeConverter {
+    pub fn new(theme: VsCodeTheme, theme_metadata: ThemeMetadata) -> Self {
+        Self {
+            theme,
+            theme_metadata,
+        }
+    }
+
+    pub fn convert(self) -> Result<UserTheme> {
+        let appearance = self.theme_metadata.appearance.into();
+
+        let status_color_refinements = self.convert_status_colors()?;
+        let theme_colors_refinements = self.convert_theme_colors()?;
+        let syntax_theme = self.convert_syntax_theme()?;
+
+        Ok(UserTheme {
+            name: self.theme_metadata.name.into(),
+            appearance,
+            styles: UserThemeStylesRefinement {
+                colors: theme_colors_refinements,
+                status: status_color_refinements,
+                syntax: Some(syntax_theme),
+            },
+        })
+    }
+
+    fn convert_status_colors(&self) -> Result<StatusColorsRefinement> {
+        let vscode_colors = &self.theme.colors;
+
+        Ok(StatusColorsRefinement {
+            // conflict: None,
+            // created: None,
+            deleted: vscode_colors
+                .error_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            error: vscode_colors
+                .error_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            hidden: vscode_colors
+                .tab_inactive_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            // ignored: None,
+            // info: None,
+            // modified: None,
+            // renamed: None,
+            // success: None,
+            warning: vscode_colors
+                .list_warning_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            ..Default::default()
+        })
+    }
+
+    fn convert_theme_colors(&self) -> Result<ThemeColorsRefinement> {
+        let vscode_colors = &self.theme.colors;
+
+        Ok(ThemeColorsRefinement {
+            border: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_variant: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_focused: vscode_colors
+                .focus_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_disabled: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_selected: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_transparent: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            elevated_surface_background: vscode_colors
+                .panel_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            surface_background: vscode_colors
+                .panel_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            background: vscode_colors
+                .editor_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            element_background: vscode_colors
+                .button_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            element_hover: vscode_colors
+                .list_hover_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            element_selected: vscode_colors
+                .list_active_selection_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            ghost_element_hover: vscode_colors
+                .list_hover_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            drop_target_background: vscode_colors
+                .list_drop_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            text: vscode_colors
+                .foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?
+                .or_else(|| {
+                    self.theme
+                        .token_colors
+                        .iter()
+                        .find(|token_color| token_color.scope.is_none())
+                        .and_then(|token_color| token_color.settings.foreground.as_ref())
+                        .traverse(|color| try_parse_color(&color))
+                        .ok()
+                        .flatten()
+                }),
+            tab_active_background: vscode_colors
+                .tab_active_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            tab_inactive_background: vscode_colors
+                .tab_inactive_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            editor_background: vscode_colors
+                .editor_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            editor_gutter_background: vscode_colors
+                .editor_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            editor_line_number: vscode_colors
+                .editor_line_number_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            editor_active_line_number: vscode_colors
+                .editor_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_background: vscode_colors
+                .terminal_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_black: vscode_colors
+                .terminal_ansi_bright_black
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_red: vscode_colors
+                .terminal_ansi_bright_red
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_green: vscode_colors
+                .terminal_ansi_bright_green
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_yellow: vscode_colors
+                .terminal_ansi_bright_yellow
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_blue: vscode_colors
+                .terminal_ansi_bright_blue
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_magenta: vscode_colors
+                .terminal_ansi_bright_magenta
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_cyan: vscode_colors
+                .terminal_ansi_bright_cyan
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_white: vscode_colors
+                .terminal_ansi_bright_white
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_black: vscode_colors
+                .terminal_ansi_black
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_red: vscode_colors
+                .terminal_ansi_red
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_green: vscode_colors
+                .terminal_ansi_green
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_yellow: vscode_colors
+                .terminal_ansi_yellow
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_blue: vscode_colors
+                .terminal_ansi_blue
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_magenta: vscode_colors
+                .terminal_ansi_magenta
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_cyan: vscode_colors
+                .terminal_ansi_cyan
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_white: vscode_colors
+                .terminal_ansi_white
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            ..Default::default()
+        })
+    }
+
+    fn convert_syntax_theme(&self) -> Result<UserSyntaxTheme> {
+        let mut highlight_styles = IndexMap::new();
+
+        for syntax_token in ZedSyntaxToken::iter() {
+            let vscode_scope = syntax_token.to_vscode();
+
+            let token_color = self
+                .theme
+                .token_colors
+                .iter()
+                .find(|token_color| match token_color.scope {
+                    Some(VsCodeTokenScope::One(ref scope)) => scope == vscode_scope,
+                    Some(VsCodeTokenScope::Many(ref scopes)) => {
+                        scopes.contains(&vscode_scope.to_string())
+                    }
+                    None => false,
+                });
+
+            let Some(token_color) = token_color else {
+                continue;
+            };
+
+            let highlight_style = UserHighlightStyle {
+                color: token_color
+                    .settings
+                    .foreground
+                    .as_ref()
+                    .traverse(|color| try_parse_color(&color))?,
+                font_style: token_color
+                    .settings
+                    .font_style
+                    .as_ref()
+                    .and_then(|style| try_parse_font_style(&style)),
+                font_weight: token_color
+                    .settings
+                    .font_style
+                    .as_ref()
+                    .and_then(|style| try_parse_font_weight(&style)),
+            };
+
+            if highlight_style.is_empty() {
+                continue;
+            }
+
+            highlight_styles.insert(syntax_token.to_string(), highlight_style);
+        }
+
+        Ok(UserSyntaxTheme {
+            highlights: highlight_styles.into_iter().collect(),
+        })
+
+        // let mut highlight_styles = IndexMap::new();
+
+        // for token_color in self.theme.token_colors {
+        //     highlight_styles.extend(token_color.highlight_styles()?);
+        // }
+
+        // let syntax_theme = UserSyntaxTheme {
+        //     highlights: highlight_styles.into_iter().collect(),
+        // };
+
+        // pub fn highlight_styles(&self) -> Result<IndexMap<String, UserHighlightStyle>> {
+        // let mut highlight_styles = IndexMap::new();
+
+        // for syntax_token in ZedSyntaxToken::iter() {
+        //     let scope = syntax_token.to_scope();
+
+        //     // let token_color =
+        // }
+
+        // let scope = match self.scope {
+        //     Some(VsCodeTokenScope::One(ref scope)) => vec![scope.clone()],
+        //     Some(VsCodeTokenScope::Many(ref scopes)) => scopes.clone(),
+        //     None => return Ok(IndexMap::new()),
+        // };
+
+        // for scope in &scope {
+        //     let Some(syntax_token) = Self::to_zed_token(&scope) else {
+        //         continue;
+        //     };
+
+        //     let highlight_style = UserHighlightStyle {
+        //         color: self
+        //             .settings
+        //             .foreground
+        //             .as_ref()
+        //             .traverse(|color| try_parse_color(&color))?,
+        //         font_style: self
+        //             .settings
+        //             .font_style
+        //             .as_ref()
+        //             .and_then(|style| try_parse_font_style(&style)),
+        //         font_weight: self
+        //             .settings
+        //             .font_style
+        //             .as_ref()
+        //             .and_then(|style| try_parse_font_weight(&style)),
+        //     };
+
+        //     if highlight_style.is_empty() {
+        //         continue;
+        //     }
+
+        //     highlight_styles.insert(syntax_token, highlight_style);
+        // }
+
+        // Ok(highlight_styles)
+        // }
+    }
+}

crates/theme_importer/src/vscode/syntax.rs 🔗

@@ -0,0 +1,166 @@
+use serde::Deserialize;
+use strum::EnumIter;
+
+#[derive(Debug, Deserialize)]
+#[serde(untagged)]
+pub enum VsCodeTokenScope {
+    One(String),
+    Many(Vec<String>),
+}
+
+#[derive(Debug, Deserialize)]
+pub struct VsCodeTokenColor {
+    pub scope: Option<VsCodeTokenScope>,
+    pub settings: VsCodeTokenColorSettings,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct VsCodeTokenColorSettings {
+    pub foreground: Option<String>,
+    pub background: Option<String>,
+    #[serde(rename = "fontStyle")]
+    pub font_style: Option<String>,
+}
+
+#[derive(Debug, PartialEq, Copy, Clone, EnumIter)]
+pub enum ZedSyntaxToken {
+    SyntaxAttribute,
+    SyntaxBoolean,
+    SyntaxComment,
+    SyntaxCommentDoc,
+    SyntaxConstant,
+    SyntaxConstructor,
+    SyntaxEmbedded,
+    SyntaxEmphasis,
+    SyntaxEmphasisStrong,
+    SyntaxEnum,
+    SyntaxFunction,
+    SyntaxHint,
+    SyntaxKeyword,
+    SyntaxLabel,
+    SyntaxLinkText,
+    SyntaxLinkUri,
+    SyntaxNumber,
+    SyntaxOperator,
+    SyntaxPredictive,
+    SyntaxPreproc,
+    SyntaxPrimary,
+    SyntaxProperty,
+    SyntaxPunctuation,
+    SyntaxPunctuationBracket,
+    SyntaxPunctuationDelimiter,
+    SyntaxPunctuationListMarker,
+    SyntaxPunctuationSpecial,
+    SyntaxString,
+    SyntaxStringEscape,
+    SyntaxStringRegex,
+    SyntaxStringSpecial,
+    SyntaxStringSpecialSymbol,
+    SyntaxTag,
+    SyntaxTextLiteral,
+    SyntaxTitle,
+    SyntaxType,
+    SyntaxVariable,
+    SyntaxVariableSpecial,
+    SyntaxVariant,
+}
+
+impl std::fmt::Display for ZedSyntaxToken {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        use ZedSyntaxToken::*;
+
+        write!(
+            f,
+            "{}",
+            match self {
+                SyntaxAttribute => "attribute",
+                SyntaxBoolean => "boolean",
+                SyntaxComment => "comment",
+                SyntaxCommentDoc => "comment.doc",
+                SyntaxConstant => "constant",
+                SyntaxConstructor => "constructor",
+                SyntaxEmbedded => "embedded",
+                SyntaxEmphasis => "emphasis",
+                SyntaxEmphasisStrong => "emphasis.strong",
+                SyntaxEnum => "enum",
+                SyntaxFunction => "function",
+                SyntaxHint => "hint",
+                SyntaxKeyword => "keyword",
+                SyntaxLabel => "label",
+                SyntaxLinkText => "link_text",
+                SyntaxLinkUri => "link_uri",
+                SyntaxNumber => "number",
+                SyntaxOperator => "operator",
+                SyntaxPredictive => "predictive",
+                SyntaxPreproc => "preproc",
+                SyntaxPrimary => "primary",
+                SyntaxProperty => "property",
+                SyntaxPunctuation => "punctuation",
+                SyntaxPunctuationBracket => "punctuation.bracket",
+                SyntaxPunctuationDelimiter => "punctuation.delimiter",
+                SyntaxPunctuationListMarker => "punctuation.list_marker",
+                SyntaxPunctuationSpecial => "punctuation.special",
+                SyntaxString => "string",
+                SyntaxStringEscape => "string.escape",
+                SyntaxStringRegex => "string.regex",
+                SyntaxStringSpecial => "string.special",
+                SyntaxStringSpecialSymbol => "string.special.symbol",
+                SyntaxTag => "tag",
+                SyntaxTextLiteral => "text.literal",
+                SyntaxTitle => "title",
+                SyntaxType => "type",
+                SyntaxVariable => "variable",
+                SyntaxVariableSpecial => "variable.special",
+                SyntaxVariant => "variant",
+            }
+        )
+    }
+}
+
+impl ZedSyntaxToken {
+    pub fn to_vscode(&self) -> &'static str {
+        use ZedSyntaxToken::*;
+
+        match self {
+            SyntaxAttribute => "entity.other.attribute-name",
+            SyntaxBoolean => "constant.language",
+            SyntaxComment => "comment",
+            SyntaxCommentDoc => "comment.block.documentation",
+            SyntaxConstant => "constant.character",
+            SyntaxConstructor => "entity.name.function.definition.special.constructor",
+            SyntaxEmbedded => "embedded",
+            SyntaxEmphasis => "emphasis",
+            SyntaxEmphasisStrong => "emphasis.strong",
+            SyntaxEnum => "support.type.enum",
+            SyntaxFunction => "entity.name.function",
+            SyntaxHint => "hint",
+            SyntaxKeyword => "keyword",
+            SyntaxLabel => "label",
+            SyntaxLinkText => "link_text",
+            SyntaxLinkUri => "link_uri",
+            SyntaxNumber => "number",
+            SyntaxOperator => "operator",
+            SyntaxPredictive => "predictive",
+            SyntaxPreproc => "preproc",
+            SyntaxPrimary => "primary",
+            SyntaxProperty => "variable.object.property", //"variable.other.field"
+            SyntaxPunctuation => "punctuation",
+            SyntaxPunctuationBracket => "punctuation.bracket",
+            SyntaxPunctuationDelimiter => "punctuation.delimiter",
+            SyntaxPunctuationListMarker => "punctuation.list_marker",
+            SyntaxPunctuationSpecial => "punctuation.special",
+            SyntaxString => "string",
+            SyntaxStringEscape => "string.escape",
+            SyntaxStringRegex => "string.regex",
+            SyntaxStringSpecial => "string.special",
+            SyntaxStringSpecialSymbol => "string.special.symbol",
+            SyntaxTag => "tag",
+            SyntaxTextLiteral => "text.literal",
+            SyntaxTitle => "title",
+            SyntaxType => "entity.name.type",
+            SyntaxVariable => "variable.language",
+            SyntaxVariableSpecial => "variable.special",
+            SyntaxVariant => "variant",
+        }
+    }
+}

crates/theme_importer/src/vscode/theme.rs 🔗

@@ -0,0 +1,412 @@
+use serde::Deserialize;
+
+use crate::vscode::VsCodeTokenColor;
+
+#[derive(Deserialize, Debug)]
+pub struct VsCodeTheme {
+    #[serde(rename = "$schema")]
+    pub schema: Option<String>,
+    pub name: Option<String>,
+    pub author: Option<String>,
+    pub maintainers: Option<Vec<String>>,
+    #[serde(rename = "semanticClass")]
+    pub semantic_class: Option<String>,
+    #[serde(rename = "semanticHighlighting")]
+    pub semantic_highlighting: Option<bool>,
+    pub colors: VsCodeColors,
+    #[serde(rename = "tokenColors")]
+    pub token_colors: Vec<VsCodeTokenColor>,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct VsCodeColors {
+    #[serde(rename = "terminal.background")]
+    pub terminal_background: Option<String>,
+    #[serde(rename = "terminal.foreground")]
+    pub terminal_foreground: Option<String>,
+    #[serde(rename = "terminal.ansiBrightBlack")]
+    pub terminal_ansi_bright_black: Option<String>,
+    #[serde(rename = "terminal.ansiBrightRed")]
+    pub terminal_ansi_bright_red: Option<String>,
+    #[serde(rename = "terminal.ansiBrightGreen")]
+    pub terminal_ansi_bright_green: Option<String>,
+    #[serde(rename = "terminal.ansiBrightYellow")]
+    pub terminal_ansi_bright_yellow: Option<String>,
+    #[serde(rename = "terminal.ansiBrightBlue")]
+    pub terminal_ansi_bright_blue: Option<String>,
+    #[serde(rename = "terminal.ansiBrightMagenta")]
+    pub terminal_ansi_bright_magenta: Option<String>,
+    #[serde(rename = "terminal.ansiBrightCyan")]
+    pub terminal_ansi_bright_cyan: Option<String>,
+    #[serde(rename = "terminal.ansiBrightWhite")]
+    pub terminal_ansi_bright_white: Option<String>,
+    #[serde(rename = "terminal.ansiBlack")]
+    pub terminal_ansi_black: Option<String>,
+    #[serde(rename = "terminal.ansiRed")]
+    pub terminal_ansi_red: Option<String>,
+    #[serde(rename = "terminal.ansiGreen")]
+    pub terminal_ansi_green: Option<String>,
+    #[serde(rename = "terminal.ansiYellow")]
+    pub terminal_ansi_yellow: Option<String>,
+    #[serde(rename = "terminal.ansiBlue")]
+    pub terminal_ansi_blue: Option<String>,
+    #[serde(rename = "terminal.ansiMagenta")]
+    pub terminal_ansi_magenta: Option<String>,
+    #[serde(rename = "terminal.ansiCyan")]
+    pub terminal_ansi_cyan: Option<String>,
+    #[serde(rename = "terminal.ansiWhite")]
+    pub terminal_ansi_white: Option<String>,
+    #[serde(rename = "focusBorder")]
+    pub focus_border: Option<String>,
+    pub foreground: Option<String>,
+    #[serde(rename = "selection.background")]
+    pub selection_background: Option<String>,
+    #[serde(rename = "errorForeground")]
+    pub error_foreground: Option<String>,
+    #[serde(rename = "button.background")]
+    pub button_background: Option<String>,
+    #[serde(rename = "button.foreground")]
+    pub button_foreground: Option<String>,
+    #[serde(rename = "button.secondaryBackground")]
+    pub button_secondary_background: Option<String>,
+    #[serde(rename = "button.secondaryForeground")]
+    pub button_secondary_foreground: Option<String>,
+    #[serde(rename = "button.secondaryHoverBackground")]
+    pub button_secondary_hover_background: Option<String>,
+    #[serde(rename = "dropdown.background")]
+    pub dropdown_background: Option<String>,
+    #[serde(rename = "dropdown.border")]
+    pub dropdown_border: Option<String>,
+    #[serde(rename = "dropdown.foreground")]
+    pub dropdown_foreground: Option<String>,
+    #[serde(rename = "input.background")]
+    pub input_background: Option<String>,
+    #[serde(rename = "input.foreground")]
+    pub input_foreground: Option<String>,
+    #[serde(rename = "input.border")]
+    pub input_border: Option<String>,
+    #[serde(rename = "input.placeholderForeground")]
+    pub input_placeholder_foreground: Option<String>,
+    #[serde(rename = "inputOption.activeBorder")]
+    pub input_option_active_border: Option<String>,
+    #[serde(rename = "inputValidation.infoBorder")]
+    pub input_validation_info_border: Option<String>,
+    #[serde(rename = "inputValidation.warningBorder")]
+    pub input_validation_warning_border: Option<String>,
+    #[serde(rename = "inputValidation.errorBorder")]
+    pub input_validation_error_border: Option<String>,
+    #[serde(rename = "badge.foreground")]
+    pub badge_foreground: Option<String>,
+    #[serde(rename = "badge.background")]
+    pub badge_background: Option<String>,
+    #[serde(rename = "progressBar.background")]
+    pub progress_bar_background: Option<String>,
+    #[serde(rename = "list.activeSelectionBackground")]
+    pub list_active_selection_background: Option<String>,
+    #[serde(rename = "list.activeSelectionForeground")]
+    pub list_active_selection_foreground: Option<String>,
+    #[serde(rename = "list.dropBackground")]
+    pub list_drop_background: Option<String>,
+    #[serde(rename = "list.focusBackground")]
+    pub list_focus_background: Option<String>,
+    #[serde(rename = "list.highlightForeground")]
+    pub list_highlight_foreground: Option<String>,
+    #[serde(rename = "list.hoverBackground")]
+    pub list_hover_background: Option<String>,
+    #[serde(rename = "list.inactiveSelectionBackground")]
+    pub list_inactive_selection_background: Option<String>,
+    #[serde(rename = "list.warningForeground")]
+    pub list_warning_foreground: Option<String>,
+    #[serde(rename = "list.errorForeground")]
+    pub list_error_foreground: Option<String>,
+    #[serde(rename = "activityBar.background")]
+    pub activity_bar_background: Option<String>,
+    #[serde(rename = "activityBar.inactiveForeground")]
+    pub activity_bar_inactive_foreground: Option<String>,
+    #[serde(rename = "activityBar.foreground")]
+    pub activity_bar_foreground: Option<String>,
+    #[serde(rename = "activityBar.activeBorder")]
+    pub activity_bar_active_border: Option<String>,
+    #[serde(rename = "activityBar.activeBackground")]
+    pub activity_bar_active_background: Option<String>,
+    #[serde(rename = "activityBarBadge.background")]
+    pub activity_bar_badge_background: Option<String>,
+    #[serde(rename = "activityBarBadge.foreground")]
+    pub activity_bar_badge_foreground: Option<String>,
+    #[serde(rename = "sideBar.background")]
+    pub side_bar_background: Option<String>,
+    #[serde(rename = "sideBarTitle.foreground")]
+    pub side_bar_title_foreground: Option<String>,
+    #[serde(rename = "sideBarSectionHeader.background")]
+    pub side_bar_section_header_background: Option<String>,
+    #[serde(rename = "sideBarSectionHeader.border")]
+    pub side_bar_section_header_border: Option<String>,
+    #[serde(rename = "editorGroup.border")]
+    pub editor_group_border: Option<String>,
+    #[serde(rename = "editorGroup.dropBackground")]
+    pub editor_group_drop_background: Option<String>,
+    #[serde(rename = "editorGroupHeader.tabsBackground")]
+    pub editor_group_header_tabs_background: Option<String>,
+    #[serde(rename = "tab.activeBackground")]
+    pub tab_active_background: Option<String>,
+    #[serde(rename = "tab.activeForeground")]
+    pub tab_active_foreground: Option<String>,
+    #[serde(rename = "tab.border")]
+    pub tab_border: Option<String>,
+    #[serde(rename = "tab.activeBorderTop")]
+    pub tab_active_border_top: Option<String>,
+    #[serde(rename = "tab.inactiveBackground")]
+    pub tab_inactive_background: Option<String>,
+    #[serde(rename = "tab.inactiveForeground")]
+    pub tab_inactive_foreground: Option<String>,
+    #[serde(rename = "editor.foreground")]
+    pub editor_foreground: Option<String>,
+    #[serde(rename = "editor.background")]
+    pub editor_background: Option<String>,
+    #[serde(rename = "editorLineNumber.foreground")]
+    pub editor_line_number_foreground: Option<String>,
+    #[serde(rename = "editor.selectionBackground")]
+    pub editor_selection_background: Option<String>,
+    #[serde(rename = "editor.selectionHighlightBackground")]
+    pub editor_selection_highlight_background: Option<String>,
+    #[serde(rename = "editor.foldBackground")]
+    pub editor_fold_background: Option<String>,
+    #[serde(rename = "editor.wordHighlightBackground")]
+    pub editor_word_highlight_background: Option<String>,
+    #[serde(rename = "editor.wordHighlightStrongBackground")]
+    pub editor_word_highlight_strong_background: Option<String>,
+    #[serde(rename = "editor.findMatchBackground")]
+    pub editor_find_match_background: Option<String>,
+    #[serde(rename = "editor.findMatchHighlightBackground")]
+    pub editor_find_match_highlight_background: Option<String>,
+    #[serde(rename = "editor.findRangeHighlightBackground")]
+    pub editor_find_range_highlight_background: Option<String>,
+    #[serde(rename = "editor.hoverHighlightBackground")]
+    pub editor_hover_highlight_background: Option<String>,
+    #[serde(rename = "editor.lineHighlightBorder")]
+    pub editor_line_highlight_border: Option<String>,
+    #[serde(rename = "editorLink.activeForeground")]
+    pub editor_link_active_foreground: Option<String>,
+    #[serde(rename = "editor.rangeHighlightBackground")]
+    pub editor_range_highlight_background: Option<String>,
+    #[serde(rename = "editor.snippetTabstopHighlightBackground")]
+    pub editor_snippet_tabstop_highlight_background: Option<String>,
+    #[serde(rename = "editor.snippetTabstopHighlightBorder")]
+    pub editor_snippet_tabstop_highlight_border: Option<String>,
+    #[serde(rename = "editor.snippetFinalTabstopHighlightBackground")]
+    pub editor_snippet_final_tabstop_highlight_background: Option<String>,
+    #[serde(rename = "editor.snippetFinalTabstopHighlightBorder")]
+    pub editor_snippet_final_tabstop_highlight_border: Option<String>,
+    #[serde(rename = "editorWhitespace.foreground")]
+    pub editor_whitespace_foreground: Option<String>,
+    #[serde(rename = "editorIndentGuide.background")]
+    pub editor_indent_guide_background: Option<String>,
+    #[serde(rename = "editorIndentGuide.activeBackground")]
+    pub editor_indent_guide_active_background: Option<String>,
+    #[serde(rename = "editorRuler.foreground")]
+    pub editor_ruler_foreground: Option<String>,
+    #[serde(rename = "editorCodeLens.foreground")]
+    pub editor_code_lens_foreground: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground1")]
+    pub editor_bracket_highlight_foreground1: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground2")]
+    pub editor_bracket_highlight_foreground2: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground3")]
+    pub editor_bracket_highlight_foreground3: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground4")]
+    pub editor_bracket_highlight_foreground4: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground5")]
+    pub editor_bracket_highlight_foreground5: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground6")]
+    pub editor_bracket_highlight_foreground6: Option<String>,
+    #[serde(rename = "editorBracketHighlight.unexpectedBracket.foreground")]
+    pub editor_bracket_highlight_unexpected_bracket_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.border")]
+    pub editor_overview_ruler_border: Option<String>,
+    #[serde(rename = "editorOverviewRuler.selectionHighlightForeground")]
+    pub editor_overview_ruler_selection_highlight_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.wordHighlightForeground")]
+    pub editor_overview_ruler_word_highlight_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.wordHighlightStrongForeground")]
+    pub editor_overview_ruler_word_highlight_strong_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.modifiedForeground")]
+    pub editor_overview_ruler_modified_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.addedForeground")]
+    pub editor_overview_ruler_added_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.deletedForeground")]
+    pub editor_overview_ruler_deleted_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.errorForeground")]
+    pub editor_overview_ruler_error_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.warningForeground")]
+    pub editor_overview_ruler_warning_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.infoForeground")]
+    pub editor_overview_ruler_info_foreground: Option<String>,
+    #[serde(rename = "editorError.foreground")]
+    pub editor_error_foreground: Option<String>,
+    #[serde(rename = "editorWarning.foreground")]
+    pub editor_warning_foreground: Option<String>,
+    #[serde(rename = "editorGutter.modifiedBackground")]
+    pub editor_gutter_modified_background: Option<String>,
+    #[serde(rename = "editorGutter.addedBackground")]
+    pub editor_gutter_added_background: Option<String>,
+    #[serde(rename = "editorGutter.deletedBackground")]
+    pub editor_gutter_deleted_background: Option<String>,
+    #[serde(rename = "gitDecoration.modifiedResourceForeground")]
+    pub git_decoration_modified_resource_foreground: Option<String>,
+    #[serde(rename = "gitDecoration.deletedResourceForeground")]
+    pub git_decoration_deleted_resource_foreground: Option<String>,
+    #[serde(rename = "gitDecoration.untrackedResourceForeground")]
+    pub git_decoration_untracked_resource_foreground: Option<String>,
+    #[serde(rename = "gitDecoration.ignoredResourceForeground")]
+    pub git_decoration_ignored_resource_foreground: Option<String>,
+    #[serde(rename = "gitDecoration.conflictingResourceForeground")]
+    pub git_decoration_conflicting_resource_foreground: Option<String>,
+    #[serde(rename = "diffEditor.insertedTextBackground")]
+    pub diff_editor_inserted_text_background: Option<String>,
+    #[serde(rename = "diffEditor.removedTextBackground")]
+    pub diff_editor_removed_text_background: Option<String>,
+    #[serde(rename = "inlineChat.regionHighlight")]
+    pub inline_chat_region_highlight: Option<String>,
+    #[serde(rename = "editorWidget.background")]
+    pub editor_widget_background: Option<String>,
+    #[serde(rename = "editorSuggestWidget.background")]
+    pub editor_suggest_widget_background: Option<String>,
+    #[serde(rename = "editorSuggestWidget.foreground")]
+    pub editor_suggest_widget_foreground: Option<String>,
+    #[serde(rename = "editorSuggestWidget.selectedBackground")]
+    pub editor_suggest_widget_selected_background: Option<String>,
+    #[serde(rename = "editorHoverWidget.background")]
+    pub editor_hover_widget_background: Option<String>,
+    #[serde(rename = "editorHoverWidget.border")]
+    pub editor_hover_widget_border: Option<String>,
+    #[serde(rename = "editorMarkerNavigation.background")]
+    pub editor_marker_navigation_background: Option<String>,
+    #[serde(rename = "peekView.border")]
+    pub peek_view_border: Option<String>,
+    #[serde(rename = "peekViewEditor.background")]
+    pub peek_view_editor_background: Option<String>,
+    #[serde(rename = "peekViewEditor.matchHighlightBackground")]
+    pub peek_view_editor_match_highlight_background: Option<String>,
+    #[serde(rename = "peekViewResult.background")]
+    pub peek_view_result_background: Option<String>,
+    #[serde(rename = "peekViewResult.fileForeground")]
+    pub peek_view_result_file_foreground: Option<String>,
+    #[serde(rename = "peekViewResult.lineForeground")]
+    pub peek_view_result_line_foreground: Option<String>,
+    #[serde(rename = "peekViewResult.matchHighlightBackground")]
+    pub peek_view_result_match_highlight_background: Option<String>,
+    #[serde(rename = "peekViewResult.selectionBackground")]
+    pub peek_view_result_selection_background: Option<String>,
+    #[serde(rename = "peekViewResult.selectionForeground")]
+    pub peek_view_result_selection_foreground: Option<String>,
+    #[serde(rename = "peekViewTitle.background")]
+    pub peek_view_title_background: Option<String>,
+    #[serde(rename = "peekViewTitleDescription.foreground")]
+    pub peek_view_title_description_foreground: Option<String>,
+    #[serde(rename = "peekViewTitleLabel.foreground")]
+    pub peek_view_title_label_foreground: Option<String>,
+    #[serde(rename = "merge.currentHeaderBackground")]
+    pub merge_current_header_background: Option<String>,
+    #[serde(rename = "merge.incomingHeaderBackground")]
+    pub merge_incoming_header_background: Option<String>,
+    #[serde(rename = "editorOverviewRuler.currentContentForeground")]
+    pub editor_overview_ruler_current_content_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.incomingContentForeground")]
+    pub editor_overview_ruler_incoming_content_foreground: Option<String>,
+    #[serde(rename = "panel.background")]
+    pub panel_background: Option<String>,
+    #[serde(rename = "panel.border")]
+    pub panel_border: Option<String>,
+    #[serde(rename = "panelTitle.activeBorder")]
+    pub panel_title_active_border: Option<String>,
+    #[serde(rename = "panelTitle.activeForeground")]
+    pub panel_title_active_foreground: Option<String>,
+    #[serde(rename = "panelTitle.inactiveForeground")]
+    pub panel_title_inactive_foreground: Option<String>,
+    #[serde(rename = "statusBar.background")]
+    pub status_bar_background: Option<String>,
+    #[serde(rename = "statusBar.foreground")]
+    pub status_bar_foreground: Option<String>,
+    #[serde(rename = "statusBar.debuggingBackground")]
+    pub status_bar_debugging_background: Option<String>,
+    #[serde(rename = "statusBar.debuggingForeground")]
+    pub status_bar_debugging_foreground: Option<String>,
+    #[serde(rename = "statusBar.noFolderBackground")]
+    pub status_bar_no_folder_background: Option<String>,
+    #[serde(rename = "statusBar.noFolderForeground")]
+    pub status_bar_no_folder_foreground: Option<String>,
+    #[serde(rename = "statusBarItem.prominentBackground")]
+    pub status_bar_item_prominent_background: Option<String>,
+    #[serde(rename = "statusBarItem.prominentHoverBackground")]
+    pub status_bar_item_prominent_hover_background: Option<String>,
+    #[serde(rename = "statusBarItem.remoteForeground")]
+    pub status_bar_item_remote_foreground: Option<String>,
+    #[serde(rename = "statusBarItem.remoteBackground")]
+    pub status_bar_item_remote_background: Option<String>,
+    #[serde(rename = "titleBar.activeBackground")]
+    pub title_bar_active_background: Option<String>,
+    #[serde(rename = "titleBar.activeForeground")]
+    pub title_bar_active_foreground: Option<String>,
+    #[serde(rename = "titleBar.inactiveBackground")]
+    pub title_bar_inactive_background: Option<String>,
+    #[serde(rename = "titleBar.inactiveForeground")]
+    pub title_bar_inactive_foreground: Option<String>,
+    #[serde(rename = "extensionButton.prominentForeground")]
+    pub extension_button_prominent_foreground: Option<String>,
+    #[serde(rename = "extensionButton.prominentBackground")]
+    pub extension_button_prominent_background: Option<String>,
+    #[serde(rename = "extensionButton.prominentHoverBackground")]
+    pub extension_button_prominent_hover_background: Option<String>,
+    #[serde(rename = "pickerGroup.border")]
+    pub picker_group_border: Option<String>,
+    #[serde(rename = "pickerGroup.foreground")]
+    pub picker_group_foreground: Option<String>,
+    #[serde(rename = "debugToolBar.background")]
+    pub debug_tool_bar_background: Option<String>,
+    #[serde(rename = "walkThrough.embeddedEditorBackground")]
+    pub walk_through_embedded_editor_background: Option<String>,
+    #[serde(rename = "settings.headerForeground")]
+    pub settings_header_foreground: Option<String>,
+    #[serde(rename = "settings.modifiedItemIndicator")]
+    pub settings_modified_item_indicator: Option<String>,
+    #[serde(rename = "settings.dropdownBackground")]
+    pub settings_dropdown_background: Option<String>,
+    #[serde(rename = "settings.dropdownForeground")]
+    pub settings_dropdown_foreground: Option<String>,
+    #[serde(rename = "settings.dropdownBorder")]
+    pub settings_dropdown_border: Option<String>,
+    #[serde(rename = "settings.checkboxBackground")]
+    pub settings_checkbox_background: Option<String>,
+    #[serde(rename = "settings.checkboxForeground")]
+    pub settings_checkbox_foreground: Option<String>,
+    #[serde(rename = "settings.checkboxBorder")]
+    pub settings_checkbox_border: Option<String>,
+    #[serde(rename = "settings.textInputBackground")]
+    pub settings_text_input_background: Option<String>,
+    #[serde(rename = "settings.textInputForeground")]
+    pub settings_text_input_foreground: Option<String>,
+    #[serde(rename = "settings.textInputBorder")]
+    pub settings_text_input_border: Option<String>,
+    #[serde(rename = "settings.numberInputBackground")]
+    pub settings_number_input_background: Option<String>,
+    #[serde(rename = "settings.numberInputForeground")]
+    pub settings_number_input_foreground: Option<String>,
+    #[serde(rename = "settings.numberInputBorder")]
+    pub settings_number_input_border: Option<String>,
+    #[serde(rename = "breadcrumb.foreground")]
+    pub breadcrumb_foreground: Option<String>,
+    #[serde(rename = "breadcrumb.background")]
+    pub breadcrumb_background: Option<String>,
+    #[serde(rename = "breadcrumb.focusForeground")]
+    pub breadcrumb_focus_foreground: Option<String>,
+    #[serde(rename = "breadcrumb.activeSelectionForeground")]
+    pub breadcrumb_active_selection_foreground: Option<String>,
+    #[serde(rename = "breadcrumbPicker.background")]
+    pub breadcrumb_picker_background: Option<String>,
+    #[serde(rename = "listFilterWidget.background")]
+    pub list_filter_widget_background: Option<String>,
+    #[serde(rename = "listFilterWidget.outline")]
+    pub list_filter_widget_outline: Option<String>,
+    #[serde(rename = "listFilterWidget.noMatchesOutline")]
+    pub list_filter_widget_no_matches_outline: Option<String>,
+}

crates/ui2/src/components/tooltip.rs 🔗

@@ -1,4 +1,4 @@
-use gpui::{div, px, Div, ParentElement, Render, SharedString, Styled, ViewContext};
+use gpui::{div, Div, ParentElement, Render, SharedString, Styled, ViewContext};
 use theme2::ActiveTheme;
 
 #[derive(Clone, Debug)]
@@ -19,7 +19,7 @@ impl Render for TextTooltip {
         let theme = cx.theme();
         div()
             .bg(theme.colors().background)
-            .rounded(px(8.))
+            .rounded_lg()
             .border()
             .font("Zed Sans")
             .border_color(theme.colors().border)