Allow imported themes to refine StatusColors

Nate Butler and Marshall Bowers created

Co-Authored-By: Marshall Bowers <1486634+maxdeviant@users.noreply.github.com>

Change summary

crates/theme2/src/colors.rs                |   2 
crates/theme2/src/themes/andromeda.rs      |  27 +++
crates/theme2/src/themes/ayu.rs            |  36 +++++
crates/theme2/src/themes/dracula.rs        |  16 ++
crates/theme2/src/themes/gruvbox.rs        |  63 ++++++++++
crates/theme2/src/themes/night_owl.rs      |  27 +++
crates/theme2/src/themes/nord.rs           |  14 ++
crates/theme2/src/themes/notctis.rs        | 146 ++++++++++++++++++++++-
crates/theme2/src/themes/palenight.rs      |  33 +++++
crates/theme2/src/themes/rose_pine.rs      |  42 ++++++
crates/theme2/src/themes/solarized.rs      |  24 +++
crates/theme2/src/themes/synthwave_84.rs   |  14 ++
crates/theme2/src/user_theme.rs            |   4 
crates/theme_importer/src/main.rs          |   2 
crates/theme_importer/src/theme_printer.rs |  51 +++++--
crates/theme_importer/src/vscode.rs        |  30 ++++
16 files changed, 475 insertions(+), 56 deletions(-)

Detailed changes

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/themes/andromeda.rs 🔗

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn andromeda() -> UserThemeFamily {
@@ -19,7 +20,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,6 +28,10 @@ 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()),
@@ -48,6 +53,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -57,7 +68,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()),
@@ -65,6 +76,10 @@ 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()),
@@ -86,6 +101,12 @@ 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()
+                    },
                 },
             },
         ],

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn ayu() -> UserThemeFamily {
@@ -19,7 +20,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,6 +28,9 @@ 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()),
@@ -53,6 +57,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -62,7 +72,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()),
@@ -70,6 +80,9 @@ 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()),
@@ -96,6 +109,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -105,7 +124,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()),
@@ -113,6 +132,9 @@ 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()),
@@ -139,6 +161,12 @@ 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()
+                    },
                 },
             },
         ],

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn dracula() -> UserThemeFamily {
@@ -18,7 +19,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,6 +27,10 @@ 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()),
@@ -52,6 +57,13 @@ 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()
+                },
             },
         }],
     }

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn gruvbox() -> UserThemeFamily {
@@ -25,6 +26,10 @@ 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()),
@@ -51,6 +56,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -66,6 +77,10 @@ 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()),
@@ -92,6 +107,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -107,6 +128,10 @@ 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()),
@@ -133,6 +158,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -148,6 +179,10 @@ 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()),
@@ -174,6 +209,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -189,6 +230,10 @@ 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()),
@@ -215,6 +260,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -230,6 +281,10 @@ 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()),
@@ -256,6 +311,12 @@ 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()
+                    },
                 },
             },
         ],

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn night_owl() -> UserThemeFamily {
@@ -19,7 +20,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,6 +28,10 @@ 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()),
@@ -52,6 +57,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -61,7 +72,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()),
@@ -69,6 +80,9 @@ 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()),
@@ -95,6 +109,13 @@ 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()
+                    },
                 },
             },
         ],

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn nord() -> UserThemeFamily {
@@ -26,6 +27,10 @@ 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()),
@@ -52,6 +57,13 @@ 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()
+                },
             },
         }],
     }

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn notctis() -> UserThemeFamily {
@@ -19,7 +20,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x1579b6ff).into()),
                         border_variant: Some(rgba(0x1579b6ff).into()),
-                        border_focused: 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()),
@@ -27,6 +28,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -53,6 +58,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -62,7 +74,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x997582ff).into()),
                         border_variant: Some(rgba(0x997582ff).into()),
-                        border_focused: 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()),
@@ -70,6 +82,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -96,6 +112,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -105,7 +128,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x00c6e0ff).into()),
                         border_variant: Some(rgba(0x00c6e0ff).into()),
-                        border_focused: 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()),
@@ -113,6 +136,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -139,6 +166,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -148,7 +182,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0xaea4f4ff).into()),
                         border_variant: Some(rgba(0xaea4f4ff).into()),
-                        border_focused: 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()),
@@ -156,6 +190,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -182,6 +220,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -191,7 +236,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x00c6e0ff).into()),
                         border_variant: Some(rgba(0x00c6e0ff).into()),
-                        border_focused: 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()),
@@ -199,6 +244,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -225,6 +274,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -234,7 +290,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x496c83ff).into()),
                         border_variant: Some(rgba(0x496c83ff).into()),
-                        border_focused: 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()),
@@ -242,6 +298,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -268,6 +328,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -277,7 +344,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x0d6571ff).into()),
                         border_variant: Some(rgba(0x0d6571ff).into()),
-                        border_focused: 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()),
@@ -285,6 +352,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -311,6 +382,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -320,7 +398,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x0d6571ff).into()),
                         border_variant: Some(rgba(0x0d6571ff).into()),
-                        border_focused: 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()),
@@ -328,6 +406,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -354,6 +436,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -363,7 +452,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x0d6571ff).into()),
                         border_variant: Some(rgba(0x0d6571ff).into()),
-                        border_focused: 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()),
@@ -371,6 +460,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -397,6 +490,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -406,7 +506,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x6d66a7ff).into()),
                         border_variant: Some(rgba(0x6d66a7ff).into()),
-                        border_focused: 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()),
@@ -414,6 +514,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -440,6 +544,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
             UserTheme {
@@ -449,7 +560,7 @@ pub fn notctis() -> UserThemeFamily {
                     colors: ThemeColorsRefinement {
                         border: Some(rgba(0x8666a7ff).into()),
                         border_variant: Some(rgba(0x8666a7ff).into()),
-                        border_focused: 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()),
@@ -457,6 +568,10 @@ pub fn notctis() -> UserThemeFamily {
                         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()),
@@ -483,6 +598,13 @@ pub fn notctis() -> UserThemeFamily {
                         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()
+                    },
                 },
             },
         ],

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn palenight() -> UserThemeFamily {
@@ -27,6 +28,10 @@ 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()),
@@ -52,6 +57,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -69,6 +80,10 @@ 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()),
@@ -94,6 +109,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -111,6 +132,10 @@ 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()),
@@ -136,6 +161,12 @@ 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()
+                    },
                 },
             },
         ],

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn rose_pine() -> UserThemeFamily {
@@ -19,7 +20,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,6 +28,10 @@ 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()),
@@ -52,6 +57,13 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -61,7 +73,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()),
@@ -69,6 +81,10 @@ 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()),
@@ -94,6 +110,13 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -103,7 +126,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()),
@@ -111,6 +134,10 @@ 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()),
@@ -136,6 +163,13 @@ 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()
+                    },
                 },
             },
         ],

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn solarized() -> UserThemeFamily {
@@ -19,12 +20,16 @@ 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()),
                         tab_inactive_background: Some(rgba(0x003f51ff).into()),
                         tab_active_background: Some(rgba(0x002a36ff).into()),
                         editor_background: Some(rgba(0x002a35ff).into()),
@@ -48,6 +53,12 @@ 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()
+                    },
                 },
             },
             UserTheme {
@@ -57,12 +68,15 @@ 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()),
                         tab_inactive_background: Some(rgba(0xd3cbb7ff).into()),
                         tab_active_background: Some(rgba(0xfdf6e3ff).into()),
                         editor_background: Some(rgba(0xfdf6e3ff).into()),
@@ -86,6 +100,10 @@ pub fn solarized() -> UserThemeFamily {
                         terminal_ansi_white: Some(rgba(0xeee8d5ff).into()),
                         ..Default::default()
                     },
+                    status: StatusColorsRefinement {
+                        hidden: Some(rgba(0x586e75ff).into()),
+                        ..Default::default()
+                    },
                 },
             },
         ],

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

@@ -4,7 +4,8 @@
 use gpui::rgba;
 
 use crate::{
-    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeFamily,
+    UserThemeStylesRefinement,
 };
 
 pub fn synthwave_84() -> UserThemeFamily {
@@ -16,8 +17,13 @@ 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()),
@@ -37,6 +43,12 @@ 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()
+                },
             },
         }],
     }

crates/theme2/src/user_theme.rs 🔗

@@ -1,7 +1,7 @@
 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 +22,6 @@ pub struct UserTheme {
 pub struct UserThemeStyles {
     #[refineable]
     pub colors: ThemeColors,
+    #[refineable]
+    pub status: StatusColors,
 }

crates/theme_importer/src/main.rs 🔗

@@ -159,7 +159,7 @@ fn main() -> Result<()> {
             use gpui::rgba;
 
             use crate::{{
-                Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+                Appearance, ThemeColorsRefinement, StatusColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
             }};
 
             pub fn {theme_family_slug}() -> UserThemeFamily {{

crates/theme_importer/src/theme_printer.rs 🔗

@@ -2,8 +2,8 @@ use std::fmt::{self, Debug};
 
 use gpui::{Hsla, Rgba};
 use theme::{
-    Appearance, PlayerColor, PlayerColors, StatusColors, SyntaxTheme, SystemColors,
-    ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
+    Appearance, PlayerColor, PlayerColors, StatusColors, StatusColorsRefinement, SyntaxTheme,
+    SystemColors, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 struct RawSyntaxPrinter<'a>(&'a str);
@@ -92,6 +92,7 @@ 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))
             .finish()
     }
 }
@@ -250,23 +251,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("}")
     }
 }
 

crates/theme_importer/src/vscode.rs 🔗

@@ -1,7 +1,7 @@
 use anyhow::Result;
 use gpui::{Hsla, Rgba};
 use serde::Deserialize;
-use theme::{ThemeColorsRefinement, UserTheme, UserThemeStylesRefinement};
+use theme::{StatusColorsRefinement, ThemeColorsRefinement, UserTheme, UserThemeStylesRefinement};
 
 use crate::util::Traverse;
 use crate::ThemeMetadata;
@@ -435,6 +435,33 @@ impl VsCodeThemeConverter {
 
         let vscode_colors = &self.theme.colors;
 
+        let status_color_refinements = 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()
+        };
+
         let theme_colors_refinements = ThemeColorsRefinement {
             border: vscode_colors
                 .panel_border
@@ -596,6 +623,7 @@ impl VsCodeThemeConverter {
             appearance,
             styles: UserThemeStylesRefinement {
                 colors: theme_colors_refinements,
+                status: status_color_refinements,
             },
         })
     }