Merge remote-tracking branch 'origin/main' into editor-movement

Antonio Scandurra created

Change summary

Cargo.lock                                 |    1 
crates/client2/src/client2.rs              |   13 
crates/editor2/src/display_map.rs          |    4 
crates/editor2/src/editor.rs               |    4 
crates/editor2/src/items.rs                |    4 
crates/gpui2/src/action.rs                 |   51 
crates/gpui2/src/app/test_context.rs       |   21 
crates/gpui2/src/elements/div.rs           |   10 
crates/gpui2/src/geometry.rs               |    4 
crates/gpui2/src/gpui2.rs                  |    1 
crates/gpui2/src/interactive.rs            |   67 
crates/gpui2/src/platform/test.rs          |    4 
crates/gpui2/src/platform/test/display.rs  |   41 
crates/gpui2/src/platform/test/platform.rs |   33 
crates/gpui2/src/platform/test/window.rs   |  179 +
crates/gpui2/src/window.rs                 |    2 
crates/language2/src/language2.rs          |    6 
crates/storybook2/src/stories/focus.rs     |   14 
crates/theme2/Cargo.toml                   |    1 
crates/theme2/src/default_theme.rs         |   12 
crates/theme2/src/registry.rs              |   50 
crates/theme2/src/settings.rs              |    4 
crates/theme2/src/theme2.rs                |   15 
crates/theme2/src/themes/andromeda.rs      |  391 ---
crates/theme2/src/themes/ayu.rs            |  597 +-----
crates/theme2/src/themes/dracula.rs        |  205 -
crates/theme2/src/themes/gruvbox.rs        | 1173 ++----------
crates/theme2/src/themes/mod.rs            |    4 
crates/theme2/src/themes/night_owl.rs      |  400 ---
crates/theme2/src/themes/nord.rs           |  205 -
crates/theme2/src/themes/notctis.rs        | 2165 ++++-------------------
crates/theme2/src/themes/palenight.rs      |  594 +-----
crates/theme2/src/themes/rose_pine.rs      |  594 +-----
crates/theme2/src/themes/solarized.rs      |  393 ---
crates/theme2/src/themes/synthwave_84.rs   |  191 -
crates/theme2/src/user_theme.rs            |   25 
crates/theme_importer/src/main.rs          |   19 
crates/theme_importer/src/theme_printer.rs |  334 +--
crates/theme_importer/src/vscode.rs        |   48 
crates/workspace2/src/item.rs              |    8 
script/bundle                              |   10 
41 files changed, 1,818 insertions(+), 6,079 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -8997,6 +8997,7 @@ dependencies = [
  "settings2",
  "toml 0.5.11",
  "util",
+ "uuid 1.4.1",
 ]
 
 [[package]]

crates/client2/src/client2.rs 🔗

@@ -15,8 +15,8 @@ use futures::{
     TryStreamExt,
 };
 use gpui::{
-    serde_json, AnyModel, AnyWeakModel, AppContext, AsyncAppContext, Model, SemanticVersion, Task,
-    WeakModel,
+    actions, serde_json, AnyModel, AnyWeakModel, AppContext, AsyncAppContext, Model,
+    SemanticVersion, Task, WeakModel,
 };
 use lazy_static::lazy_static;
 use parking_lot::RwLock;
@@ -70,14 +70,7 @@ pub const ZED_SECRET_CLIENT_TOKEN: &str = "618033988749894";
 pub const INITIAL_RECONNECTION_DELAY: Duration = Duration::from_millis(100);
 pub const CONNECTION_TIMEOUT: Duration = Duration::from_secs(5);
 
-#[derive(Clone, Default, PartialEq, Deserialize)]
-pub struct SignIn;
-
-#[derive(Clone, Default, PartialEq, Deserialize)]
-pub struct SignOut;
-
-#[derive(Clone, Default, PartialEq, Deserialize)]
-pub struct Reconnect;
+actions!(SignIn, SignOut, Reconnect);
 
 pub fn init_settings(cx: &mut AppContext) {
     TelemetrySettings::register(cx);

crates/editor2/src/display_map.rs 🔗

@@ -21,7 +21,7 @@ use lsp::DiagnosticSeverity;
 use std::{any::TypeId, borrow::Cow, fmt::Debug, num::NonZeroU32, ops::Range, sync::Arc};
 use sum_tree::{Bias, TreeMap};
 use tab_map::TabMap;
-use theme::ThemeVariant;
+use theme::Theme;
 use wrap_map::WrapMap;
 
 pub use block_map::{
@@ -505,7 +505,7 @@ impl DisplaySnapshot {
         &'a self,
         display_rows: Range<u32>,
         language_aware: bool,
-        theme: &'a ThemeVariant,
+        theme: &'a Theme,
     ) -> impl Iterator<Item = HighlightedChunk<'a>> {
         self.chunks(
             display_rows,

crates/editor2/src/editor.rs 🔗

@@ -82,7 +82,7 @@ use std::{
 pub use sum_tree::Bias;
 use sum_tree::TreeMap;
 use text::Rope;
-use theme::{ActiveTheme, PlayerColor, ThemeColors, ThemeSettings, ThemeVariant};
+use theme::{ActiveTheme, PlayerColor, Theme, ThemeColors, ThemeSettings};
 use util::{post_inc, RangeExt, ResultExt, TryFutureExt};
 use workspace::{ItemNavHistory, SplitDirection, ViewId, Workspace};
 
@@ -9982,7 +9982,7 @@ pub fn highlight_diagnostic_message(
     (message_without_backticks, highlights)
 }
 
-pub fn diagnostic_style(severity: DiagnosticSeverity, valid: bool, theme: &ThemeVariant) -> Hsla {
+pub fn diagnostic_style(severity: DiagnosticSeverity, valid: bool, theme: &Theme) -> Hsla {
     match (severity, valid) {
         (DiagnosticSeverity::ERROR, true) => theme.status().error,
         (DiagnosticSeverity::ERROR, false) => theme.status().error,

crates/editor2/src/items.rs 🔗

@@ -27,7 +27,7 @@ use std::{
     sync::Arc,
 };
 use text::Selection;
-use theme::{ActiveTheme, ThemeVariant};
+use theme::{ActiveTheme, Theme};
 use util::{paths::PathExt, ResultExt, TryFutureExt};
 use workspace::item::{BreadcrumbText, FollowableItemHandle};
 use workspace::{
@@ -777,7 +777,7 @@ impl Item for Editor {
         ToolbarItemLocation::PrimaryLeft { flex: None }
     }
 
-    fn breadcrumbs(&self, variant: &ThemeVariant, cx: &AppContext) -> Option<Vec<BreadcrumbText>> {
+    fn breadcrumbs(&self, variant: &Theme, cx: &AppContext) -> Option<Vec<BreadcrumbText>> {
         todo!();
         // let cursor = self.selections.newest_anchor().head();
         // let multibuffer = &self.buffer().read(cx);

crates/gpui2/src/action.rs 🔗

@@ -4,7 +4,7 @@ use collections::{HashMap, HashSet};
 use serde::Deserialize;
 use std::any::{type_name, Any};
 
-pub trait Action: 'static {
+pub trait Action: std::fmt::Debug + 'static {
     fn qualified_name() -> SharedString
     where
         Self: Sized;
@@ -17,12 +17,38 @@ pub trait Action: 'static {
     fn as_any(&self) -> &dyn Any;
 }
 
+// actions defines structs that can be used as actions.
+#[macro_export]
+macro_rules! actions {
+    () => {};
+
+    ( $name:ident ) => {
+        #[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug, ::std::cmp::PartialEq, $crate::serde::Deserialize)]
+        struct $name;
+    };
+
+    ( $name:ident { $($token:tt)* } ) => {
+        #[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug, ::std::cmp::PartialEq, $crate::serde::Deserialize)]
+        struct $name { $($token)* }
+    };
+
+    ( $name:ident, $($rest:tt)* ) => {
+        actions!($name);
+        actions!($($rest)*);
+    };
+
+    ( $name:ident { $($token:tt)* }, $($rest:tt)* ) => {
+        actions!($name { $($token)* });
+        actions!($($rest)*);
+    };
+}
+
 impl<A> Action for A
 where
-    A: for<'a> Deserialize<'a> + PartialEq + Clone + Default + 'static,
+    A: for<'a> Deserialize<'a> + PartialEq + Clone + Default + std::fmt::Debug + 'static,
 {
     fn qualified_name() -> SharedString {
-        // todo!() remove this
+        // todo!() remove the 2 replacement when migration is done
         type_name::<A>().replace("2::", "::").into()
     }
 
@@ -293,6 +319,25 @@ mod tests {
     use super::*;
     use DispatchContextPredicate::*;
 
+    #[test]
+    fn test_actions_definition() {
+        {
+            actions!(A, B { field: i32 }, C, D, E, F {}, G);
+        }
+
+        {
+            actions!(
+                A,
+                B { field: i32 },
+                C,
+                D,
+                E,
+                F {},
+                G, // Don't wrap, test the trailing comma
+            );
+        }
+    }
+
     #[test]
     fn test_parse_context() {
         let mut expected = DispatchContext::default();

crates/gpui2/src/app/test_context.rs 🔗

@@ -1,7 +1,7 @@
 use crate::{
     AnyView, AnyWindowHandle, AppCell, AppContext, AsyncAppContext, BackgroundExecutor, Context,
-    EventEmitter, ForegroundExecutor, Model, ModelContext, Result, Task, TestDispatcher,
-    TestPlatform, WindowContext,
+    EventEmitter, ForegroundExecutor, InputEvent, KeyDownEvent, Keystroke, Model, ModelContext,
+    Result, Task, TestDispatcher, TestPlatform, WindowContext,
 };
 use anyhow::{anyhow, bail};
 use futures::{Stream, StreamExt};
@@ -129,6 +129,23 @@ impl TestAppContext {
         }
     }
 
+    pub fn dispatch_keystroke(
+        &mut self,
+        window: AnyWindowHandle,
+        keystroke: Keystroke,
+        is_held: bool,
+    ) {
+        let handled = window
+            .update(self, |_, cx| {
+                cx.dispatch_event(InputEvent::KeyDown(KeyDownEvent { keystroke, is_held }))
+            })
+            .is_ok_and(|handled| handled);
+
+        if !handled {
+            // todo!() simluate input here
+        }
+    }
+
     pub fn notifications<T: 'static>(&mut self, entity: &Model<T>) -> impl Stream<Item = ()> {
         let (tx, rx) = futures::channel::mpsc::unbounded();
 

crates/gpui2/src/elements/div.rs 🔗

@@ -209,15 +209,15 @@ where
         cx: &mut ViewContext<V>,
     ) -> Self::ElementState {
         let mut element_state = element_state.unwrap_or_default();
-        self.focus
-            .initialize(element_state.focus_handle.take(), cx, |focus_handle, cx| {
-                element_state.focus_handle = focus_handle;
-                self.interaction.initialize(cx, |cx| {
+        self.interaction.initialize(cx, |cx| {
+            self.focus
+                .initialize(element_state.focus_handle.take(), cx, |focus_handle, cx| {
+                    element_state.focus_handle = focus_handle;
                     for child in &mut self.children {
                         child.initialize(view_state, cx);
                     }
                 })
-            });
+        });
         element_state
     }
 

crates/gpui2/src/geometry.rs 🔗

@@ -25,6 +25,10 @@ impl<T: Clone + Debug + Default> Point<T> {
         Self { x, y }
     }
 
+    pub fn zero() -> Self {
+        Self::new(T::default(), T::default())
+    }
+
     pub fn map<U: Clone + Default + Debug>(&self, f: impl Fn(T) -> U) -> Point<U> {
         Point {
             x: f(self.x.clone()),

crates/gpui2/src/interactive.rs 🔗

@@ -1230,3 +1230,70 @@ pub type KeyListener<V> = Box<
         ) -> Option<Box<dyn Action>>
         + 'static,
 >;
+
+#[cfg(test)]
+mod test {
+    use crate::{
+        self as gpui, div, Div, FocusHandle, KeyBinding, Keystroke, ParentElement, Render,
+        StatefulInteraction, StatelessInteractive, TestAppContext, VisualContext,
+    };
+
+    struct TestView {
+        saw_key_down: bool,
+        saw_action: bool,
+        focus_handle: FocusHandle,
+    }
+
+    actions!(TestAction);
+
+    impl Render for TestView {
+        type Element = Div<Self, StatefulInteraction<Self>>;
+
+        fn render(&mut self, _: &mut gpui::ViewContext<Self>) -> Self::Element {
+            div().id("testview").child(
+                div()
+                    .on_key_down(|this: &mut TestView, _, _, _| {
+                        dbg!("ola!");
+                        this.saw_key_down = true
+                    })
+                    .on_action(|this: &mut TestView, _: &TestAction, _, _| {
+                        dbg!("ola!");
+                        this.saw_action = true
+                    })
+                    .track_focus(&self.focus_handle),
+            )
+        }
+    }
+
+    #[gpui::test]
+    fn test_on_events(cx: &mut TestAppContext) {
+        let window = cx.update(|cx| {
+            cx.open_window(Default::default(), |cx| {
+                cx.build_view(|cx| TestView {
+                    saw_key_down: false,
+                    saw_action: false,
+                    focus_handle: cx.focus_handle(),
+                })
+            })
+        });
+
+        cx.update(|cx| {
+            cx.bind_keys(vec![KeyBinding::new("ctrl-g", TestAction, None)]);
+        });
+
+        window
+            .update(cx, |test_view, cx| cx.focus(&test_view.focus_handle))
+            .unwrap();
+
+        cx.dispatch_keystroke(*window, Keystroke::parse("space").unwrap(), false);
+        cx.dispatch_keystroke(*window, Keystroke::parse("ctrl-g").unwrap(), false);
+
+        window
+            .update(cx, |test_view, _| {
+                assert!(test_view.saw_key_down || test_view.saw_action);
+                assert!(test_view.saw_key_down);
+                assert!(test_view.saw_action);
+            })
+            .unwrap();
+    }
+}

crates/gpui2/src/platform/test.rs 🔗

@@ -1,5 +1,9 @@
 mod dispatcher;
+mod display;
 mod platform;
+mod window;
 
 pub use dispatcher::*;
+pub use display::*;
 pub use platform::*;
+pub use window::*;

crates/gpui2/src/platform/test/display.rs 🔗

@@ -0,0 +1,41 @@
+use anyhow::{Ok, Result};
+
+use crate::{Bounds, DisplayId, GlobalPixels, PlatformDisplay, Point};
+
+#[derive(Debug)]
+pub struct TestDisplay {
+    id: DisplayId,
+    uuid: uuid::Uuid,
+    bounds: Bounds<GlobalPixels>,
+}
+
+impl TestDisplay {
+    pub fn new() -> Self {
+        TestDisplay {
+            id: DisplayId(1),
+            uuid: uuid::Uuid::new_v4(),
+            bounds: Bounds::from_corners(
+                Point::zero(),
+                Point::new(GlobalPixels(1920.), GlobalPixels(1080.)),
+            ),
+        }
+    }
+}
+
+impl PlatformDisplay for TestDisplay {
+    fn id(&self) -> crate::DisplayId {
+        self.id
+    }
+
+    fn uuid(&self) -> Result<uuid::Uuid> {
+        Ok(self.uuid)
+    }
+
+    fn as_any(&self) -> &dyn std::any::Any {
+        todo!()
+    }
+
+    fn bounds(&self) -> crate::Bounds<crate::GlobalPixels> {
+        self.bounds
+    }
+}

crates/gpui2/src/platform/test/platform.rs 🔗

@@ -1,10 +1,18 @@
-use crate::{BackgroundExecutor, DisplayId, ForegroundExecutor, Platform, PlatformTextSystem};
+use crate::{
+    AnyWindowHandle, BackgroundExecutor, CursorStyle, DisplayId, ForegroundExecutor, Platform,
+    PlatformDisplay, PlatformTextSystem, TestDisplay, TestWindow, WindowOptions,
+};
 use anyhow::{anyhow, Result};
-use std::sync::Arc;
+use parking_lot::Mutex;
+use std::{rc::Rc, sync::Arc};
 
 pub struct TestPlatform {
     background_executor: BackgroundExecutor,
     foreground_executor: ForegroundExecutor,
+
+    active_window: Arc<Mutex<Option<AnyWindowHandle>>>,
+    active_display: Rc<dyn PlatformDisplay>,
+    active_cursor: Mutex<CursorStyle>,
 }
 
 impl TestPlatform {
@@ -12,6 +20,10 @@ impl TestPlatform {
         TestPlatform {
             background_executor: executor,
             foreground_executor,
+
+            active_cursor: Default::default(),
+            active_display: Rc::new(TestDisplay::new()),
+            active_window: Default::default(),
         }
     }
 }
@@ -59,11 +71,11 @@ impl Platform for TestPlatform {
     }
 
     fn displays(&self) -> Vec<std::rc::Rc<dyn crate::PlatformDisplay>> {
-        unimplemented!()
+        vec![self.active_display.clone()]
     }
 
-    fn display(&self, _id: DisplayId) -> Option<std::rc::Rc<dyn crate::PlatformDisplay>> {
-        unimplemented!()
+    fn display(&self, id: DisplayId) -> Option<std::rc::Rc<dyn crate::PlatformDisplay>> {
+        self.displays().iter().find(|d| d.id() == id).cloned()
     }
 
     fn main_window(&self) -> Option<crate::AnyWindowHandle> {
@@ -72,10 +84,11 @@ impl Platform for TestPlatform {
 
     fn open_window(
         &self,
-        _handle: crate::AnyWindowHandle,
-        _options: crate::WindowOptions,
+        handle: AnyWindowHandle,
+        options: WindowOptions,
     ) -> Box<dyn crate::PlatformWindow> {
-        unimplemented!()
+        *self.active_window.lock() = Some(handle);
+        Box::new(TestWindow::new(options, self.active_display.clone()))
     }
 
     fn set_display_link_output_callback(
@@ -164,8 +177,8 @@ impl Platform for TestPlatform {
         unimplemented!()
     }
 
-    fn set_cursor_style(&self, _style: crate::CursorStyle) {
-        unimplemented!()
+    fn set_cursor_style(&self, style: crate::CursorStyle) {
+        *self.active_cursor.lock() = style;
     }
 
     fn should_auto_hide_scrollbars(&self) -> bool {

crates/gpui2/src/platform/test/window.rs 🔗

@@ -0,0 +1,179 @@
+use std::{rc::Rc, sync::Arc};
+
+use parking_lot::Mutex;
+
+use crate::{
+    px, Pixels, PlatformAtlas, PlatformDisplay, PlatformWindow, Point, Scene, Size,
+    WindowAppearance, WindowBounds, WindowOptions,
+};
+
+#[derive(Default)]
+struct Handlers {
+    active_status_change: Vec<Box<dyn FnMut(bool)>>,
+    input: Vec<Box<dyn FnMut(crate::InputEvent) -> bool>>,
+    moved: Vec<Box<dyn FnMut()>>,
+    resize: Vec<Box<dyn FnMut(Size<Pixels>, f32)>>,
+}
+
+pub struct TestWindow {
+    bounds: WindowBounds,
+    current_scene: Mutex<Option<Scene>>,
+    display: Rc<dyn PlatformDisplay>,
+
+    handlers: Mutex<Handlers>,
+    sprite_atlas: Arc<dyn PlatformAtlas>,
+}
+impl TestWindow {
+    pub fn new(options: WindowOptions, display: Rc<dyn PlatformDisplay>) -> Self {
+        Self {
+            bounds: options.bounds,
+            current_scene: Default::default(),
+            display,
+
+            sprite_atlas: Arc::new(TestAtlas),
+            handlers: Default::default(),
+        }
+    }
+}
+
+impl PlatformWindow for TestWindow {
+    fn bounds(&self) -> WindowBounds {
+        self.bounds
+    }
+
+    fn content_size(&self) -> Size<Pixels> {
+        let bounds = match self.bounds {
+            WindowBounds::Fixed(bounds) => bounds,
+            WindowBounds::Maximized | WindowBounds::Fullscreen => self.display().bounds(),
+        };
+        bounds.size.map(|p| px(p.0))
+    }
+
+    fn scale_factor(&self) -> f32 {
+        2.0
+    }
+
+    fn titlebar_height(&self) -> Pixels {
+        todo!()
+    }
+
+    fn appearance(&self) -> WindowAppearance {
+        todo!()
+    }
+
+    fn display(&self) -> std::rc::Rc<dyn crate::PlatformDisplay> {
+        self.display.clone()
+    }
+
+    fn mouse_position(&self) -> Point<Pixels> {
+        Point::zero()
+    }
+
+    fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
+        todo!()
+    }
+
+    fn set_input_handler(&mut self, _input_handler: Box<dyn crate::PlatformInputHandler>) {
+        todo!()
+    }
+
+    fn prompt(
+        &self,
+        _level: crate::PromptLevel,
+        _msg: &str,
+        _answers: &[&str],
+    ) -> futures::channel::oneshot::Receiver<usize> {
+        todo!()
+    }
+
+    fn activate(&self) {
+        todo!()
+    }
+
+    fn set_title(&mut self, _title: &str) {
+        todo!()
+    }
+
+    fn set_edited(&mut self, _edited: bool) {
+        todo!()
+    }
+
+    fn show_character_palette(&self) {
+        todo!()
+    }
+
+    fn minimize(&self) {
+        todo!()
+    }
+
+    fn zoom(&self) {
+        todo!()
+    }
+
+    fn toggle_full_screen(&self) {
+        todo!()
+    }
+
+    fn on_input(&self, callback: Box<dyn FnMut(crate::InputEvent) -> bool>) {
+        self.handlers.lock().input.push(callback)
+    }
+
+    fn on_active_status_change(&self, callback: Box<dyn FnMut(bool)>) {
+        self.handlers.lock().active_status_change.push(callback)
+    }
+
+    fn on_resize(&self, callback: Box<dyn FnMut(Size<Pixels>, f32)>) {
+        self.handlers.lock().resize.push(callback)
+    }
+
+    fn on_fullscreen(&self, _callback: Box<dyn FnMut(bool)>) {
+        todo!()
+    }
+
+    fn on_moved(&self, callback: Box<dyn FnMut()>) {
+        self.handlers.lock().moved.push(callback)
+    }
+
+    fn on_should_close(&self, _callback: Box<dyn FnMut() -> bool>) {
+        todo!()
+    }
+
+    fn on_close(&self, _callback: Box<dyn FnOnce()>) {
+        todo!()
+    }
+
+    fn on_appearance_changed(&self, _callback: Box<dyn FnMut()>) {
+        todo!()
+    }
+
+    fn is_topmost_for_position(&self, _position: crate::Point<Pixels>) -> bool {
+        todo!()
+    }
+
+    fn draw(&self, scene: crate::Scene) {
+        self.current_scene.lock().replace(scene);
+    }
+
+    fn sprite_atlas(&self) -> std::sync::Arc<dyn crate::PlatformAtlas> {
+        self.sprite_atlas.clone()
+    }
+}
+
+pub struct TestAtlas;
+
+impl PlatformAtlas for TestAtlas {
+    fn get_or_insert_with<'a>(
+        &self,
+        _key: &crate::AtlasKey,
+        _build: &mut dyn FnMut() -> anyhow::Result<(
+            Size<crate::DevicePixels>,
+            std::borrow::Cow<'a, [u8]>,
+        )>,
+    ) -> anyhow::Result<crate::AtlasTile> {
+        todo!()
+    }
+
+    fn clear(&self) {
+        todo!()
+    }
+}

crates/gpui2/src/window.rs 🔗

@@ -1047,7 +1047,7 @@ impl<'a> WindowContext<'a> {
     }
 
     /// Dispatch a mouse or keyboard event on the window.
-    fn dispatch_event(&mut self, event: InputEvent) -> bool {
+    pub fn dispatch_event(&mut self, event: InputEvent) -> bool {
         let event = match event {
             // Track the mouse position with our own state, since accessing the platform
             // API for the mouse position can only occur on the main thread.

crates/language2/src/language2.rs 🔗

@@ -43,7 +43,7 @@ use std::{
     },
 };
 use syntax_map::SyntaxSnapshot;
-use theme::{SyntaxTheme, ThemeVariant};
+use theme::{SyntaxTheme, Theme};
 use tree_sitter::{self, Query};
 use unicase::UniCase;
 use util::{http::HttpClient, paths::PathExt};
@@ -643,7 +643,7 @@ struct LanguageRegistryState {
     next_available_language_id: AvailableLanguageId,
     loading_languages: HashMap<AvailableLanguageId, Vec<oneshot::Sender<Result<Arc<Language>>>>>,
     subscription: (watch::Sender<()>, watch::Receiver<()>),
-    theme: Option<Arc<ThemeVariant>>,
+    theme: Option<Arc<Theme>>,
     version: usize,
     reload_count: usize,
 }
@@ -744,7 +744,7 @@ impl LanguageRegistry {
         self.state.read().reload_count
     }
 
-    pub fn set_theme(&self, theme: Arc<ThemeVariant>) {
+    pub fn set_theme(&self, theme: Arc<Theme>) {
         let mut state = self.state.write();
         state.theme = Some(theme.clone());
         for language in &state.languages {

crates/storybook2/src/stories/focus.rs 🔗

@@ -1,18 +1,10 @@
 use gpui::{
-    div, Div, FocusEnabled, Focusable, KeyBinding, ParentElement, Render, StatefulInteraction,
-    StatelessInteractive, Styled, View, VisualContext, WindowContext,
+    actions, div, Div, FocusEnabled, Focusable, KeyBinding, ParentElement, Render,
+    StatefulInteraction, StatelessInteractive, Styled, View, VisualContext, WindowContext,
 };
-use serde::Deserialize;
 use theme2::ActiveTheme;
 
-#[derive(Clone, Default, PartialEq, Deserialize)]
-struct ActionA;
-
-#[derive(Clone, Default, PartialEq, Deserialize)]
-struct ActionB;
-
-#[derive(Clone, Default, PartialEq, Deserialize)]
-struct ActionC;
+actions!(ActionA, ActionB, ActionC);
 
 pub struct FocusStory {}
 

crates/theme2/Cargo.toml 🔗

@@ -28,6 +28,7 @@ serde_derive.workspace = true
 serde_json.workspace = true
 settings = { package = "settings2", path = "../settings2" }
 toml.workspace = true
+uuid.workspace = true
 util = { path = "../util" }
 
 [dev-dependencies]

crates/theme2/src/default_theme.rs 🔗

@@ -1,10 +1,10 @@
 use crate::{
     colors::{GitStatusColors, PlayerColors, StatusColors, SystemColors, ThemeColors, ThemeStyles},
-    default_color_scales, Appearance, SyntaxTheme, ThemeFamily, ThemeVariant,
+    default_color_scales, Appearance, SyntaxTheme, Theme, ThemeFamily,
 };
 
-fn zed_pro_daylight() -> ThemeVariant {
-    ThemeVariant {
+fn zed_pro_daylight() -> Theme {
+    Theme {
         id: "zed_pro_daylight".to_string(),
         name: "Zed Pro Daylight".into(),
         appearance: Appearance::Light,
@@ -19,8 +19,8 @@ fn zed_pro_daylight() -> ThemeVariant {
     }
 }
 
-pub(crate) fn zed_pro_moonlight() -> ThemeVariant {
-    ThemeVariant {
+pub(crate) fn zed_pro_moonlight() -> Theme {
+    Theme {
         id: "zed_pro_moonlight".to_string(),
         name: "Zed Pro Moonlight".into(),
         appearance: Appearance::Dark,
@@ -51,7 +51,7 @@ impl Default for ThemeFamily {
     }
 }
 
-impl Default for ThemeVariant {
+impl Default for Theme {
     fn default() -> Self {
         zed_pro_daylight()
     }

crates/theme2/src/registry.rs 🔗

@@ -1,10 +1,17 @@
-use crate::{zed_pro_family, ThemeFamily, ThemeVariant};
+use std::collections::HashMap;
+use std::sync::Arc;
+
 use anyhow::{anyhow, Result};
 use gpui::SharedString;
-use std::{collections::HashMap, sync::Arc};
+use refineable::Refineable;
+
+use crate::{
+    zed_pro_family, Appearance, GitStatusColors, PlayerColors, StatusColors, SyntaxTheme,
+    SystemColors, Theme, ThemeColors, ThemeFamily, ThemeStyles, UserTheme, UserThemeFamily,
+};
 
 pub struct ThemeRegistry {
-    themes: HashMap<SharedString, Arc<ThemeVariant>>,
+    themes: HashMap<SharedString, Arc<Theme>>,
 }
 
 impl ThemeRegistry {
@@ -14,12 +21,43 @@ impl ThemeRegistry {
         }
     }
 
-    fn insert_themes(&mut self, themes: impl IntoIterator<Item = ThemeVariant>) {
+    fn insert_themes(&mut self, themes: impl IntoIterator<Item = Theme>) {
         for theme in themes.into_iter() {
             self.themes.insert(theme.name.clone(), Arc::new(theme));
         }
     }
 
+    fn insert_user_theme_familes(&mut self, families: impl IntoIterator<Item = UserThemeFamily>) {
+        for family in families.into_iter() {
+            self.insert_user_themes(family.themes);
+        }
+    }
+
+    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);
+
+            Theme {
+                id: uuid::Uuid::new_v4().to_string(),
+                name: user_theme.name.into(),
+                appearance: user_theme.appearance,
+                styles: ThemeStyles {
+                    system: SystemColors::default(),
+                    colors: theme_colors,
+                    status: StatusColors::default(),
+                    git: GitStatusColors::default(),
+                    player: PlayerColors::default(),
+                    syntax: SyntaxTheme::default_dark(),
+                },
+            }
+        }));
+    }
+
     pub fn list_names(&self, _staff: bool) -> impl Iterator<Item = SharedString> + '_ {
         self.themes.keys().cloned()
     }
@@ -28,7 +66,7 @@ impl ThemeRegistry {
         self.themes.values().map(|theme| theme.name.clone())
     }
 
-    pub fn get(&self, name: &str) -> Result<Arc<ThemeVariant>> {
+    pub fn get(&self, name: &str) -> Result<Arc<Theme>> {
         self.themes
             .get(name)
             .ok_or_else(|| anyhow!("theme not found: {}", name))
@@ -43,7 +81,7 @@ impl Default for ThemeRegistry {
         };
 
         this.insert_theme_families([zed_pro_family()]);
-        this.insert_theme_families(crate::all_imported_themes());
+        this.insert_user_theme_familes(crate::all_imported_themes());
 
         this
     }

crates/theme2/src/settings.rs 🔗

@@ -1,4 +1,4 @@
-use crate::{ThemeRegistry, ThemeVariant};
+use crate::{Theme, ThemeRegistry};
 use anyhow::Result;
 use gpui::{px, AppContext, Font, FontFeatures, FontStyle, FontWeight, Pixels};
 use schemars::{
@@ -21,7 +21,7 @@ pub struct ThemeSettings {
     pub buffer_font: Font,
     pub buffer_font_size: Pixels,
     pub buffer_line_height: BufferLineHeight,
-    pub active_theme: Arc<ThemeVariant>,
+    pub active_theme: Arc<Theme>,
 }
 
 #[derive(Default)]

crates/theme2/src/theme2.rs 🔗

@@ -6,6 +6,7 @@ mod scale;
 mod settings;
 mod syntax;
 mod themes;
+mod user_theme;
 
 use std::sync::Arc;
 
@@ -18,10 +19,12 @@ pub use scale::*;
 pub use settings::*;
 pub use syntax::*;
 pub use themes::*;
+pub use user_theme::*;
 
 use gpui::{AppContext, Hsla, SharedString};
+use serde::Deserialize;
 
-#[derive(Debug, PartialEq, Clone, Copy)]
+#[derive(Debug, PartialEq, Clone, Copy, Deserialize)]
 pub enum Appearance {
     Light,
     Dark,
@@ -33,11 +36,11 @@ pub fn init(cx: &mut AppContext) {
 }
 
 pub trait ActiveTheme {
-    fn theme(&self) -> &Arc<ThemeVariant>;
+    fn theme(&self) -> &Arc<Theme>;
 }
 
 impl ActiveTheme for AppContext {
-    fn theme(&self) -> &Arc<ThemeVariant> {
+    fn theme(&self) -> &Arc<Theme> {
         &ThemeSettings::get_global(self).active_theme
     }
 }
@@ -46,20 +49,20 @@ pub struct ThemeFamily {
     pub id: String,
     pub name: SharedString,
     pub author: SharedString,
-    pub themes: Vec<ThemeVariant>,
+    pub themes: Vec<Theme>,
     pub scales: ColorScales,
 }
 
 impl ThemeFamily {}
 
-pub struct ThemeVariant {
+pub struct Theme {
     pub id: String,
     pub name: SharedString,
     pub appearance: Appearance,
     pub styles: ThemeStyles,
 }
 
-impl ThemeVariant {
+impl Theme {
     /// Returns the [`ThemeColors`] for the theme.
     #[inline(always)]
     pub fn players(&self) -> &PlayerColors {

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

@@ -1,351 +1,82 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn andromeda() -> ThemeFamily {
-    ThemeFamily {
-        id: "ecd46547-a042-424d-99ca-5f56c060f798".into(),
+pub fn andromeda() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Andromeda".into(),
         author: "Eliver Lara (EliverLara)".into(),
         themes: vec![
-            ThemeVariant {
-                id: "3bfb3b6e-365a-4cd2-9a80-2d2c81434729".into(),
+            UserTheme {
                 name: "Andromeda".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x1b1d23ff).into(),
-                        border_variant: rgba(0x1b1d23ff).into(),
-                        border_focused: rgba(0x1b1d23ff).into(),
-                        border_selected: rgba(0x1b1d23ff).into(),
-                        border_transparent: rgba(0x1b1d23ff).into(),
-                        border_disabled: rgba(0x1b1d23ff).into(),
-                        elevated_surface_background: rgba(0x23262eff).into(),
-                        surface_background: rgba(0x23262eff).into(),
-                        background: rgba(0x23262eff).into(),
-                        element_background: rgba(0x00e8c5cc).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xd4cdd8ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x23262eff).into(),
-                        tab_active_background: rgba(0x23262eff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x111113ff).into(),
-                        terminal_ansi_bright_black: rgba(0x000000e6).into(),
-                        terminal_ansi_bright_red: rgba(0xee5d42ff).into(),
-                        terminal_ansi_bright_green: rgba(0x95e072ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xffe66dff).into(),
-                        terminal_ansi_bright_blue: rgba(0x7bb7ffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xff00a9ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x00e8c6ff).into(),
-                        terminal_ansi_bright_white: rgba(0xb0b4baff).into(),
-                        terminal_ansi_black: rgba(0x000000f2).into(),
-                        terminal_ansi_red: rgba(0xee5d42ff).into(),
-                        terminal_ansi_green: rgba(0x95e072ff).into(),
-                        terminal_ansi_yellow: rgba(0xffe66dff).into(),
-                        terminal_ansi_blue: rgba(0x7bb7ffff).into(),
-                        terminal_ansi_magenta: rgba(0xff00a9ff).into(),
-                        terminal_ansi_cyan: rgba(0x00e8c6ff).into(),
-                        terminal_ansi_white: rgba(0xedeef0ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x1b1d23ff).into()),
+                        border_variant: Some(rgba(0x1b1d23ff).into()),
+                        border_focused: Some(rgba(0x1b1d23ff).into()),
+                        border_selected: Some(rgba(0x1b1d23ff).into()),
+                        border_transparent: Some(rgba(0x1b1d23ff).into()),
+                        border_disabled: Some(rgba(0x1b1d23ff).into()),
+                        elevated_surface_background: Some(rgba(0x23262eff).into()),
+                        surface_background: Some(rgba(0x23262eff).into()),
+                        background: Some(rgba(0x23262eff).into()),
+                        element_background: Some(rgba(0x00e8c5cc).into()),
+                        text: Some(rgba(0xd4cdd8ff).into()),
+                        tab_inactive_background: Some(rgba(0x23262eff).into()),
+                        tab_active_background: Some(rgba(0x23262eff).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()),
+                        terminal_ansi_bright_blue: Some(rgba(0x7bb7ffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xff00a9ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x00e8c6ff).into()),
+                        terminal_ansi_red: Some(rgba(0xee5d42ff).into()),
+                        terminal_ansi_green: Some(rgba(0x95e072ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xffe66dff).into()),
+                        terminal_ansi_blue: Some(rgba(0x7bb7ffff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xff00a9ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x00e8c6ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "7bc92ac8-152c-46d5-b346-df68e4db2e7c".into(),
+            UserTheme {
                 name: "Andromeda Bordered".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x1b1d23ff).into(),
-                        border_variant: rgba(0x1b1d23ff).into(),
-                        border_focused: rgba(0x1b1d23ff).into(),
-                        border_selected: rgba(0x1b1d23ff).into(),
-                        border_transparent: rgba(0x1b1d23ff).into(),
-                        border_disabled: rgba(0x1b1d23ff).into(),
-                        elevated_surface_background: rgba(0x23262eff).into(),
-                        surface_background: rgba(0x23262eff).into(),
-                        background: rgba(0x262933ff).into(),
-                        element_background: rgba(0x00e8c5cc).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xd4cdd8ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x23262eff).into(),
-                        tab_active_background: rgba(0x262933ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x111113ff).into(),
-                        terminal_ansi_bright_black: rgba(0x000000e6).into(),
-                        terminal_ansi_bright_red: rgba(0xee5d42ff).into(),
-                        terminal_ansi_bright_green: rgba(0x95e072ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xffe66dff).into(),
-                        terminal_ansi_bright_blue: rgba(0x7bb7ffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xff00a9ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x00e8c6ff).into(),
-                        terminal_ansi_bright_white: rgba(0xb0b4baff).into(),
-                        terminal_ansi_black: rgba(0x000000f2).into(),
-                        terminal_ansi_red: rgba(0xee5d42ff).into(),
-                        terminal_ansi_green: rgba(0x95e072ff).into(),
-                        terminal_ansi_yellow: rgba(0xffe66dff).into(),
-                        terminal_ansi_blue: rgba(0x7bb7ffff).into(),
-                        terminal_ansi_magenta: rgba(0xff00a9ff).into(),
-                        terminal_ansi_cyan: rgba(0x00e8c6ff).into(),
-                        terminal_ansi_white: rgba(0xedeef0ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x1b1d23ff).into()),
+                        border_variant: Some(rgba(0x1b1d23ff).into()),
+                        border_focused: Some(rgba(0x1b1d23ff).into()),
+                        border_selected: Some(rgba(0x1b1d23ff).into()),
+                        border_transparent: Some(rgba(0x1b1d23ff).into()),
+                        border_disabled: Some(rgba(0x1b1d23ff).into()),
+                        elevated_surface_background: Some(rgba(0x23262eff).into()),
+                        surface_background: Some(rgba(0x23262eff).into()),
+                        background: Some(rgba(0x262933ff).into()),
+                        element_background: Some(rgba(0x00e8c5cc).into()),
+                        text: Some(rgba(0xd4cdd8ff).into()),
+                        tab_inactive_background: Some(rgba(0x23262eff).into()),
+                        tab_active_background: Some(rgba(0x262933ff).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()),
+                        terminal_ansi_bright_blue: Some(rgba(0x7bb7ffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xff00a9ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x00e8c6ff).into()),
+                        terminal_ansi_red: Some(rgba(0xee5d42ff).into()),
+                        terminal_ansi_green: Some(rgba(0x95e072ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xffe66dff).into()),
+                        terminal_ansi_blue: Some(rgba(0x7bb7ffff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xff00a9ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x00e8c6ff).into()),
+                        ..Default::default()
                     },
                 },
             },
         ],
-        scales: default_color_scales(),
     }
 }

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

@@ -1,518 +1,131 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn ayu() -> ThemeFamily {
-    ThemeFamily {
-        id: "4faecf44-837e-4034-9197-7da909668498".into(),
+pub fn ayu() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Ayu".into(),
         author: "dempfi (Ike Ku)".into(),
         themes: vec![
-            ThemeVariant {
-                id: "733aeb9b-98fd-4492-984e-d71540daf72e".into(),
+            UserTheme {
                 name: "Ayu Light".into(),
                 appearance: Appearance::Light,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x6b7d8f1f).into(),
-                        border_variant: rgba(0x6b7d8f1f).into(),
-                        border_focused: rgba(0x6b7d8f1f).into(),
-                        border_selected: rgba(0x6b7d8f1f).into(),
-                        border_transparent: rgba(0x6b7d8f1f).into(),
-                        border_disabled: rgba(0x6b7d8f1f).into(),
-                        elevated_surface_background: rgba(0xf8f9faff).into(),
-                        surface_background: rgba(0xf8f9faff).into(),
-                        background: rgba(0xf8f9faff).into(),
-                        element_background: rgba(0xffaa32ff).into(),
-                        element_hover: rgba(0xe8e8ecff).into(),
-                        element_active: rgba(0xe0e1e6ff).into(),
-                        element_selected: rgba(0xe0e1e6ff).into(),
-                        element_disabled: rgba(0x0000320f).into(),
-                        element_placeholder: rgba(0x60646cff).into(),
-                        element_drop_target: rgba(0x008bff0b).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0xe8e8ecff).into(),
-                        ghost_element_active: rgba(0xe0e1e6ff).into(),
-                        ghost_element_selected: rgba(0xe0e1e6ff).into(),
-                        ghost_element_disabled: rgba(0x0000320f).into(),
-                        text: rgba(0x8a9199ff).into(),
-                        text_muted: rgba(0x60646cff).into(),
-                        text_placeholder: rgba(0x80838dff).into(),
-                        text_disabled: rgba(0x8b8d98ff).into(),
-                        text_accent: rgba(0x0c73ceff).into(),
-                        icon: rgba(0x60646cff).into(),
-                        icon_muted: rgba(0x80838dff).into(),
-                        icon_disabled: rgba(0x8b8d98ff).into(),
-                        icon_placeholder: rgba(0x80838dff).into(),
-                        icon_accent: rgba(0x0c73ceff).into(),
-                        status_bar_background: rgba(0xf9f9fbff).into(),
-                        title_bar_background: rgba(0xf9f9fbff).into(),
-                        toolbar_background: rgba(0xfcfcfdff).into(),
-                        tab_bar_background: rgba(0xf9f9fbff).into(),
-                        tab_inactive_background: rgba(0xf8f9faff).into(),
-                        tab_active_background: rgba(0xf8f9faff).into(),
-                        editor_background: rgba(0xfcfcfdff).into(),
-                        editor_gutter_background: rgba(0xfcfcfdff).into(),
-                        editor_subheader_background: rgba(0xf9f9fbff).into(),
-                        editor_active_line_background: rgba(0x0000320f).into(),
-                        editor_highlighted_line_background: rgba(0x00002c17).into(),
-                        editor_line_number: rgba(0x0000320f).into(),
-                        editor_active_line_number: rgba(0x0000320f).into(),
-                        editor_invisible: rgba(0x00002c17).into(),
-                        editor_wrap_guide: rgba(0x00002c17).into(),
-                        editor_active_wrap_guide: rgba(0x00002c17).into(),
-                        editor_document_highlight_read_background: rgba(0x00002c17).into(),
-                        editor_document_highlight_write_background: rgba(0x00002c17).into(),
-                        terminal_background: rgba(0xf8f9faff).into(),
-                        terminal_ansi_bright_black: rgba(0x686868ff).into(),
-                        terminal_ansi_bright_red: rgba(0xef7070ff).into(),
-                        terminal_ansi_bright_green: rgba(0x86b300ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xf2ad48ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x389ee6ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xa37accff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x4bbf98ff).into(),
-                        terminal_ansi_bright_white: rgba(0xd1d1d1ff).into(),
-                        terminal_ansi_black: rgba(0x000000ff).into(),
-                        terminal_ansi_red: rgba(0xea6c6dff).into(),
-                        terminal_ansi_green: rgba(0x6cbf43ff).into(),
-                        terminal_ansi_yellow: rgba(0xeca944ff).into(),
-                        terminal_ansi_blue: rgba(0x3198e1ff).into(),
-                        terminal_ansi_magenta: rgba(0x9e75c7ff).into(),
-                        terminal_ansi_cyan: rgba(0x46ba94ff).into(),
-                        terminal_ansi_white: rgba(0xc7c7c7ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x6b7d8f1f).into()),
+                        border_variant: Some(rgba(0x6b7d8f1f).into()),
+                        border_focused: Some(rgba(0x6b7d8f1f).into()),
+                        border_selected: Some(rgba(0x6b7d8f1f).into()),
+                        border_transparent: Some(rgba(0x6b7d8f1f).into()),
+                        border_disabled: Some(rgba(0x6b7d8f1f).into()),
+                        elevated_surface_background: Some(rgba(0xf8f9faff).into()),
+                        surface_background: Some(rgba(0xf8f9faff).into()),
+                        background: Some(rgba(0xf8f9faff).into()),
+                        element_background: Some(rgba(0xffaa32ff).into()),
+                        text: Some(rgba(0x8a9199ff).into()),
+                        tab_inactive_background: Some(rgba(0xf8f9faff).into()),
+                        tab_active_background: Some(rgba(0xf8f9faff).into()),
+                        terminal_background: Some(rgba(0xf8f9faff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x686868ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xef7070ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x86b300ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xf2ad48ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x389ee6ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xa37accff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x4bbf98ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xd1d1d1ff).into()),
+                        terminal_ansi_black: Some(rgba(0x000000ff).into()),
+                        terminal_ansi_red: Some(rgba(0xea6c6dff).into()),
+                        terminal_ansi_green: Some(rgba(0x6cbf43ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xeca944ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x3198e1ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0x9e75c7ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x46ba94ff).into()),
+                        terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "50f68427-2e1d-4bf1-981a-d08c6b38e846".into(),
+            UserTheme {
                 name: "Ayu Mirage".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x171a24ff).into(),
-                        border_variant: rgba(0x171a24ff).into(),
-                        border_focused: rgba(0x171a24ff).into(),
-                        border_selected: rgba(0x171a24ff).into(),
-                        border_transparent: rgba(0x171a24ff).into(),
-                        border_disabled: rgba(0x171a24ff).into(),
-                        elevated_surface_background: rgba(0x1f2430ff).into(),
-                        surface_background: rgba(0x1f2430ff).into(),
-                        background: rgba(0x1f2430ff).into(),
-                        element_background: rgba(0xffcb65ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0x707a8cff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x1f2430ff).into(),
-                        tab_active_background: rgba(0x1f2430ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x1f2430ff).into(),
-                        terminal_ansi_bright_black: rgba(0x686868ff).into(),
-                        terminal_ansi_bright_red: rgba(0xf18678ff).into(),
-                        terminal_ansi_bright_green: rgba(0xd4fe7fff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xffd173ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x73cfffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xdfbfffff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x95e6cbff).into(),
-                        terminal_ansi_bright_white: rgba(0xffffffff).into(),
-                        terminal_ansi_black: rgba(0x171a24ff).into(),
-                        terminal_ansi_red: rgba(0xed8173ff).into(),
-                        terminal_ansi_green: rgba(0x86d96bff).into(),
-                        terminal_ansi_yellow: rgba(0xfacc6eff).into(),
-                        terminal_ansi_blue: rgba(0x6ccafaff).into(),
-                        terminal_ansi_magenta: rgba(0xdabafaff).into(),
-                        terminal_ansi_cyan: rgba(0x90e1c6ff).into(),
-                        terminal_ansi_white: rgba(0xc7c7c7ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x171a24ff).into()),
+                        border_variant: Some(rgba(0x171a24ff).into()),
+                        border_focused: Some(rgba(0x171a24ff).into()),
+                        border_selected: Some(rgba(0x171a24ff).into()),
+                        border_transparent: Some(rgba(0x171a24ff).into()),
+                        border_disabled: Some(rgba(0x171a24ff).into()),
+                        elevated_surface_background: Some(rgba(0x1f2430ff).into()),
+                        surface_background: Some(rgba(0x1f2430ff).into()),
+                        background: Some(rgba(0x1f2430ff).into()),
+                        element_background: Some(rgba(0xffcb65ff).into()),
+                        text: Some(rgba(0x707a8cff).into()),
+                        tab_inactive_background: Some(rgba(0x1f2430ff).into()),
+                        tab_active_background: Some(rgba(0x1f2430ff).into()),
+                        terminal_background: Some(rgba(0x1f2430ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x686868ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xf18678ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0xd4fe7fff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xffd173ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x73cfffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xdfbfffff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x95e6cbff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xffffffff).into()),
+                        terminal_ansi_black: Some(rgba(0x171a24ff).into()),
+                        terminal_ansi_red: Some(rgba(0xed8173ff).into()),
+                        terminal_ansi_green: Some(rgba(0x86d96bff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xfacc6eff).into()),
+                        terminal_ansi_blue: Some(rgba(0x6ccafaff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xdabafaff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x90e1c6ff).into()),
+                        terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "22d8dede-57da-46e1-946a-16876679b4d2".into(),
+            UserTheme {
                 name: "Ayu Dark".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x1e232bff).into(),
-                        border_variant: rgba(0x1e232bff).into(),
-                        border_focused: rgba(0x1e232bff).into(),
-                        border_selected: rgba(0x1e232bff).into(),
-                        border_transparent: rgba(0x1e232bff).into(),
-                        border_disabled: rgba(0x1e232bff).into(),
-                        elevated_surface_background: rgba(0x0b0e14ff).into(),
-                        surface_background: rgba(0x0b0e14ff).into(),
-                        background: rgba(0x0b0e14ff).into(),
-                        element_background: rgba(0xe6b450ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0x565b66ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x0b0e14ff).into(),
-                        tab_active_background: rgba(0x0b0e14ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x0b0e14ff).into(),
-                        terminal_ansi_bright_black: rgba(0x686868ff).into(),
-                        terminal_ansi_bright_red: rgba(0xef7077ff).into(),
-                        terminal_ansi_bright_green: rgba(0xa9d94bff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xffb353ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x59c2ffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xd2a6ffff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x95e6cbff).into(),
-                        terminal_ansi_bright_white: rgba(0xffffffff).into(),
-                        terminal_ansi_black: rgba(0x1e232bff).into(),
-                        terminal_ansi_red: rgba(0xea6c72ff).into(),
-                        terminal_ansi_green: rgba(0x7ed962ff).into(),
-                        terminal_ansi_yellow: rgba(0xf9af4fff).into(),
-                        terminal_ansi_blue: rgba(0x52bdfaff).into(),
-                        terminal_ansi_magenta: rgba(0xcca1faff).into(),
-                        terminal_ansi_cyan: rgba(0x90e1c6ff).into(),
-                        terminal_ansi_white: rgba(0xc7c7c7ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x1e232bff).into()),
+                        border_variant: Some(rgba(0x1e232bff).into()),
+                        border_focused: Some(rgba(0x1e232bff).into()),
+                        border_selected: Some(rgba(0x1e232bff).into()),
+                        border_transparent: Some(rgba(0x1e232bff).into()),
+                        border_disabled: Some(rgba(0x1e232bff).into()),
+                        elevated_surface_background: Some(rgba(0x0b0e14ff).into()),
+                        surface_background: Some(rgba(0x0b0e14ff).into()),
+                        background: Some(rgba(0x0b0e14ff).into()),
+                        element_background: Some(rgba(0xe6b450ff).into()),
+                        text: Some(rgba(0x565b66ff).into()),
+                        tab_inactive_background: Some(rgba(0x0b0e14ff).into()),
+                        tab_active_background: Some(rgba(0x0b0e14ff).into()),
+                        terminal_background: Some(rgba(0x0b0e14ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x686868ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xef7077ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0xa9d94bff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xffb353ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x59c2ffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xd2a6ffff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x95e6cbff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xffffffff).into()),
+                        terminal_ansi_black: Some(rgba(0x1e232bff).into()),
+                        terminal_ansi_red: Some(rgba(0xea6c72ff).into()),
+                        terminal_ansi_green: Some(rgba(0x7ed962ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xf9af4fff).into()),
+                        terminal_ansi_blue: Some(rgba(0x52bdfaff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xcca1faff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x90e1c6ff).into()),
+                        terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
+                        ..Default::default()
                     },
                 },
             },
         ],
-        scales: default_color_scales(),
     }
 }

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

@@ -1,182 +1,51 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn dracula() -> ThemeFamily {
-    ThemeFamily {
-        id: "0abb0e55-f034-45d9-a84d-e880dfd65711".into(),
+pub fn dracula() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Dracula".into(),
         author: "Zeno Rocha".into(),
-        themes: vec![ThemeVariant {
-            id: "d20497ef-85be-4ea2-9070-a182d03aac73".into(),
+        themes: vec![UserTheme {
             name: "Dracula".into(),
             appearance: Appearance::Dark,
-            styles: ThemeStyles {
-                system: SystemColors {
-                    transparent: rgba(0x00000000).into(),
-                    mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                    mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                    mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                },
-                colors: ThemeColors {
-                    border: rgba(0xbd93f9ff).into(),
-                    border_variant: rgba(0xbd93f9ff).into(),
-                    border_focused: rgba(0xbd93f9ff).into(),
-                    border_selected: rgba(0xbd93f9ff).into(),
-                    border_transparent: rgba(0xbd93f9ff).into(),
-                    border_disabled: rgba(0xbd93f9ff).into(),
-                    elevated_surface_background: rgba(0x282a35ff).into(),
-                    surface_background: rgba(0x282a35ff).into(),
-                    background: rgba(0x282a35ff).into(),
-                    element_background: rgba(0x44475aff).into(),
-                    element_hover: rgba(0x272a2dff).into(),
-                    element_active: rgba(0x2e3135ff).into(),
-                    element_selected: rgba(0x2e3135ff).into(),
-                    element_disabled: rgba(0xddeaf814).into(),
-                    element_placeholder: rgba(0xb0b4baff).into(),
-                    element_drop_target: rgba(0x1166fb18).into(),
-                    ghost_element_background: rgba(0x00000000).into(),
-                    ghost_element_hover: rgba(0x272a2dff).into(),
-                    ghost_element_active: rgba(0x2e3135ff).into(),
-                    ghost_element_selected: rgba(0x2e3135ff).into(),
-                    ghost_element_disabled: rgba(0xddeaf814).into(),
-                    text: rgba(0xf8f8f2ff).into(),
-                    text_muted: rgba(0xb0b4baff).into(),
-                    text_placeholder: rgba(0x767a83ff).into(),
-                    text_disabled: rgba(0x696e77ff).into(),
-                    text_accent: rgba(0x6fb8ffff).into(),
-                    icon: rgba(0xb0b4baff).into(),
-                    icon_muted: rgba(0x767a83ff).into(),
-                    icon_disabled: rgba(0x696e77ff).into(),
-                    icon_placeholder: rgba(0x767a83ff).into(),
-                    icon_accent: rgba(0x6fb8ffff).into(),
-                    status_bar_background: rgba(0x18191bff).into(),
-                    title_bar_background: rgba(0x18191bff).into(),
-                    toolbar_background: rgba(0x111113ff).into(),
-                    tab_bar_background: rgba(0x18191bff).into(),
-                    tab_inactive_background: rgba(0x21222cff).into(),
-                    tab_active_background: rgba(0x282a35ff).into(),
-                    editor_background: rgba(0x111113ff).into(),
-                    editor_gutter_background: rgba(0x111113ff).into(),
-                    editor_subheader_background: rgba(0x18191bff).into(),
-                    editor_active_line_background: rgba(0xddeaf814).into(),
-                    editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                    editor_line_number: rgba(0xddeaf814).into(),
-                    editor_active_line_number: rgba(0xddeaf814).into(),
-                    editor_invisible: rgba(0xd3edf81d).into(),
-                    editor_wrap_guide: rgba(0xd3edf81d).into(),
-                    editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                    editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                    editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                    terminal_background: rgba(0x282a35ff).into(),
-                    terminal_ansi_bright_black: rgba(0x6272a4ff).into(),
-                    terminal_ansi_bright_red: rgba(0xff6d6dff).into(),
-                    terminal_ansi_bright_green: rgba(0x69ff94ff).into(),
-                    terminal_ansi_bright_yellow: rgba(0xffffa5ff).into(),
-                    terminal_ansi_bright_blue: rgba(0xd6abfeff).into(),
-                    terminal_ansi_bright_magenta: rgba(0xff92dfff).into(),
-                    terminal_ansi_bright_cyan: rgba(0xa3fefeff).into(),
-                    terminal_ansi_bright_white: rgba(0xffffffff).into(),
-                    terminal_ansi_black: rgba(0x21222cff).into(),
-                    terminal_ansi_red: rgba(0xff5555ff).into(),
-                    terminal_ansi_green: rgba(0x50fa7bff).into(),
-                    terminal_ansi_yellow: rgba(0xf1fa8cff).into(),
-                    terminal_ansi_blue: rgba(0xbd93f9ff).into(),
-                    terminal_ansi_magenta: rgba(0xff79c6ff).into(),
-                    terminal_ansi_cyan: rgba(0x8be9fdff).into(),
-                    terminal_ansi_white: rgba(0xf8f8f2ff).into(),
-                },
-                status: StatusColors {
-                    conflict: rgba(0xff9592ff).into(),
-                    created: rgba(0x70cf82ff).into(),
-                    deleted: rgba(0xff9592ff).into(),
-                    error: rgba(0xff9592ff).into(),
-                    hidden: rgba(0xb0b4baff).into(),
-                    ignored: rgba(0xb0b4baff).into(),
-                    info: rgba(0x6fb8ffff).into(),
-                    modified: rgba(0xf5e147ff).into(),
-                    renamed: rgba(0x6fb8ffff).into(),
-                    success: rgba(0x70cf82ff).into(),
-                    warning: rgba(0xf5e147ff).into(),
-                },
-                git: GitStatusColors {
-                    conflict: rgba(0xffa057ff).into(),
-                    created: rgba(0x70cf82ff).into(),
-                    deleted: rgba(0xff9592ff).into(),
-                    ignored: rgba(0xb0b4baff).into(),
-                    modified: rgba(0xf5e147ff).into(),
-                    renamed: rgba(0x6fb8ffff).into(),
-                },
-                player: PlayerColors(vec![
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                ]),
-                syntax: SyntaxTheme {
-                    highlights: vec![
-                        ("attribute".into(), rgba(0x4ccce6ff).into()),
-                        ("boolean".into(), rgba(0xff977dff).into()),
-                        ("comment".into(), rgba(0xb0b4baff).into()),
-                        ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                        ("constant".into(), rgba(0x8c323aff).into()),
-                        ("constructor".into(), rgba(0x8c323aff).into()),
-                        ("embedded".into(), rgba(0x8c323aff).into()),
-                        ("emphasis".into(), rgba(0x8c323aff).into()),
-                        ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                        ("enum".into(), rgba(0x8c323aff).into()),
-                        ("function".into(), rgba(0x8c323aff).into()),
-                        ("hint".into(), rgba(0x8c323aff).into()),
-                        ("keyword".into(), rgba(0xffa057ff).into()),
-                        ("label".into(), rgba(0x8c323aff).into()),
-                        ("link_text".into(), rgba(0x8c323aff).into()),
-                        ("link_uri".into(), rgba(0x8c323aff).into()),
-                        ("number".into(), rgba(0x8c323aff).into()),
-                        ("operator".into(), rgba(0x8c323aff).into()),
-                        ("predictive".into(), rgba(0x8c323aff).into()),
-                        ("preproc".into(), rgba(0x8c323aff).into()),
-                        ("primary".into(), rgba(0x8c323aff).into()),
-                        ("property".into(), rgba(0x8c323aff).into()),
-                        ("punctuation".into(), rgba(0xb0b4baff).into()),
-                        ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                        ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                        ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                        ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                        ("string".into(), rgba(0x1ed8a3ff).into()),
-                        ("string.escape".into(), rgba(0x8c323aff).into()),
-                        ("string.regex".into(), rgba(0xff977dff).into()),
-                        ("string.special".into(), rgba(0x8c323aff).into()),
-                        ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                        ("tag".into(), rgba(0x8c323aff).into()),
-                        ("text.literal".into(), rgba(0x8c323aff).into()),
-                        ("title".into(), rgba(0x8c323aff).into()),
-                        ("type".into(), rgba(0x8c323aff).into()),
-                        ("variable".into(), rgba(0x8c323aff).into()),
-                        ("variable.special".into(), rgba(0x8c323aff).into()),
-                        ("variant".into(), rgba(0x8c323aff).into()),
-                    ],
+            styles: UserThemeStylesRefinement {
+                colors: ThemeColorsRefinement {
+                    border: Some(rgba(0xbd93f9ff).into()),
+                    border_variant: Some(rgba(0xbd93f9ff).into()),
+                    border_focused: Some(rgba(0xbd93f9ff).into()),
+                    border_selected: Some(rgba(0xbd93f9ff).into()),
+                    border_transparent: Some(rgba(0xbd93f9ff).into()),
+                    border_disabled: Some(rgba(0xbd93f9ff).into()),
+                    elevated_surface_background: Some(rgba(0x282a35ff).into()),
+                    surface_background: Some(rgba(0x282a35ff).into()),
+                    background: Some(rgba(0x282a35ff).into()),
+                    element_background: Some(rgba(0x44475aff).into()),
+                    text: Some(rgba(0xf8f8f2ff).into()),
+                    tab_inactive_background: Some(rgba(0x21222cff).into()),
+                    tab_active_background: Some(rgba(0x282a35ff).into()),
+                    terminal_background: Some(rgba(0x282a35ff).into()),
+                    terminal_ansi_bright_black: Some(rgba(0x6272a4ff).into()),
+                    terminal_ansi_bright_red: Some(rgba(0xff6d6dff).into()),
+                    terminal_ansi_bright_green: Some(rgba(0x69ff94ff).into()),
+                    terminal_ansi_bright_yellow: Some(rgba(0xffffa5ff).into()),
+                    terminal_ansi_bright_blue: Some(rgba(0xd6abfeff).into()),
+                    terminal_ansi_bright_magenta: Some(rgba(0xff92dfff).into()),
+                    terminal_ansi_bright_cyan: Some(rgba(0xa3fefeff).into()),
+                    terminal_ansi_bright_white: Some(rgba(0xffffffff).into()),
+                    terminal_ansi_black: Some(rgba(0x21222cff).into()),
+                    terminal_ansi_red: Some(rgba(0xff5555ff).into()),
+                    terminal_ansi_green: Some(rgba(0x50fa7bff).into()),
+                    terminal_ansi_yellow: Some(rgba(0xf1fa8cff).into()),
+                    terminal_ansi_blue: Some(rgba(0xbd93f9ff).into()),
+                    terminal_ansi_magenta: Some(rgba(0xff79c6ff).into()),
+                    terminal_ansi_cyan: Some(rgba(0x8be9fdff).into()),
+                    terminal_ansi_white: Some(rgba(0xf8f8f2ff).into()),
+                    ..Default::default()
                 },
             },
         }],
-        scales: default_color_scales(),
     }
 }

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

@@ -1,1019 +1,236 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn gruvbox() -> ThemeFamily {
-    ThemeFamily {
-        id: "000a3e50-ccf1-430d-84e4-910583bd1064".into(),
+pub fn gruvbox() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Gruvbox".into(),
         author: "morhetz".into(),
         themes: vec![
-            ThemeVariant {
-                id: "0db938b2-2267-453b-af84-f82c5f3400e7".into(),
+            UserTheme {
                 name: "Gruvbox Dark Hard".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x3c3836ff).into(),
-                        border_variant: rgba(0x3c3836ff).into(),
-                        border_focused: rgba(0x3c3836ff).into(),
-                        border_selected: rgba(0x3c3836ff).into(),
-                        border_transparent: rgba(0x3c3836ff).into(),
-                        border_disabled: rgba(0x3c3836ff).into(),
-                        elevated_surface_background: rgba(0x18191bff).into(),
-                        surface_background: rgba(0x18191bff).into(),
-                        background: rgba(0x1d2021ff).into(),
-                        element_background: rgba(0x44858780).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xebdbb2ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x1d2021ff).into(),
-                        tab_active_background: rgba(0x32302fff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x1d2021ff).into(),
-                        terminal_ansi_bright_black: rgba(0x928374ff).into(),
-                        terminal_ansi_bright_red: rgba(0xfb4833ff).into(),
-                        terminal_ansi_bright_green: rgba(0xb8bb25ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xfabd2eff).into(),
-                        terminal_ansi_bright_blue: rgba(0x83a598ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xd3869bff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x8ec07cff).into(),
-                        terminal_ansi_bright_white: rgba(0xebdbb2ff).into(),
-                        terminal_ansi_black: rgba(0x3c3836ff).into(),
-                        terminal_ansi_red: rgba(0xcc241cff).into(),
-                        terminal_ansi_green: rgba(0x989719ff).into(),
-                        terminal_ansi_yellow: rgba(0xd79920ff).into(),
-                        terminal_ansi_blue: rgba(0x448587ff).into(),
-                        terminal_ansi_magenta: rgba(0xb16185ff).into(),
-                        terminal_ansi_cyan: rgba(0x679d6aff).into(),
-                        terminal_ansi_white: rgba(0xa89984ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x3c3836ff).into()),
+                        border_variant: Some(rgba(0x3c3836ff).into()),
+                        border_focused: Some(rgba(0x3c3836ff).into()),
+                        border_selected: Some(rgba(0x3c3836ff).into()),
+                        border_transparent: Some(rgba(0x3c3836ff).into()),
+                        border_disabled: Some(rgba(0x3c3836ff).into()),
+                        background: Some(rgba(0x1d2021ff).into()),
+                        element_background: Some(rgba(0x44858780).into()),
+                        text: Some(rgba(0xebdbb2ff).into()),
+                        tab_inactive_background: Some(rgba(0x1d2021ff).into()),
+                        tab_active_background: Some(rgba(0x32302fff).into()),
+                        terminal_background: Some(rgba(0x1d2021ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xfb4833ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0xb8bb25ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xfabd2eff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x83a598ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xd3869bff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x8ec07cff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xebdbb2ff).into()),
+                        terminal_ansi_black: Some(rgba(0x3c3836ff).into()),
+                        terminal_ansi_red: Some(rgba(0xcc241cff).into()),
+                        terminal_ansi_green: Some(rgba(0x989719ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xd79920ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x448587ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xb16185ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x679d6aff).into()),
+                        terminal_ansi_white: Some(rgba(0xa89984ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "8e1a1896-ed0f-40be-b127-6c389eacc9f1".into(),
+            UserTheme {
                 name: "Gruvbox Dark Medium".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x3c3836ff).into(),
-                        border_variant: rgba(0x3c3836ff).into(),
-                        border_focused: rgba(0x3c3836ff).into(),
-                        border_selected: rgba(0x3c3836ff).into(),
-                        border_transparent: rgba(0x3c3836ff).into(),
-                        border_disabled: rgba(0x3c3836ff).into(),
-                        elevated_surface_background: rgba(0x18191bff).into(),
-                        surface_background: rgba(0x18191bff).into(),
-                        background: rgba(0x282828ff).into(),
-                        element_background: rgba(0x44858780).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xebdbb2ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x282828ff).into(),
-                        tab_active_background: rgba(0x3c3836ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x282828ff).into(),
-                        terminal_ansi_bright_black: rgba(0x928374ff).into(),
-                        terminal_ansi_bright_red: rgba(0xfb4833ff).into(),
-                        terminal_ansi_bright_green: rgba(0xb8bb25ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xfabd2eff).into(),
-                        terminal_ansi_bright_blue: rgba(0x83a598ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xd3869bff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x8ec07cff).into(),
-                        terminal_ansi_bright_white: rgba(0xebdbb2ff).into(),
-                        terminal_ansi_black: rgba(0x3c3836ff).into(),
-                        terminal_ansi_red: rgba(0xcc241cff).into(),
-                        terminal_ansi_green: rgba(0x989719ff).into(),
-                        terminal_ansi_yellow: rgba(0xd79920ff).into(),
-                        terminal_ansi_blue: rgba(0x448587ff).into(),
-                        terminal_ansi_magenta: rgba(0xb16185ff).into(),
-                        terminal_ansi_cyan: rgba(0x679d6aff).into(),
-                        terminal_ansi_white: rgba(0xa89984ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x3c3836ff).into()),
+                        border_variant: Some(rgba(0x3c3836ff).into()),
+                        border_focused: Some(rgba(0x3c3836ff).into()),
+                        border_selected: Some(rgba(0x3c3836ff).into()),
+                        border_transparent: Some(rgba(0x3c3836ff).into()),
+                        border_disabled: Some(rgba(0x3c3836ff).into()),
+                        background: Some(rgba(0x282828ff).into()),
+                        element_background: Some(rgba(0x44858780).into()),
+                        text: Some(rgba(0xebdbb2ff).into()),
+                        tab_inactive_background: Some(rgba(0x282828ff).into()),
+                        tab_active_background: Some(rgba(0x3c3836ff).into()),
+                        terminal_background: Some(rgba(0x282828ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xfb4833ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0xb8bb25ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xfabd2eff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x83a598ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xd3869bff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x8ec07cff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xebdbb2ff).into()),
+                        terminal_ansi_black: Some(rgba(0x3c3836ff).into()),
+                        terminal_ansi_red: Some(rgba(0xcc241cff).into()),
+                        terminal_ansi_green: Some(rgba(0x989719ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xd79920ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x448587ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xb16185ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x679d6aff).into()),
+                        terminal_ansi_white: Some(rgba(0xa89984ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "94410e6f-f4c4-4669-bb4d-5a20b4e4b1f3".into(),
+            UserTheme {
                 name: "Gruvbox Dark Soft".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x3c3836ff).into(),
-                        border_variant: rgba(0x3c3836ff).into(),
-                        border_focused: rgba(0x3c3836ff).into(),
-                        border_selected: rgba(0x3c3836ff).into(),
-                        border_transparent: rgba(0x3c3836ff).into(),
-                        border_disabled: rgba(0x3c3836ff).into(),
-                        elevated_surface_background: rgba(0x18191bff).into(),
-                        surface_background: rgba(0x18191bff).into(),
-                        background: rgba(0x32302fff).into(),
-                        element_background: rgba(0x44858780).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xebdbb2ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x32302fff).into(),
-                        tab_active_background: rgba(0x504945ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x32302fff).into(),
-                        terminal_ansi_bright_black: rgba(0x928374ff).into(),
-                        terminal_ansi_bright_red: rgba(0xfb4833ff).into(),
-                        terminal_ansi_bright_green: rgba(0xb8bb25ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xfabd2eff).into(),
-                        terminal_ansi_bright_blue: rgba(0x83a598ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xd3869bff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x8ec07cff).into(),
-                        terminal_ansi_bright_white: rgba(0xebdbb2ff).into(),
-                        terminal_ansi_black: rgba(0x3c3836ff).into(),
-                        terminal_ansi_red: rgba(0xcc241cff).into(),
-                        terminal_ansi_green: rgba(0x989719ff).into(),
-                        terminal_ansi_yellow: rgba(0xd79920ff).into(),
-                        terminal_ansi_blue: rgba(0x448587ff).into(),
-                        terminal_ansi_magenta: rgba(0xb16185ff).into(),
-                        terminal_ansi_cyan: rgba(0x679d6aff).into(),
-                        terminal_ansi_white: rgba(0xa89984ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x3c3836ff).into()),
+                        border_variant: Some(rgba(0x3c3836ff).into()),
+                        border_focused: Some(rgba(0x3c3836ff).into()),
+                        border_selected: Some(rgba(0x3c3836ff).into()),
+                        border_transparent: Some(rgba(0x3c3836ff).into()),
+                        border_disabled: Some(rgba(0x3c3836ff).into()),
+                        background: Some(rgba(0x32302fff).into()),
+                        element_background: Some(rgba(0x44858780).into()),
+                        text: Some(rgba(0xebdbb2ff).into()),
+                        tab_inactive_background: Some(rgba(0x32302fff).into()),
+                        tab_active_background: Some(rgba(0x504945ff).into()),
+                        terminal_background: Some(rgba(0x32302fff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xfb4833ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0xb8bb25ff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xfabd2eff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x83a598ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xd3869bff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x8ec07cff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xebdbb2ff).into()),
+                        terminal_ansi_black: Some(rgba(0x3c3836ff).into()),
+                        terminal_ansi_red: Some(rgba(0xcc241cff).into()),
+                        terminal_ansi_green: Some(rgba(0x989719ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xd79920ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x448587ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xb16185ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x679d6aff).into()),
+                        terminal_ansi_white: Some(rgba(0xa89984ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "e4a58582-478a-4934-ad73-135e23a0d66e".into(),
+            UserTheme {
                 name: "Gruvbox Light Hard".into(),
                 appearance: Appearance::Light,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0xebdbb2ff).into(),
-                        border_variant: rgba(0xebdbb2ff).into(),
-                        border_focused: rgba(0xebdbb2ff).into(),
-                        border_selected: rgba(0xebdbb2ff).into(),
-                        border_transparent: rgba(0xebdbb2ff).into(),
-                        border_disabled: rgba(0xebdbb2ff).into(),
-                        elevated_surface_background: rgba(0xf9f9fbff).into(),
-                        surface_background: rgba(0xf9f9fbff).into(),
-                        background: rgba(0xf9f5d7ff).into(),
-                        element_background: rgba(0x44858780).into(),
-                        element_hover: rgba(0xe8e8ecff).into(),
-                        element_active: rgba(0xe0e1e6ff).into(),
-                        element_selected: rgba(0xe0e1e6ff).into(),
-                        element_disabled: rgba(0x0000320f).into(),
-                        element_placeholder: rgba(0x60646cff).into(),
-                        element_drop_target: rgba(0x008bff0b).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0xe8e8ecff).into(),
-                        ghost_element_active: rgba(0xe0e1e6ff).into(),
-                        ghost_element_selected: rgba(0xe0e1e6ff).into(),
-                        ghost_element_disabled: rgba(0x0000320f).into(),
-                        text: rgba(0x3c3836ff).into(),
-                        text_muted: rgba(0x60646cff).into(),
-                        text_placeholder: rgba(0x80838dff).into(),
-                        text_disabled: rgba(0x8b8d98ff).into(),
-                        text_accent: rgba(0x0c73ceff).into(),
-                        icon: rgba(0x60646cff).into(),
-                        icon_muted: rgba(0x80838dff).into(),
-                        icon_disabled: rgba(0x8b8d98ff).into(),
-                        icon_placeholder: rgba(0x80838dff).into(),
-                        icon_accent: rgba(0x0c73ceff).into(),
-                        status_bar_background: rgba(0xf9f9fbff).into(),
-                        title_bar_background: rgba(0xf9f9fbff).into(),
-                        toolbar_background: rgba(0xfcfcfdff).into(),
-                        tab_bar_background: rgba(0xf9f9fbff).into(),
-                        tab_inactive_background: rgba(0xf9f5d7ff).into(),
-                        tab_active_background: rgba(0xf2e5bcff).into(),
-                        editor_background: rgba(0xfcfcfdff).into(),
-                        editor_gutter_background: rgba(0xfcfcfdff).into(),
-                        editor_subheader_background: rgba(0xf9f9fbff).into(),
-                        editor_active_line_background: rgba(0x0000320f).into(),
-                        editor_highlighted_line_background: rgba(0x00002c17).into(),
-                        editor_line_number: rgba(0x0000320f).into(),
-                        editor_active_line_number: rgba(0x0000320f).into(),
-                        editor_invisible: rgba(0x00002c17).into(),
-                        editor_wrap_guide: rgba(0x00002c17).into(),
-                        editor_active_wrap_guide: rgba(0x00002c17).into(),
-                        editor_document_highlight_read_background: rgba(0x00002c17).into(),
-                        editor_document_highlight_write_background: rgba(0x00002c17).into(),
-                        terminal_background: rgba(0xf9f5d7ff).into(),
-                        terminal_ansi_bright_black: rgba(0x928374ff).into(),
-                        terminal_ansi_bright_red: rgba(0x9d0006ff).into(),
-                        terminal_ansi_bright_green: rgba(0x79740eff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xb57613ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x066578ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0x8f3e71ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x427b58ff).into(),
-                        terminal_ansi_bright_white: rgba(0x3c3836ff).into(),
-                        terminal_ansi_black: rgba(0xebdbb2ff).into(),
-                        terminal_ansi_red: rgba(0xcc241cff).into(),
-                        terminal_ansi_green: rgba(0x989719ff).into(),
-                        terminal_ansi_yellow: rgba(0xd79920ff).into(),
-                        terminal_ansi_blue: rgba(0x448587ff).into(),
-                        terminal_ansi_magenta: rgba(0xb16185ff).into(),
-                        terminal_ansi_cyan: rgba(0x679d6aff).into(),
-                        terminal_ansi_white: rgba(0x7c6f64ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0xebdbb2ff).into()),
+                        border_variant: Some(rgba(0xebdbb2ff).into()),
+                        border_focused: Some(rgba(0xebdbb2ff).into()),
+                        border_selected: Some(rgba(0xebdbb2ff).into()),
+                        border_transparent: Some(rgba(0xebdbb2ff).into()),
+                        border_disabled: Some(rgba(0xebdbb2ff).into()),
+                        background: Some(rgba(0xf9f5d7ff).into()),
+                        element_background: Some(rgba(0x44858780).into()),
+                        text: Some(rgba(0x3c3836ff).into()),
+                        tab_inactive_background: Some(rgba(0xf9f5d7ff).into()),
+                        tab_active_background: Some(rgba(0xf2e5bcff).into()),
+                        terminal_background: Some(rgba(0xf9f5d7ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0x9d0006ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x79740eff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xb57613ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x066578ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0x8f3e71ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x427b58ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0x3c3836ff).into()),
+                        terminal_ansi_black: Some(rgba(0xebdbb2ff).into()),
+                        terminal_ansi_red: Some(rgba(0xcc241cff).into()),
+                        terminal_ansi_green: Some(rgba(0x989719ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xd79920ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x448587ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xb16185ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x679d6aff).into()),
+                        terminal_ansi_white: Some(rgba(0x7c6f64ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "0e875280-93fa-4c76-8874-f858c7d985c1".into(),
+            UserTheme {
                 name: "Gruvbox Light Medium".into(),
                 appearance: Appearance::Light,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0xebdbb2ff).into(),
-                        border_variant: rgba(0xebdbb2ff).into(),
-                        border_focused: rgba(0xebdbb2ff).into(),
-                        border_selected: rgba(0xebdbb2ff).into(),
-                        border_transparent: rgba(0xebdbb2ff).into(),
-                        border_disabled: rgba(0xebdbb2ff).into(),
-                        elevated_surface_background: rgba(0xf9f9fbff).into(),
-                        surface_background: rgba(0xf9f9fbff).into(),
-                        background: rgba(0xfbf1c7ff).into(),
-                        element_background: rgba(0x44858780).into(),
-                        element_hover: rgba(0xe8e8ecff).into(),
-                        element_active: rgba(0xe0e1e6ff).into(),
-                        element_selected: rgba(0xe0e1e6ff).into(),
-                        element_disabled: rgba(0x0000320f).into(),
-                        element_placeholder: rgba(0x60646cff).into(),
-                        element_drop_target: rgba(0x008bff0b).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0xe8e8ecff).into(),
-                        ghost_element_active: rgba(0xe0e1e6ff).into(),
-                        ghost_element_selected: rgba(0xe0e1e6ff).into(),
-                        ghost_element_disabled: rgba(0x0000320f).into(),
-                        text: rgba(0x3c3836ff).into(),
-                        text_muted: rgba(0x60646cff).into(),
-                        text_placeholder: rgba(0x80838dff).into(),
-                        text_disabled: rgba(0x8b8d98ff).into(),
-                        text_accent: rgba(0x0c73ceff).into(),
-                        icon: rgba(0x60646cff).into(),
-                        icon_muted: rgba(0x80838dff).into(),
-                        icon_disabled: rgba(0x8b8d98ff).into(),
-                        icon_placeholder: rgba(0x80838dff).into(),
-                        icon_accent: rgba(0x0c73ceff).into(),
-                        status_bar_background: rgba(0xf9f9fbff).into(),
-                        title_bar_background: rgba(0xf9f9fbff).into(),
-                        toolbar_background: rgba(0xfcfcfdff).into(),
-                        tab_bar_background: rgba(0xf9f9fbff).into(),
-                        tab_inactive_background: rgba(0xfbf1c7ff).into(),
-                        tab_active_background: rgba(0xebdbb2ff).into(),
-                        editor_background: rgba(0xfcfcfdff).into(),
-                        editor_gutter_background: rgba(0xfcfcfdff).into(),
-                        editor_subheader_background: rgba(0xf9f9fbff).into(),
-                        editor_active_line_background: rgba(0x0000320f).into(),
-                        editor_highlighted_line_background: rgba(0x00002c17).into(),
-                        editor_line_number: rgba(0x0000320f).into(),
-                        editor_active_line_number: rgba(0x0000320f).into(),
-                        editor_invisible: rgba(0x00002c17).into(),
-                        editor_wrap_guide: rgba(0x00002c17).into(),
-                        editor_active_wrap_guide: rgba(0x00002c17).into(),
-                        editor_document_highlight_read_background: rgba(0x00002c17).into(),
-                        editor_document_highlight_write_background: rgba(0x00002c17).into(),
-                        terminal_background: rgba(0xfbf1c7ff).into(),
-                        terminal_ansi_bright_black: rgba(0x928374ff).into(),
-                        terminal_ansi_bright_red: rgba(0x9d0006ff).into(),
-                        terminal_ansi_bright_green: rgba(0x79740eff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xb57613ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x066578ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0x8f3e71ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x427b58ff).into(),
-                        terminal_ansi_bright_white: rgba(0x3c3836ff).into(),
-                        terminal_ansi_black: rgba(0xebdbb2ff).into(),
-                        terminal_ansi_red: rgba(0xcc241cff).into(),
-                        terminal_ansi_green: rgba(0x989719ff).into(),
-                        terminal_ansi_yellow: rgba(0xd79920ff).into(),
-                        terminal_ansi_blue: rgba(0x448587ff).into(),
-                        terminal_ansi_magenta: rgba(0xb16185ff).into(),
-                        terminal_ansi_cyan: rgba(0x679d6aff).into(),
-                        terminal_ansi_white: rgba(0x7c6f64ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0xebdbb2ff).into()),
+                        border_variant: Some(rgba(0xebdbb2ff).into()),
+                        border_focused: Some(rgba(0xebdbb2ff).into()),
+                        border_selected: Some(rgba(0xebdbb2ff).into()),
+                        border_transparent: Some(rgba(0xebdbb2ff).into()),
+                        border_disabled: Some(rgba(0xebdbb2ff).into()),
+                        background: Some(rgba(0xfbf1c7ff).into()),
+                        element_background: Some(rgba(0x44858780).into()),
+                        text: Some(rgba(0x3c3836ff).into()),
+                        tab_inactive_background: Some(rgba(0xfbf1c7ff).into()),
+                        tab_active_background: Some(rgba(0xebdbb2ff).into()),
+                        terminal_background: Some(rgba(0xfbf1c7ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0x9d0006ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x79740eff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xb57613ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x066578ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0x8f3e71ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x427b58ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0x3c3836ff).into()),
+                        terminal_ansi_black: Some(rgba(0xebdbb2ff).into()),
+                        terminal_ansi_red: Some(rgba(0xcc241cff).into()),
+                        terminal_ansi_green: Some(rgba(0x989719ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xd79920ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x448587ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xb16185ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x679d6aff).into()),
+                        terminal_ansi_white: Some(rgba(0x7c6f64ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "914dbe6f-bc0f-4e6f-8d8c-5f4cabc1ca2d".into(),
+            UserTheme {
                 name: "Gruvbox Light Soft".into(),
                 appearance: Appearance::Light,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0xebdbb2ff).into(),
-                        border_variant: rgba(0xebdbb2ff).into(),
-                        border_focused: rgba(0xebdbb2ff).into(),
-                        border_selected: rgba(0xebdbb2ff).into(),
-                        border_transparent: rgba(0xebdbb2ff).into(),
-                        border_disabled: rgba(0xebdbb2ff).into(),
-                        elevated_surface_background: rgba(0xf9f9fbff).into(),
-                        surface_background: rgba(0xf9f9fbff).into(),
-                        background: rgba(0xf2e5bcff).into(),
-                        element_background: rgba(0x44858780).into(),
-                        element_hover: rgba(0xe8e8ecff).into(),
-                        element_active: rgba(0xe0e1e6ff).into(),
-                        element_selected: rgba(0xe0e1e6ff).into(),
-                        element_disabled: rgba(0x0000320f).into(),
-                        element_placeholder: rgba(0x60646cff).into(),
-                        element_drop_target: rgba(0x008bff0b).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0xe8e8ecff).into(),
-                        ghost_element_active: rgba(0xe0e1e6ff).into(),
-                        ghost_element_selected: rgba(0xe0e1e6ff).into(),
-                        ghost_element_disabled: rgba(0x0000320f).into(),
-                        text: rgba(0x3c3836ff).into(),
-                        text_muted: rgba(0x60646cff).into(),
-                        text_placeholder: rgba(0x80838dff).into(),
-                        text_disabled: rgba(0x8b8d98ff).into(),
-                        text_accent: rgba(0x0c73ceff).into(),
-                        icon: rgba(0x60646cff).into(),
-                        icon_muted: rgba(0x80838dff).into(),
-                        icon_disabled: rgba(0x8b8d98ff).into(),
-                        icon_placeholder: rgba(0x80838dff).into(),
-                        icon_accent: rgba(0x0c73ceff).into(),
-                        status_bar_background: rgba(0xf9f9fbff).into(),
-                        title_bar_background: rgba(0xf9f9fbff).into(),
-                        toolbar_background: rgba(0xfcfcfdff).into(),
-                        tab_bar_background: rgba(0xf9f9fbff).into(),
-                        tab_inactive_background: rgba(0xf2e5bcff).into(),
-                        tab_active_background: rgba(0xd5c4a1ff).into(),
-                        editor_background: rgba(0xfcfcfdff).into(),
-                        editor_gutter_background: rgba(0xfcfcfdff).into(),
-                        editor_subheader_background: rgba(0xf9f9fbff).into(),
-                        editor_active_line_background: rgba(0x0000320f).into(),
-                        editor_highlighted_line_background: rgba(0x00002c17).into(),
-                        editor_line_number: rgba(0x0000320f).into(),
-                        editor_active_line_number: rgba(0x0000320f).into(),
-                        editor_invisible: rgba(0x00002c17).into(),
-                        editor_wrap_guide: rgba(0x00002c17).into(),
-                        editor_active_wrap_guide: rgba(0x00002c17).into(),
-                        editor_document_highlight_read_background: rgba(0x00002c17).into(),
-                        editor_document_highlight_write_background: rgba(0x00002c17).into(),
-                        terminal_background: rgba(0xf2e5bcff).into(),
-                        terminal_ansi_bright_black: rgba(0x928374ff).into(),
-                        terminal_ansi_bright_red: rgba(0x9d0006ff).into(),
-                        terminal_ansi_bright_green: rgba(0x79740eff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xb57613ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x066578ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0x8f3e71ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x427b58ff).into(),
-                        terminal_ansi_bright_white: rgba(0x3c3836ff).into(),
-                        terminal_ansi_black: rgba(0xebdbb2ff).into(),
-                        terminal_ansi_red: rgba(0xcc241cff).into(),
-                        terminal_ansi_green: rgba(0x989719ff).into(),
-                        terminal_ansi_yellow: rgba(0xd79920ff).into(),
-                        terminal_ansi_blue: rgba(0x448587ff).into(),
-                        terminal_ansi_magenta: rgba(0xb16185ff).into(),
-                        terminal_ansi_cyan: rgba(0x679d6aff).into(),
-                        terminal_ansi_white: rgba(0x7c6f64ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0xebdbb2ff).into()),
+                        border_variant: Some(rgba(0xebdbb2ff).into()),
+                        border_focused: Some(rgba(0xebdbb2ff).into()),
+                        border_selected: Some(rgba(0xebdbb2ff).into()),
+                        border_transparent: Some(rgba(0xebdbb2ff).into()),
+                        border_disabled: Some(rgba(0xebdbb2ff).into()),
+                        background: Some(rgba(0xf2e5bcff).into()),
+                        element_background: Some(rgba(0x44858780).into()),
+                        text: Some(rgba(0x3c3836ff).into()),
+                        tab_inactive_background: Some(rgba(0xf2e5bcff).into()),
+                        tab_active_background: Some(rgba(0xd5c4a1ff).into()),
+                        terminal_background: Some(rgba(0xf2e5bcff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x928374ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0x9d0006ff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x79740eff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xb57613ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x066578ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0x8f3e71ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x427b58ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0x3c3836ff).into()),
+                        terminal_ansi_black: Some(rgba(0xebdbb2ff).into()),
+                        terminal_ansi_red: Some(rgba(0xcc241cff).into()),
+                        terminal_ansi_green: Some(rgba(0x989719ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xd79920ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x448587ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xb16185ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x679d6aff).into()),
+                        terminal_ansi_white: Some(rgba(0x7c6f64ff).into()),
+                        ..Default::default()
                     },
                 },
             },
         ],
-        scales: default_color_scales(),
     }
 }

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

@@ -22,9 +22,9 @@ pub use rose_pine::*;
 pub use solarized::*;
 pub use synthwave_84::*;
 
-use crate::ThemeFamily;
+use crate::UserThemeFamily;
 
-pub(crate) fn all_imported_themes() -> Vec<ThemeFamily> {
+pub(crate) fn all_imported_themes() -> Vec<UserThemeFamily> {
     vec![
         rose_pine(),
         night_owl(),

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

@@ -1,351 +1,91 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn night_owl() -> ThemeFamily {
-    ThemeFamily {
-        id: "19498197-1091-409d-b37a-a282998e5c31".into(),
+pub fn night_owl() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Night Owl".into(),
         author: "Sarah Drasner (sdras)".into(),
         themes: vec![
-            ThemeVariant {
-                id: "e5de91ed-fc95-46fb-a60b-ebd0602d04c7".into(),
+            UserTheme {
                 name: "Night Owl".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x5f7e97ff).into(),
-                        border_variant: rgba(0x5f7e97ff).into(),
-                        border_focused: rgba(0x5f7e97ff).into(),
-                        border_selected: rgba(0x5f7e97ff).into(),
-                        border_transparent: rgba(0x5f7e97ff).into(),
-                        border_disabled: rgba(0x5f7e97ff).into(),
-                        elevated_surface_background: rgba(0x011526ff).into(),
-                        surface_background: rgba(0x011526ff).into(),
-                        background: rgba(0x011526ff).into(),
-                        element_background: rgba(0x7d56c1cc).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xd6deebff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x01101cff).into(),
-                        tab_active_background: rgba(0x0a2842ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x111113ff).into(),
-                        terminal_ansi_bright_black: rgba(0x575656ff).into(),
-                        terminal_ansi_bright_red: rgba(0xef524fff).into(),
-                        terminal_ansi_bright_green: rgba(0x21da6eff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xffeb95ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x82aaffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xc792eaff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x7fdbcaff).into(),
-                        terminal_ansi_bright_white: rgba(0xffffffff).into(),
-                        terminal_ansi_black: rgba(0x011526ff).into(),
-                        terminal_ansi_red: rgba(0xef524fff).into(),
-                        terminal_ansi_green: rgba(0x21da6eff).into(),
-                        terminal_ansi_yellow: rgba(0xc5e478ff).into(),
-                        terminal_ansi_blue: rgba(0x82aaffff).into(),
-                        terminal_ansi_magenta: rgba(0xc792eaff).into(),
-                        terminal_ansi_cyan: rgba(0x20c7a7ff).into(),
-                        terminal_ansi_white: rgba(0xffffffff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x5f7e97ff).into()),
+                        border_variant: Some(rgba(0x5f7e97ff).into()),
+                        border_focused: Some(rgba(0x5f7e97ff).into()),
+                        border_selected: Some(rgba(0x5f7e97ff).into()),
+                        border_transparent: Some(rgba(0x5f7e97ff).into()),
+                        border_disabled: Some(rgba(0x5f7e97ff).into()),
+                        elevated_surface_background: Some(rgba(0x011526ff).into()),
+                        surface_background: Some(rgba(0x011526ff).into()),
+                        background: Some(rgba(0x011526ff).into()),
+                        element_background: Some(rgba(0x7d56c1cc).into()),
+                        text: Some(rgba(0xd6deebff).into()),
+                        tab_inactive_background: Some(rgba(0x01101cff).into()),
+                        tab_active_background: Some(rgba(0x0a2842ff).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()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xffeb95ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x82aaffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xc792eaff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x7fdbcaff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xffffffff).into()),
+                        terminal_ansi_black: Some(rgba(0x011526ff).into()),
+                        terminal_ansi_red: Some(rgba(0xef524fff).into()),
+                        terminal_ansi_green: Some(rgba(0x21da6eff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xc5e478ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x82aaffff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xc792eaff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x20c7a7ff).into()),
+                        terminal_ansi_white: Some(rgba(0xffffffff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "998fc053-40c1-4a32-a31f-a17c9c07949a".into(),
+            UserTheme {
                 name: "Night Owl Light".into(),
                 appearance: Appearance::Light,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0xd9d9d9ff).into(),
-                        border_variant: rgba(0xd9d9d9ff).into(),
-                        border_focused: rgba(0xd9d9d9ff).into(),
-                        border_selected: rgba(0xd9d9d9ff).into(),
-                        border_transparent: rgba(0xd9d9d9ff).into(),
-                        border_disabled: rgba(0xd9d9d9ff).into(),
-                        elevated_surface_background: rgba(0xf0f0f0ff).into(),
-                        surface_background: rgba(0xf0f0f0ff).into(),
-                        background: rgba(0xfbfbfbff).into(),
-                        element_background: rgba(0x29a298ff).into(),
-                        element_hover: rgba(0xe8e8ecff).into(),
-                        element_active: rgba(0xe0e1e6ff).into(),
-                        element_selected: rgba(0xe0e1e6ff).into(),
-                        element_disabled: rgba(0x0000320f).into(),
-                        element_placeholder: rgba(0x60646cff).into(),
-                        element_drop_target: rgba(0x008bff0b).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0xe8e8ecff).into(),
-                        ghost_element_active: rgba(0xe0e1e6ff).into(),
-                        ghost_element_selected: rgba(0xe0e1e6ff).into(),
-                        ghost_element_disabled: rgba(0x0000320f).into(),
-                        text: rgba(0x403f53ff).into(),
-                        text_muted: rgba(0x60646cff).into(),
-                        text_placeholder: rgba(0x80838dff).into(),
-                        text_disabled: rgba(0x8b8d98ff).into(),
-                        text_accent: rgba(0x0c73ceff).into(),
-                        icon: rgba(0x60646cff).into(),
-                        icon_muted: rgba(0x80838dff).into(),
-                        icon_disabled: rgba(0x8b8d98ff).into(),
-                        icon_placeholder: rgba(0x80838dff).into(),
-                        icon_accent: rgba(0x0c73ceff).into(),
-                        status_bar_background: rgba(0xf9f9fbff).into(),
-                        title_bar_background: rgba(0xf9f9fbff).into(),
-                        toolbar_background: rgba(0xfcfcfdff).into(),
-                        tab_bar_background: rgba(0xf9f9fbff).into(),
-                        tab_inactive_background: rgba(0xf0f0f0ff).into(),
-                        tab_active_background: rgba(0xf6f6f6ff).into(),
-                        editor_background: rgba(0xfcfcfdff).into(),
-                        editor_gutter_background: rgba(0xfcfcfdff).into(),
-                        editor_subheader_background: rgba(0xf9f9fbff).into(),
-                        editor_active_line_background: rgba(0x0000320f).into(),
-                        editor_highlighted_line_background: rgba(0x00002c17).into(),
-                        editor_line_number: rgba(0x0000320f).into(),
-                        editor_active_line_number: rgba(0x0000320f).into(),
-                        editor_invisible: rgba(0x00002c17).into(),
-                        editor_wrap_guide: rgba(0x00002c17).into(),
-                        editor_active_wrap_guide: rgba(0x00002c17).into(),
-                        editor_document_highlight_read_background: rgba(0x00002c17).into(),
-                        editor_document_highlight_write_background: rgba(0x00002c17).into(),
-                        terminal_background: rgba(0xf6f6f6ff).into(),
-                        terminal_ansi_bright_black: rgba(0x403f53ff).into(),
-                        terminal_ansi_bright_red: rgba(0xde3c3aff).into(),
-                        terminal_ansi_bright_green: rgba(0x07916aff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xdaa900ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x278dd7ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xd64289ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x29a298ff).into(),
-                        terminal_ansi_bright_white: rgba(0xf0f0f0ff).into(),
-                        terminal_ansi_black: rgba(0x403f53ff).into(),
-                        terminal_ansi_red: rgba(0xde3c3aff).into(),
-                        terminal_ansi_green: rgba(0x07916aff).into(),
-                        terminal_ansi_yellow: rgba(0xe0ae01ff).into(),
-                        terminal_ansi_blue: rgba(0x278dd7ff).into(),
-                        terminal_ansi_magenta: rgba(0xd64289ff).into(),
-                        terminal_ansi_cyan: rgba(0x29a298ff).into(),
-                        terminal_ansi_white: rgba(0xf0f0f0ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0xd9d9d9ff).into()),
+                        border_variant: Some(rgba(0xd9d9d9ff).into()),
+                        border_focused: Some(rgba(0xd9d9d9ff).into()),
+                        border_selected: Some(rgba(0xd9d9d9ff).into()),
+                        border_transparent: Some(rgba(0xd9d9d9ff).into()),
+                        border_disabled: Some(rgba(0xd9d9d9ff).into()),
+                        elevated_surface_background: Some(rgba(0xf0f0f0ff).into()),
+                        surface_background: Some(rgba(0xf0f0f0ff).into()),
+                        background: Some(rgba(0xfbfbfbff).into()),
+                        element_background: Some(rgba(0x29a298ff).into()),
+                        text: Some(rgba(0x403f53ff).into()),
+                        tab_inactive_background: Some(rgba(0xf0f0f0ff).into()),
+                        tab_active_background: Some(rgba(0xf6f6f6ff).into()),
+                        terminal_background: Some(rgba(0xf6f6f6ff).into()),
+                        terminal_ansi_bright_black: Some(rgba(0x403f53ff).into()),
+                        terminal_ansi_bright_red: Some(rgba(0xde3c3aff).into()),
+                        terminal_ansi_bright_green: Some(rgba(0x07916aff).into()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xdaa900ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x278dd7ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xd64289ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x29a298ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xf0f0f0ff).into()),
+                        terminal_ansi_black: Some(rgba(0x403f53ff).into()),
+                        terminal_ansi_red: Some(rgba(0xde3c3aff).into()),
+                        terminal_ansi_green: Some(rgba(0x07916aff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xe0ae01ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x278dd7ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xd64289ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x29a298ff).into()),
+                        terminal_ansi_white: Some(rgba(0xf0f0f0ff).into()),
+                        ..Default::default()
                     },
                 },
             },
         ],
-        scales: default_color_scales(),
     }
 }

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

@@ -1,182 +1,51 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn nord() -> ThemeFamily {
-    ThemeFamily {
-        id: "3295b94b-731f-41a8-8d5e-ad02638f8e0d".into(),
+pub fn nord() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Nord".into(),
         author: "Sven Greb (svengreb)".into(),
-        themes: vec![ThemeVariant {
-            id: "dfdfd9f6-bc57-46dd-b919-42b18df35bdd".into(),
+        themes: vec![UserTheme {
             name: "Nord".into(),
             appearance: Appearance::Dark,
-            styles: ThemeStyles {
-                system: SystemColors {
-                    transparent: rgba(0x00000000).into(),
-                    mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                    mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                    mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                },
-                colors: ThemeColors {
-                    border: rgba(0x3b4252ff).into(),
-                    border_variant: rgba(0x3b4252ff).into(),
-                    border_focused: rgba(0x3b4252ff).into(),
-                    border_selected: rgba(0x3b4252ff).into(),
-                    border_transparent: rgba(0x3b4252ff).into(),
-                    border_disabled: rgba(0x3b4252ff).into(),
-                    elevated_surface_background: rgba(0x2e3440ff).into(),
-                    surface_background: rgba(0x2e3440ff).into(),
-                    background: rgba(0x2e3440ff).into(),
-                    element_background: rgba(0x88bfd0ee).into(),
-                    element_hover: rgba(0x272a2dff).into(),
-                    element_active: rgba(0x2e3135ff).into(),
-                    element_selected: rgba(0x2e3135ff).into(),
-                    element_disabled: rgba(0xddeaf814).into(),
-                    element_placeholder: rgba(0xb0b4baff).into(),
-                    element_drop_target: rgba(0x1166fb18).into(),
-                    ghost_element_background: rgba(0x00000000).into(),
-                    ghost_element_hover: rgba(0x272a2dff).into(),
-                    ghost_element_active: rgba(0x2e3135ff).into(),
-                    ghost_element_selected: rgba(0x2e3135ff).into(),
-                    ghost_element_disabled: rgba(0xddeaf814).into(),
-                    text: rgba(0xd8dee9ff).into(),
-                    text_muted: rgba(0xb0b4baff).into(),
-                    text_placeholder: rgba(0x767a83ff).into(),
-                    text_disabled: rgba(0x696e77ff).into(),
-                    text_accent: rgba(0x6fb8ffff).into(),
-                    icon: rgba(0xb0b4baff).into(),
-                    icon_muted: rgba(0x767a83ff).into(),
-                    icon_disabled: rgba(0x696e77ff).into(),
-                    icon_placeholder: rgba(0x767a83ff).into(),
-                    icon_accent: rgba(0x6fb8ffff).into(),
-                    status_bar_background: rgba(0x18191bff).into(),
-                    title_bar_background: rgba(0x18191bff).into(),
-                    toolbar_background: rgba(0x111113ff).into(),
-                    tab_bar_background: rgba(0x18191bff).into(),
-                    tab_inactive_background: rgba(0x2e3440ff).into(),
-                    tab_active_background: rgba(0x3b4252ff).into(),
-                    editor_background: rgba(0x111113ff).into(),
-                    editor_gutter_background: rgba(0x111113ff).into(),
-                    editor_subheader_background: rgba(0x18191bff).into(),
-                    editor_active_line_background: rgba(0xddeaf814).into(),
-                    editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                    editor_line_number: rgba(0xddeaf814).into(),
-                    editor_active_line_number: rgba(0xddeaf814).into(),
-                    editor_invisible: rgba(0xd3edf81d).into(),
-                    editor_wrap_guide: rgba(0xd3edf81d).into(),
-                    editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                    editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                    editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                    terminal_background: rgba(0x2e3440ff).into(),
-                    terminal_ansi_bright_black: rgba(0x4c566aff).into(),
-                    terminal_ansi_bright_red: rgba(0xbf616aff).into(),
-                    terminal_ansi_bright_green: rgba(0xa3be8cff).into(),
-                    terminal_ansi_bright_yellow: rgba(0xebcb8bff).into(),
-                    terminal_ansi_bright_blue: rgba(0x81a1c1ff).into(),
-                    terminal_ansi_bright_magenta: rgba(0xb48eacff).into(),
-                    terminal_ansi_bright_cyan: rgba(0x8fbcbbff).into(),
-                    terminal_ansi_bright_white: rgba(0xeceff4ff).into(),
-                    terminal_ansi_black: rgba(0x3b4252ff).into(),
-                    terminal_ansi_red: rgba(0xbf616aff).into(),
-                    terminal_ansi_green: rgba(0xa3be8cff).into(),
-                    terminal_ansi_yellow: rgba(0xebcb8bff).into(),
-                    terminal_ansi_blue: rgba(0x81a1c1ff).into(),
-                    terminal_ansi_magenta: rgba(0xb48eacff).into(),
-                    terminal_ansi_cyan: rgba(0x88bfd0ff).into(),
-                    terminal_ansi_white: rgba(0xe5e9f0ff).into(),
-                },
-                status: StatusColors {
-                    conflict: rgba(0xff9592ff).into(),
-                    created: rgba(0x70cf82ff).into(),
-                    deleted: rgba(0xff9592ff).into(),
-                    error: rgba(0xff9592ff).into(),
-                    hidden: rgba(0xb0b4baff).into(),
-                    ignored: rgba(0xb0b4baff).into(),
-                    info: rgba(0x6fb8ffff).into(),
-                    modified: rgba(0xf5e147ff).into(),
-                    renamed: rgba(0x6fb8ffff).into(),
-                    success: rgba(0x70cf82ff).into(),
-                    warning: rgba(0xf5e147ff).into(),
-                },
-                git: GitStatusColors {
-                    conflict: rgba(0xffa057ff).into(),
-                    created: rgba(0x70cf82ff).into(),
-                    deleted: rgba(0xff9592ff).into(),
-                    ignored: rgba(0xb0b4baff).into(),
-                    modified: rgba(0xf5e147ff).into(),
-                    renamed: rgba(0x6fb8ffff).into(),
-                },
-                player: PlayerColors(vec![
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                ]),
-                syntax: SyntaxTheme {
-                    highlights: vec![
-                        ("attribute".into(), rgba(0x4ccce6ff).into()),
-                        ("boolean".into(), rgba(0xff977dff).into()),
-                        ("comment".into(), rgba(0xb0b4baff).into()),
-                        ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                        ("constant".into(), rgba(0x8c323aff).into()),
-                        ("constructor".into(), rgba(0x8c323aff).into()),
-                        ("embedded".into(), rgba(0x8c323aff).into()),
-                        ("emphasis".into(), rgba(0x8c323aff).into()),
-                        ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                        ("enum".into(), rgba(0x8c323aff).into()),
-                        ("function".into(), rgba(0x8c323aff).into()),
-                        ("hint".into(), rgba(0x8c323aff).into()),
-                        ("keyword".into(), rgba(0xffa057ff).into()),
-                        ("label".into(), rgba(0x8c323aff).into()),
-                        ("link_text".into(), rgba(0x8c323aff).into()),
-                        ("link_uri".into(), rgba(0x8c323aff).into()),
-                        ("number".into(), rgba(0x8c323aff).into()),
-                        ("operator".into(), rgba(0x8c323aff).into()),
-                        ("predictive".into(), rgba(0x8c323aff).into()),
-                        ("preproc".into(), rgba(0x8c323aff).into()),
-                        ("primary".into(), rgba(0x8c323aff).into()),
-                        ("property".into(), rgba(0x8c323aff).into()),
-                        ("punctuation".into(), rgba(0xb0b4baff).into()),
-                        ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                        ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                        ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                        ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                        ("string".into(), rgba(0x1ed8a3ff).into()),
-                        ("string.escape".into(), rgba(0x8c323aff).into()),
-                        ("string.regex".into(), rgba(0xff977dff).into()),
-                        ("string.special".into(), rgba(0x8c323aff).into()),
-                        ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                        ("tag".into(), rgba(0x8c323aff).into()),
-                        ("text.literal".into(), rgba(0x8c323aff).into()),
-                        ("title".into(), rgba(0x8c323aff).into()),
-                        ("type".into(), rgba(0x8c323aff).into()),
-                        ("variable".into(), rgba(0x8c323aff).into()),
-                        ("variable.special".into(), rgba(0x8c323aff).into()),
-                        ("variant".into(), rgba(0x8c323aff).into()),
-                    ],
+            styles: UserThemeStylesRefinement {
+                colors: ThemeColorsRefinement {
+                    border: Some(rgba(0x3b4252ff).into()),
+                    border_variant: Some(rgba(0x3b4252ff).into()),
+                    border_focused: Some(rgba(0x3b4252ff).into()),
+                    border_selected: Some(rgba(0x3b4252ff).into()),
+                    border_transparent: Some(rgba(0x3b4252ff).into()),
+                    border_disabled: Some(rgba(0x3b4252ff).into()),
+                    elevated_surface_background: Some(rgba(0x2e3440ff).into()),
+                    surface_background: Some(rgba(0x2e3440ff).into()),
+                    background: Some(rgba(0x2e3440ff).into()),
+                    element_background: Some(rgba(0x88bfd0ee).into()),
+                    text: Some(rgba(0xd8dee9ff).into()),
+                    tab_inactive_background: Some(rgba(0x2e3440ff).into()),
+                    tab_active_background: Some(rgba(0x3b4252ff).into()),
+                    terminal_background: Some(rgba(0x2e3440ff).into()),
+                    terminal_ansi_bright_black: Some(rgba(0x4c566aff).into()),
+                    terminal_ansi_bright_red: Some(rgba(0xbf616aff).into()),
+                    terminal_ansi_bright_green: Some(rgba(0xa3be8cff).into()),
+                    terminal_ansi_bright_yellow: Some(rgba(0xebcb8bff).into()),
+                    terminal_ansi_bright_blue: Some(rgba(0x81a1c1ff).into()),
+                    terminal_ansi_bright_magenta: Some(rgba(0xb48eacff).into()),
+                    terminal_ansi_bright_cyan: Some(rgba(0x8fbcbbff).into()),
+                    terminal_ansi_bright_white: Some(rgba(0xeceff4ff).into()),
+                    terminal_ansi_black: Some(rgba(0x3b4252ff).into()),
+                    terminal_ansi_red: Some(rgba(0xbf616aff).into()),
+                    terminal_ansi_green: Some(rgba(0xa3be8cff).into()),
+                    terminal_ansi_yellow: Some(rgba(0xebcb8bff).into()),
+                    terminal_ansi_blue: Some(rgba(0x81a1c1ff).into()),
+                    terminal_ansi_magenta: Some(rgba(0xb48eacff).into()),
+                    terminal_ansi_cyan: Some(rgba(0x88bfd0ff).into()),
+                    terminal_ansi_white: Some(rgba(0xe5e9f0ff).into()),
+                    ..Default::default()
                 },
             },
         }],
-        scales: default_color_scales(),
     }
 }

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

@@ -1,1854 +1,443 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn notctis() -> ThemeFamily {
-    ThemeFamily {
-        id: "7fbf6904-517c-42e1-8eb3-a64b1e9218b9".into(),
+pub fn notctis() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Notctis".into(),
         author: "Liviu Schera (liviuschera)".into(),
         themes: vec![
-            ThemeVariant {
-                id: "2dc5fee8-30ff-4a50-bfae-c13bd19c9f89".into(),
+            UserTheme {
                 name: "Noctis Azureus".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x1579b6ff).into(),
-                        border_variant: rgba(0x1579b6ff).into(),
-                        border_focused: rgba(0x1579b6ff).into(),
-                        border_selected: rgba(0x1579b6ff).into(),
-                        border_transparent: rgba(0x1579b6ff).into(),
-                        border_disabled: rgba(0x1579b6ff).into(),
-                        elevated_surface_background: rgba(0x051b28ff).into(),
-                        surface_background: rgba(0x051b28ff).into(),
-                        background: rgba(0x07263aff).into(),
-                        element_background: rgba(0x007e99ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xbecfdaff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x08324eff).into(),
-                        tab_active_background: rgba(0x07263aff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x051b28ff).into(),
-                        terminal_ansi_bright_black: rgba(0x475e6cff).into(),
-                        terminal_ansi_bright_red: rgba(0xe97749ff).into(),
-                        terminal_ansi_bright_green: rgba(0x5febb1ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xe69532ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x5fb5ebff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xe697b2ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x5fdaebff).into(),
-                        terminal_ansi_bright_white: rgba(0xbecfdaff).into(),
-                        terminal_ansi_black: rgba(0x28343dff).into(),
-                        terminal_ansi_red: rgba(0xe66432ff).into(),
-                        terminal_ansi_green: rgba(0x49e9a6ff).into(),
-                        terminal_ansi_yellow: rgba(0xe4b781ff).into(),
-                        terminal_ansi_blue: rgba(0x49ace9ff).into(),
-                        terminal_ansi_magenta: rgba(0xdf759aff).into(),
-                        terminal_ansi_cyan: rgba(0x49d5e9ff).into(),
-                        terminal_ansi_white: rgba(0xaec3d0ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "ba4f5a34-987a-4e2c-939c-7f1b02d0e432".into(),
+            UserTheme {
                 name: "Noctis Bordo".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x997582ff).into(),
-                        border_variant: rgba(0x997582ff).into(),
-                        border_focused: rgba(0x997582ff).into(),
-                        border_selected: rgba(0x997582ff).into(),
-                        border_transparent: rgba(0x997582ff).into(),
-                        border_disabled: rgba(0x997582ff).into(),
-                        elevated_surface_background: rgba(0x272022ff).into(),
-                        surface_background: rgba(0x272022ff).into(),
-                        background: rgba(0x322a2dff).into(),
-                        element_background: rgba(0x007e99ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xcbbec2ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x413036ff).into(),
-                        tab_active_background: rgba(0x322a2dff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x272022ff).into(),
-                        terminal_ansi_bright_black: rgba(0x69545bff).into(),
-                        terminal_ansi_bright_red: rgba(0xe97749ff).into(),
-                        terminal_ansi_bright_green: rgba(0x5febb1ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xe69532ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x5fb5ebff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xe697b2ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x5fdaebff).into(),
-                        terminal_ansi_bright_white: rgba(0xcbbec2ff).into(),
-                        terminal_ansi_black: rgba(0x47393eff).into(),
-                        terminal_ansi_red: rgba(0xe66432ff).into(),
-                        terminal_ansi_green: rgba(0x49e9a6ff).into(),
-                        terminal_ansi_yellow: rgba(0xe4b781ff).into(),
-                        terminal_ansi_blue: rgba(0x49ace9ff).into(),
-                        terminal_ansi_magenta: rgba(0xdf759aff).into(),
-                        terminal_ansi_cyan: rgba(0x49d5e9ff).into(),
-                        terminal_ansi_white: rgba(0xb9acb0ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "a2e4f327-82e8-41c1-a66f-bc7f27419c2e".into(),
+            UserTheme {
                 name: "Noctus Hibernus".into(),
                 appearance: Appearance::Light,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x00c6e0ff).into(),
-                        border_variant: rgba(0x00c6e0ff).into(),
-                        border_focused: rgba(0x00c6e0ff).into(),
-                        border_selected: rgba(0x00c6e0ff).into(),
-                        border_transparent: rgba(0x00c6e0ff).into(),
-                        border_disabled: rgba(0x00c6e0ff).into(),
-                        elevated_surface_background: rgba(0xe1eeefff).into(),
-                        surface_background: rgba(0xe1eeefff).into(),
-                        background: rgba(0xf4f6f6ff).into(),
-                        element_background: rgba(0x089099ff).into(),
-                        element_hover: rgba(0xe8e8ecff).into(),
-                        element_active: rgba(0xe0e1e6ff).into(),
-                        element_selected: rgba(0xe0e1e6ff).into(),
-                        element_disabled: rgba(0x0000320f).into(),
-                        element_placeholder: rgba(0x60646cff).into(),
-                        element_drop_target: rgba(0x008bff0b).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0xe8e8ecff).into(),
-                        ghost_element_active: rgba(0xe0e1e6ff).into(),
-                        ghost_element_selected: rgba(0xe0e1e6ff).into(),
-                        ghost_element_disabled: rgba(0x0000320f).into(),
-                        text: rgba(0x005661ff).into(),
-                        text_muted: rgba(0x60646cff).into(),
-                        text_placeholder: rgba(0x80838dff).into(),
-                        text_disabled: rgba(0x8b8d98ff).into(),
-                        text_accent: rgba(0x0c73ceff).into(),
-                        icon: rgba(0x60646cff).into(),
-                        icon_muted: rgba(0x80838dff).into(),
-                        icon_disabled: rgba(0x8b8d98ff).into(),
-                        icon_placeholder: rgba(0x80838dff).into(),
-                        icon_accent: rgba(0x0c73ceff).into(),
-                        status_bar_background: rgba(0xf9f9fbff).into(),
-                        title_bar_background: rgba(0xf9f9fbff).into(),
-                        toolbar_background: rgba(0xfcfcfdff).into(),
-                        tab_bar_background: rgba(0xf9f9fbff).into(),
-                        tab_inactive_background: rgba(0xcaedf2ff).into(),
-                        tab_active_background: rgba(0xf4f6f6ff).into(),
-                        editor_background: rgba(0xfcfcfdff).into(),
-                        editor_gutter_background: rgba(0xfcfcfdff).into(),
-                        editor_subheader_background: rgba(0xf9f9fbff).into(),
-                        editor_active_line_background: rgba(0x0000320f).into(),
-                        editor_highlighted_line_background: rgba(0x00002c17).into(),
-                        editor_line_number: rgba(0x0000320f).into(),
-                        editor_active_line_number: rgba(0x0000320f).into(),
-                        editor_invisible: rgba(0x00002c17).into(),
-                        editor_wrap_guide: rgba(0x00002c17).into(),
-                        editor_active_wrap_guide: rgba(0x00002c17).into(),
-                        editor_document_highlight_read_background: rgba(0x00002c17).into(),
-                        editor_document_highlight_write_background: rgba(0x00002c17).into(),
-                        terminal_background: rgba(0xe1eeefff).into(),
-                        terminal_ansi_bright_black: rgba(0x004d57ff).into(),
-                        terminal_ansi_bright_red: rgba(0xff3f00ff).into(),
-                        terminal_ansi_bright_green: rgba(0x00d17aff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xff8c00ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x0ea3ffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xff6b9eff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x00cae6ff).into(),
-                        terminal_ansi_bright_white: rgba(0xbbc3c4ff).into(),
-                        terminal_ansi_black: rgba(0x003b41ff).into(),
-                        terminal_ansi_red: rgba(0xe34d1bff).into(),
-                        terminal_ansi_green: rgba(0x00b368ff).into(),
-                        terminal_ansi_yellow: rgba(0xf49724ff).into(),
-                        terminal_ansi_blue: rgba(0x0094f0ff).into(),
-                        terminal_ansi_magenta: rgba(0xff5792ff).into(),
-                        terminal_ansi_cyan: rgba(0x00bdd6ff).into(),
-                        terminal_ansi_white: rgba(0x8ca6a6ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "2fde44fb-e5b2-4cc2-962f-f1c77a4eb12a".into(),
+            UserTheme {
                 name: "Noctis Lilac".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0xaea4f4ff).into(),
-                        border_variant: rgba(0xaea4f4ff).into(),
-                        border_focused: rgba(0xaea4f4ff).into(),
-                        border_selected: rgba(0xaea4f4ff).into(),
-                        border_transparent: rgba(0xaea4f4ff).into(),
-                        border_disabled: rgba(0xaea4f4ff).into(),
-                        elevated_surface_background: rgba(0xe9e7f3ff).into(),
-                        surface_background: rgba(0xe9e7f3ff).into(),
-                        background: rgba(0xf2f1f8ff).into(),
-                        element_background: rgba(0x8d7ffeff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0x0c006bff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0xe2dff6ff).into(),
-                        tab_active_background: rgba(0xf2f1f8ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0xe9e7f3ff).into(),
-                        terminal_ansi_bright_black: rgba(0x0f0080ff).into(),
-                        terminal_ansi_bright_red: rgba(0xff3f00ff).into(),
-                        terminal_ansi_bright_green: rgba(0x00d17aff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xff8c00ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x0ea3ffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xff6b9eff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x00cae6ff).into(),
-                        terminal_ansi_bright_white: rgba(0xbbc3c4ff).into(),
-                        terminal_ansi_black: rgba(0x0c006bff).into(),
-                        terminal_ansi_red: rgba(0xe34d1bff).into(),
-                        terminal_ansi_green: rgba(0x00b368ff).into(),
-                        terminal_ansi_yellow: rgba(0xf49724ff).into(),
-                        terminal_ansi_blue: rgba(0x0094f0ff).into(),
-                        terminal_ansi_magenta: rgba(0xff5792ff).into(),
-                        terminal_ansi_cyan: rgba(0x00bdd6ff).into(),
-                        terminal_ansi_white: rgba(0x8ca6a6ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "2b89f218-c238-4905-9578-674d6995d2e0".into(),
+            UserTheme {
                 name: "Noctis Lux".into(),
                 appearance: Appearance::Light,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x00c6e0ff).into(),
-                        border_variant: rgba(0x00c6e0ff).into(),
-                        border_focused: rgba(0x00c6e0ff).into(),
-                        border_selected: rgba(0x00c6e0ff).into(),
-                        border_transparent: rgba(0x00c6e0ff).into(),
-                        border_disabled: rgba(0x00c6e0ff).into(),
-                        elevated_surface_background: rgba(0xf6eddaff).into(),
-                        surface_background: rgba(0xf6eddaff).into(),
-                        background: rgba(0xfef8ecff).into(),
-                        element_background: rgba(0x089099ff).into(),
-                        element_hover: rgba(0xe8e8ecff).into(),
-                        element_active: rgba(0xe0e1e6ff).into(),
-                        element_selected: rgba(0xe0e1e6ff).into(),
-                        element_disabled: rgba(0x0000320f).into(),
-                        element_placeholder: rgba(0x60646cff).into(),
-                        element_drop_target: rgba(0x008bff0b).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0xe8e8ecff).into(),
-                        ghost_element_active: rgba(0xe0e1e6ff).into(),
-                        ghost_element_selected: rgba(0xe0e1e6ff).into(),
-                        ghost_element_disabled: rgba(0x0000320f).into(),
-                        text: rgba(0x005661ff).into(),
-                        text_muted: rgba(0x60646cff).into(),
-                        text_placeholder: rgba(0x80838dff).into(),
-                        text_disabled: rgba(0x8b8d98ff).into(),
-                        text_accent: rgba(0x0c73ceff).into(),
-                        icon: rgba(0x60646cff).into(),
-                        icon_muted: rgba(0x80838dff).into(),
-                        icon_disabled: rgba(0x8b8d98ff).into(),
-                        icon_placeholder: rgba(0x80838dff).into(),
-                        icon_accent: rgba(0x0c73ceff).into(),
-                        status_bar_background: rgba(0xf9f9fbff).into(),
-                        title_bar_background: rgba(0xf9f9fbff).into(),
-                        toolbar_background: rgba(0xfcfcfdff).into(),
-                        tab_bar_background: rgba(0xf9f9fbff).into(),
-                        tab_inactive_background: rgba(0xf0e9d6ff).into(),
-                        tab_active_background: rgba(0xfef8ecff).into(),
-                        editor_background: rgba(0xfcfcfdff).into(),
-                        editor_gutter_background: rgba(0xfcfcfdff).into(),
-                        editor_subheader_background: rgba(0xf9f9fbff).into(),
-                        editor_active_line_background: rgba(0x0000320f).into(),
-                        editor_highlighted_line_background: rgba(0x00002c17).into(),
-                        editor_line_number: rgba(0x0000320f).into(),
-                        editor_active_line_number: rgba(0x0000320f).into(),
-                        editor_invisible: rgba(0x00002c17).into(),
-                        editor_wrap_guide: rgba(0x00002c17).into(),
-                        editor_active_wrap_guide: rgba(0x00002c17).into(),
-                        editor_document_highlight_read_background: rgba(0x00002c17).into(),
-                        editor_document_highlight_write_background: rgba(0x00002c17).into(),
-                        terminal_background: rgba(0xf6eddaff).into(),
-                        terminal_ansi_bright_black: rgba(0x004d57ff).into(),
-                        terminal_ansi_bright_red: rgba(0xff3f00ff).into(),
-                        terminal_ansi_bright_green: rgba(0x00d17aff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xff8c00ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x0ea3ffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xff6b9eff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x00cae6ff).into(),
-                        terminal_ansi_bright_white: rgba(0xbbc3c4ff).into(),
-                        terminal_ansi_black: rgba(0x003b41ff).into(),
-                        terminal_ansi_red: rgba(0xe34d1bff).into(),
-                        terminal_ansi_green: rgba(0x00b368ff).into(),
-                        terminal_ansi_yellow: rgba(0xf49724ff).into(),
-                        terminal_ansi_blue: rgba(0x0094f0ff).into(),
-                        terminal_ansi_magenta: rgba(0xff5792ff).into(),
-                        terminal_ansi_cyan: rgba(0x00bdd6ff).into(),
-                        terminal_ansi_white: rgba(0x8ca6a6ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "f88e2cd7-2415-4118-a638-5cfd3132ecf8".into(),
+            UserTheme {
                 name: "Noctis Minimus".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x496c83ff).into(),
-                        border_variant: rgba(0x496c83ff).into(),
-                        border_focused: rgba(0x496c83ff).into(),
-                        border_selected: rgba(0x496c83ff).into(),
-                        border_transparent: rgba(0x496c83ff).into(),
-                        border_disabled: rgba(0x496c83ff).into(),
-                        elevated_surface_background: rgba(0x0e1920ff).into(),
-                        surface_background: rgba(0x0e1920ff).into(),
-                        background: rgba(0x1b2932ff).into(),
-                        element_background: rgba(0x2e616bff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xc5cdd3ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x202d37ff).into(),
-                        tab_active_background: rgba(0x1b2932ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x0e1920ff).into(),
-                        terminal_ansi_bright_black: rgba(0x425866ff).into(),
-                        terminal_ansi_bright_red: rgba(0xca8468ff).into(),
-                        terminal_ansi_bright_green: rgba(0x84c8abff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xd1aa7bff).into(),
-                        terminal_ansi_bright_blue: rgba(0x68a4caff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xc88da2ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x84bfc8ff).into(),
-                        terminal_ansi_bright_white: rgba(0xc5d1d3ff).into(),
-                        terminal_ansi_black: rgba(0x182935ff).into(),
-                        terminal_ansi_red: rgba(0xc08872ff).into(),
-                        terminal_ansi_green: rgba(0x72c09fff).into(),
-                        terminal_ansi_yellow: rgba(0xc8a984ff).into(),
-                        terminal_ansi_blue: rgba(0x6095b7ff).into(),
-                        terminal_ansi_magenta: rgba(0xc28097ff).into(),
-                        terminal_ansi_cyan: rgba(0x72b7c0ff).into(),
-                        terminal_ansi_white: rgba(0xc5cdd3ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "c4d43fc2-6166-47b7-8c5c-dd24afd4b735".into(),
+            UserTheme {
                 name: "Noctis".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x0d6571ff).into(),
-                        border_variant: rgba(0x0d6571ff).into(),
-                        border_focused: rgba(0x0d6571ff).into(),
-                        border_selected: rgba(0x0d6571ff).into(),
-                        border_transparent: rgba(0x0d6571ff).into(),
-                        border_disabled: rgba(0x0d6571ff).into(),
-                        elevated_surface_background: rgba(0x03181aff).into(),
-                        surface_background: rgba(0x03181aff).into(),
-                        background: rgba(0x052428ff).into(),
-                        element_background: rgba(0x089099ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xb1c9ccff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x052e32ff).into(),
-                        tab_active_background: rgba(0x052428ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x03181aff).into(),
-                        terminal_ansi_bright_black: rgba(0x47686cff).into(),
-                        terminal_ansi_bright_red: rgba(0xe97749ff).into(),
-                        terminal_ansi_bright_green: rgba(0x5febb1ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xe69532ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x5fb5ebff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xe697b2ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x5fdaebff).into(),
-                        terminal_ansi_bright_white: rgba(0xc1d4d7ff).into(),
-                        terminal_ansi_black: rgba(0x324a4dff).into(),
-                        terminal_ansi_red: rgba(0xe66432ff).into(),
-                        terminal_ansi_green: rgba(0x49e9a6ff).into(),
-                        terminal_ansi_yellow: rgba(0xe4b781ff).into(),
-                        terminal_ansi_blue: rgba(0x49ace9ff).into(),
-                        terminal_ansi_magenta: rgba(0xdf759aff).into(),
-                        terminal_ansi_cyan: rgba(0x49d5e9ff).into(),
-                        terminal_ansi_white: rgba(0xb1c9ccff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "7253a515-c612-403c-89de-5b62dc5cbac7".into(),
+            UserTheme {
                 name: "Noctis Obscuro".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x0d6571ff).into(),
-                        border_variant: rgba(0x0d6571ff).into(),
-                        border_focused: rgba(0x0d6571ff).into(),
-                        border_selected: rgba(0x0d6571ff).into(),
-                        border_transparent: rgba(0x0d6571ff).into(),
-                        border_disabled: rgba(0x0d6571ff).into(),
-                        elevated_surface_background: rgba(0x020c0eff).into(),
-                        surface_background: rgba(0x020c0eff).into(),
-                        background: rgba(0x031316ff).into(),
-                        element_background: rgba(0x089099ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xb1c9ccff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x052e32ff).into(),
-                        tab_active_background: rgba(0x031316ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x020c0eff).into(),
-                        terminal_ansi_bright_black: rgba(0x47686cff).into(),
-                        terminal_ansi_bright_red: rgba(0xe97749ff).into(),
-                        terminal_ansi_bright_green: rgba(0x5febb1ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xe69532ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x5fb5ebff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xe697b2ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x5fdaebff).into(),
-                        terminal_ansi_bright_white: rgba(0xc1d4d7ff).into(),
-                        terminal_ansi_black: rgba(0x324a4dff).into(),
-                        terminal_ansi_red: rgba(0xe66432ff).into(),
-                        terminal_ansi_green: rgba(0x49e9a6ff).into(),
-                        terminal_ansi_yellow: rgba(0xe4b781ff).into(),
-                        terminal_ansi_blue: rgba(0x49ace9ff).into(),
-                        terminal_ansi_magenta: rgba(0xdf759aff).into(),
-                        terminal_ansi_cyan: rgba(0x49d5e9ff).into(),
-                        terminal_ansi_white: rgba(0xb1c9ccff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "b0f2d7b8-ac5f-466f-9bbf-e7cac242149c".into(),
+            UserTheme {
                 name: "Noctis Sereno".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x0d6571ff).into(),
-                        border_variant: rgba(0x0d6571ff).into(),
-                        border_focused: rgba(0x0d6571ff).into(),
-                        border_selected: rgba(0x0d6571ff).into(),
-                        border_transparent: rgba(0x0d6571ff).into(),
-                        border_disabled: rgba(0x0d6571ff).into(),
-                        elevated_surface_background: rgba(0x020c0eff).into(),
-                        surface_background: rgba(0x020c0eff).into(),
-                        background: rgba(0x031316ff).into(),
-                        element_background: rgba(0x089099ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xb1c9ccff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x052e32ff).into(),
-                        tab_active_background: rgba(0x031316ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x020c0eff).into(),
-                        terminal_ansi_bright_black: rgba(0x47686cff).into(),
-                        terminal_ansi_bright_red: rgba(0xe97749ff).into(),
-                        terminal_ansi_bright_green: rgba(0x5febb1ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xe69532ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x5fb5ebff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xe697b2ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x5fdaebff).into(),
-                        terminal_ansi_bright_white: rgba(0xc1d4d7ff).into(),
-                        terminal_ansi_black: rgba(0x324a4dff).into(),
-                        terminal_ansi_red: rgba(0xe66432ff).into(),
-                        terminal_ansi_green: rgba(0x49e9a6ff).into(),
-                        terminal_ansi_yellow: rgba(0xe4b781ff).into(),
-                        terminal_ansi_blue: rgba(0x49ace9ff).into(),
-                        terminal_ansi_magenta: rgba(0xdf759aff).into(),
-                        terminal_ansi_cyan: rgba(0x49d5e9ff).into(),
-                        terminal_ansi_white: rgba(0xb1c9ccff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "331ce3fd-8faf-4a46-ad89-2c678abc4cd3".into(),
+            UserTheme {
                 name: "Noctis Uva".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x6d66a7ff).into(),
-                        border_variant: rgba(0x6d66a7ff).into(),
-                        border_focused: rgba(0x6d66a7ff).into(),
-                        border_selected: rgba(0x6d66a7ff).into(),
-                        border_transparent: rgba(0x6d66a7ff).into(),
-                        border_disabled: rgba(0x6d66a7ff).into(),
-                        elevated_surface_background: rgba(0x1f1d30ff).into(),
-                        surface_background: rgba(0x1f1d30ff).into(),
-                        background: rgba(0x292640ff).into(),
-                        element_background: rgba(0x007e99ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xc5c2d6ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x2f2c49ff).into(),
-                        tab_active_background: rgba(0x292640ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x1f1d30ff).into(),
-                        terminal_ansi_bright_black: rgba(0x504e65ff).into(),
-                        terminal_ansi_bright_red: rgba(0xe97749ff).into(),
-                        terminal_ansi_bright_green: rgba(0x5febb1ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xe69532ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x5fb5ebff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xe697b2ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x5fdaebff).into(),
-                        terminal_ansi_bright_white: rgba(0xc5c2d6ff).into(),
-                        terminal_ansi_black: rgba(0x302f3dff).into(),
-                        terminal_ansi_red: rgba(0xe66432ff).into(),
-                        terminal_ansi_green: rgba(0x49e9a6ff).into(),
-                        terminal_ansi_yellow: rgba(0xe4b781ff).into(),
-                        terminal_ansi_blue: rgba(0x49ace9ff).into(),
-                        terminal_ansi_magenta: rgba(0xdf759aff).into(),
-                        terminal_ansi_cyan: rgba(0x49d5e9ff).into(),
-                        terminal_ansi_white: rgba(0xb6b3ccff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
-            ThemeVariant {
-                id: "209964f1-6a61-4e40-a605-be245555c493".into(),
+            UserTheme {
                 name: "Noctis Viola".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x8666a7ff).into(),
-                        border_variant: rgba(0x8666a7ff).into(),
-                        border_focused: rgba(0x8666a7ff).into(),
-                        border_selected: rgba(0x8666a7ff).into(),
-                        border_transparent: rgba(0x8666a7ff).into(),
-                        border_disabled: rgba(0x8666a7ff).into(),
-                        elevated_surface_background: rgba(0x291d35ff).into(),
-                        surface_background: rgba(0x291d35ff).into(),
-                        background: rgba(0x30243dff).into(),
-                        element_background: rgba(0x007e99ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xccbfd9ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x3d2e4dff).into(),
-                        tab_active_background: rgba(0x30243dff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x291d35ff).into(),
-                        terminal_ansi_bright_black: rgba(0x594e65ff).into(),
-                        terminal_ansi_bright_red: rgba(0xe97749ff).into(),
-                        terminal_ansi_bright_green: rgba(0x5febb1ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xe69532ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x5fb5ebff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xe697b2ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x5fdaebff).into(),
-                        terminal_ansi_bright_white: rgba(0xccbfd9ff).into(),
-                        terminal_ansi_black: rgba(0x362f3dff).into(),
-                        terminal_ansi_red: rgba(0xe66432ff).into(),
-                        terminal_ansi_green: rgba(0x49e9a6ff).into(),
-                        terminal_ansi_yellow: rgba(0xe4b781ff).into(),
-                        terminal_ansi_blue: rgba(0x49ace9ff).into(),
-                        terminal_ansi_magenta: rgba(0xdf759aff).into(),
-                        terminal_ansi_cyan: rgba(0x49d5e9ff).into(),
-                        terminal_ansi_white: rgba(0xbfafcfff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                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()
                     },
                 },
             },
         ],
-        scales: default_color_scales(),
     }
 }

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

@@ -1,518 +1,128 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn palenight() -> ThemeFamily {
-    ThemeFamily {
-        id: "16313d66-dab6-468a-82f6-e69759fdd8cf".into(),
+pub fn palenight() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Palenight".into(),
         author: "Olaolu Olawuyi (whizkydee)".into(),
         themes: vec![
-            ThemeVariant {
-                id: "39fdf216-2c76-4b3d-b368-7c31f479d524".into(),
+            UserTheme {
                 name: "Palenight".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x282b3bff).into(),
-                        border_variant: rgba(0x282b3bff).into(),
-                        border_focused: rgba(0x282b3bff).into(),
-                        border_selected: rgba(0x282b3bff).into(),
-                        border_transparent: rgba(0x282b3bff).into(),
-                        border_disabled: rgba(0x282b3bff).into(),
-                        elevated_surface_background: rgba(0x292c3eff).into(),
-                        surface_background: rgba(0x292c3eff).into(),
-                        background: rgba(0x292c3eff).into(),
-                        element_background: rgba(0x7d56c1cc).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xffffffff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x31364aff).into(),
-                        tab_active_background: rgba(0x292c3eff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x111113ff).into(),
-                        terminal_ansi_bright_black: rgba(0x676e95ff).into(),
-                        terminal_ansi_bright_red: rgba(0xff5571ff).into(),
-                        terminal_ansi_bright_green: rgba(0xc3e88dff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xffcb6bff).into(),
-                        terminal_ansi_bright_blue: rgba(0x82aaffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xc792eaff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x89ddffff).into(),
-                        terminal_ansi_bright_white: rgba(0xffffffff).into(),
-                        terminal_ansi_black: rgba(0x676e95ff).into(),
-                        terminal_ansi_red: rgba(0xff5571ff).into(),
-                        terminal_ansi_green: rgba(0xa9c77dff).into(),
-                        terminal_ansi_yellow: rgba(0xffcb6bff).into(),
-                        terminal_ansi_blue: rgba(0x82aaffff).into(),
-                        terminal_ansi_magenta: rgba(0xc792eaff).into(),
-                        terminal_ansi_cyan: rgba(0x89ddffff).into(),
-                        terminal_ansi_white: rgba(0xffffffff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x282b3bff).into()),
+                        border_variant: Some(rgba(0x282b3bff).into()),
+                        border_focused: Some(rgba(0x282b3bff).into()),
+                        border_selected: Some(rgba(0x282b3bff).into()),
+                        border_transparent: Some(rgba(0x282b3bff).into()),
+                        border_disabled: Some(rgba(0x282b3bff).into()),
+                        elevated_surface_background: Some(rgba(0x292c3eff).into()),
+                        surface_background: Some(rgba(0x292c3eff).into()),
+                        background: Some(rgba(0x292c3eff).into()),
+                        element_background: Some(rgba(0x7d56c1cc).into()),
+                        text: Some(rgba(0xffffffff).into()),
+                        tab_inactive_background: Some(rgba(0x31364aff).into()),
+                        tab_active_background: Some(rgba(0x292c3eff).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()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xffcb6bff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x82aaffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xc792eaff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x89ddffff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xffffffff).into()),
+                        terminal_ansi_black: Some(rgba(0x676e95ff).into()),
+                        terminal_ansi_red: Some(rgba(0xff5571ff).into()),
+                        terminal_ansi_green: Some(rgba(0xa9c77dff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xffcb6bff).into()),
+                        terminal_ansi_blue: Some(rgba(0x82aaffff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xc792eaff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x89ddffff).into()),
+                        terminal_ansi_white: Some(rgba(0xffffffff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "5ff8120f-37e9-4ad3-8bd0-c3e449ff1aa1".into(),
+            UserTheme {
                 name: "Palenight Operator".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x282b3bff).into(),
-                        border_variant: rgba(0x282b3bff).into(),
-                        border_focused: rgba(0x282b3bff).into(),
-                        border_selected: rgba(0x282b3bff).into(),
-                        border_transparent: rgba(0x282b3bff).into(),
-                        border_disabled: rgba(0x282b3bff).into(),
-                        elevated_surface_background: rgba(0x292c3eff).into(),
-                        surface_background: rgba(0x292c3eff).into(),
-                        background: rgba(0x292c3eff).into(),
-                        element_background: rgba(0x7d56c1cc).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xffffffff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x31364aff).into(),
-                        tab_active_background: rgba(0x292c3eff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x111113ff).into(),
-                        terminal_ansi_bright_black: rgba(0x676e95ff).into(),
-                        terminal_ansi_bright_red: rgba(0xff5571ff).into(),
-                        terminal_ansi_bright_green: rgba(0xc3e88dff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xffcb6bff).into(),
-                        terminal_ansi_bright_blue: rgba(0x82aaffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xc792eaff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x89ddffff).into(),
-                        terminal_ansi_bright_white: rgba(0xffffffff).into(),
-                        terminal_ansi_black: rgba(0x676e95ff).into(),
-                        terminal_ansi_red: rgba(0xff5571ff).into(),
-                        terminal_ansi_green: rgba(0xa9c77dff).into(),
-                        terminal_ansi_yellow: rgba(0xffcb6bff).into(),
-                        terminal_ansi_blue: rgba(0x82aaffff).into(),
-                        terminal_ansi_magenta: rgba(0xc792eaff).into(),
-                        terminal_ansi_cyan: rgba(0x89ddffff).into(),
-                        terminal_ansi_white: rgba(0xffffffff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x282b3bff).into()),
+                        border_variant: Some(rgba(0x282b3bff).into()),
+                        border_focused: Some(rgba(0x282b3bff).into()),
+                        border_selected: Some(rgba(0x282b3bff).into()),
+                        border_transparent: Some(rgba(0x282b3bff).into()),
+                        border_disabled: Some(rgba(0x282b3bff).into()),
+                        elevated_surface_background: Some(rgba(0x292c3eff).into()),
+                        surface_background: Some(rgba(0x292c3eff).into()),
+                        background: Some(rgba(0x292c3eff).into()),
+                        element_background: Some(rgba(0x7d56c1cc).into()),
+                        text: Some(rgba(0xffffffff).into()),
+                        tab_inactive_background: Some(rgba(0x31364aff).into()),
+                        tab_active_background: Some(rgba(0x292c3eff).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()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xffcb6bff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x82aaffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xc792eaff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x89ddffff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xffffffff).into()),
+                        terminal_ansi_black: Some(rgba(0x676e95ff).into()),
+                        terminal_ansi_red: Some(rgba(0xff5571ff).into()),
+                        terminal_ansi_green: Some(rgba(0xa9c77dff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xffcb6bff).into()),
+                        terminal_ansi_blue: Some(rgba(0x82aaffff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xc792eaff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x89ddffff).into()),
+                        terminal_ansi_white: Some(rgba(0xffffffff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "cff26efb-72f8-4496-b33b-991080a47f1c".into(),
+            UserTheme {
                 name: "Palenight (Mild Contrast)".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x2c2f40ff).into(),
-                        border_variant: rgba(0x2c2f40ff).into(),
-                        border_focused: rgba(0x2c2f40ff).into(),
-                        border_selected: rgba(0x2c2f40ff).into(),
-                        border_transparent: rgba(0x2c2f40ff).into(),
-                        border_disabled: rgba(0x2c2f40ff).into(),
-                        elevated_surface_background: rgba(0x25283aff).into(),
-                        surface_background: rgba(0x25283aff).into(),
-                        background: rgba(0x292c3eff).into(),
-                        element_background: rgba(0x7d56c1cc).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xffffffff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x31364aff).into(),
-                        tab_active_background: rgba(0x25283aff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x111113ff).into(),
-                        terminal_ansi_bright_black: rgba(0x676e95ff).into(),
-                        terminal_ansi_bright_red: rgba(0xff5571ff).into(),
-                        terminal_ansi_bright_green: rgba(0xc3e88dff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xffcb6bff).into(),
-                        terminal_ansi_bright_blue: rgba(0x82aaffff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xc792eaff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x89ddffff).into(),
-                        terminal_ansi_bright_white: rgba(0xffffffff).into(),
-                        terminal_ansi_black: rgba(0x676e95ff).into(),
-                        terminal_ansi_red: rgba(0xff5571ff).into(),
-                        terminal_ansi_green: rgba(0xa9c77dff).into(),
-                        terminal_ansi_yellow: rgba(0xffcb6bff).into(),
-                        terminal_ansi_blue: rgba(0x82aaffff).into(),
-                        terminal_ansi_magenta: rgba(0xc792eaff).into(),
-                        terminal_ansi_cyan: rgba(0x89ddffff).into(),
-                        terminal_ansi_white: rgba(0xffffffff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x2c2f40ff).into()),
+                        border_variant: Some(rgba(0x2c2f40ff).into()),
+                        border_focused: Some(rgba(0x2c2f40ff).into()),
+                        border_selected: Some(rgba(0x2c2f40ff).into()),
+                        border_transparent: Some(rgba(0x2c2f40ff).into()),
+                        border_disabled: Some(rgba(0x2c2f40ff).into()),
+                        elevated_surface_background: Some(rgba(0x25283aff).into()),
+                        surface_background: Some(rgba(0x25283aff).into()),
+                        background: Some(rgba(0x292c3eff).into()),
+                        element_background: Some(rgba(0x7d56c1cc).into()),
+                        text: Some(rgba(0xffffffff).into()),
+                        tab_inactive_background: Some(rgba(0x31364aff).into()),
+                        tab_active_background: Some(rgba(0x25283aff).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()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xffcb6bff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x82aaffff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xc792eaff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x89ddffff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xffffffff).into()),
+                        terminal_ansi_black: Some(rgba(0x676e95ff).into()),
+                        terminal_ansi_red: Some(rgba(0xff5571ff).into()),
+                        terminal_ansi_green: Some(rgba(0xa9c77dff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xffcb6bff).into()),
+                        terminal_ansi_blue: Some(rgba(0x82aaffff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xc792eaff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x89ddffff).into()),
+                        terminal_ansi_white: Some(rgba(0xffffffff).into()),
+                        ..Default::default()
                     },
                 },
             },
         ],
-        scales: default_color_scales(),
     }
 }

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

@@ -1,518 +1,128 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn rose_pine() -> ThemeFamily {
-    ThemeFamily {
-        id: "9cf70eba-1185-4f3e-adb7-74f61c45c9dc".into(),
+pub fn rose_pine() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Rose Pine".into(),
         author: "Rosé Pine".into(),
         themes: vec![
-            ThemeVariant {
-                id: "80a8f5dd-2ab5-4ee7-9b25-a60c8513234e".into(),
+            UserTheme {
                 name: "Rose Pine".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x000000ff).into(),
-                        border_variant: rgba(0x000000ff).into(),
-                        border_focused: rgba(0x000000ff).into(),
-                        border_selected: rgba(0x000000ff).into(),
-                        border_transparent: rgba(0x000000ff).into(),
-                        border_disabled: rgba(0x000000ff).into(),
-                        elevated_surface_background: rgba(0x1f1d2eff).into(),
-                        surface_background: rgba(0x1f1d2eff).into(),
-                        background: rgba(0x191724ff).into(),
-                        element_background: rgba(0xebbcbaff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xe0def4ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x000000ff).into(),
-                        tab_active_background: rgba(0x6e6a861a).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x111113ff).into(),
-                        terminal_ansi_bright_black: rgba(0x908caaff).into(),
-                        terminal_ansi_bright_red: rgba(0xeb6f92ff).into(),
-                        terminal_ansi_bright_green: rgba(0x30738fff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xf5c177ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x9ccfd8ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xc4a7e7ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0xebbcbaff).into(),
-                        terminal_ansi_bright_white: rgba(0xe0def4ff).into(),
-                        terminal_ansi_black: rgba(0x26233aff).into(),
-                        terminal_ansi_red: rgba(0xeb6f92ff).into(),
-                        terminal_ansi_green: rgba(0x30738fff).into(),
-                        terminal_ansi_yellow: rgba(0xf5c177ff).into(),
-                        terminal_ansi_blue: rgba(0x9ccfd8ff).into(),
-                        terminal_ansi_magenta: rgba(0xc4a7e7ff).into(),
-                        terminal_ansi_cyan: rgba(0xebbcbaff).into(),
-                        terminal_ansi_white: rgba(0xe0def4ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x000000ff).into()),
+                        border_variant: Some(rgba(0x000000ff).into()),
+                        border_focused: Some(rgba(0x000000ff).into()),
+                        border_selected: Some(rgba(0x000000ff).into()),
+                        border_transparent: Some(rgba(0x000000ff).into()),
+                        border_disabled: Some(rgba(0x000000ff).into()),
+                        elevated_surface_background: Some(rgba(0x1f1d2eff).into()),
+                        surface_background: Some(rgba(0x1f1d2eff).into()),
+                        background: Some(rgba(0x191724ff).into()),
+                        element_background: Some(rgba(0xebbcbaff).into()),
+                        text: Some(rgba(0xe0def4ff).into()),
+                        tab_inactive_background: Some(rgba(0x000000ff).into()),
+                        tab_active_background: Some(rgba(0x6e6a861a).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()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xf5c177ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x9ccfd8ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xc4a7e7ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0xebbcbaff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xe0def4ff).into()),
+                        terminal_ansi_black: Some(rgba(0x26233aff).into()),
+                        terminal_ansi_red: Some(rgba(0xeb6f92ff).into()),
+                        terminal_ansi_green: Some(rgba(0x30738fff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xf5c177ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x9ccfd8ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xc4a7e7ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0xebbcbaff).into()),
+                        terminal_ansi_white: Some(rgba(0xe0def4ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "fe9e3c9e-954e-4f8e-849e-451ba5f6ceca".into(),
+            UserTheme {
                 name: "Rose Moon".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x000000ff).into(),
-                        border_variant: rgba(0x000000ff).into(),
-                        border_focused: rgba(0x000000ff).into(),
-                        border_selected: rgba(0x000000ff).into(),
-                        border_transparent: rgba(0x000000ff).into(),
-                        border_disabled: rgba(0x000000ff).into(),
-                        elevated_surface_background: rgba(0x2a273eff).into(),
-                        surface_background: rgba(0x2a273eff).into(),
-                        background: rgba(0x232136ff).into(),
-                        element_background: rgba(0xea9a97ff).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xe0def4ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x000000ff).into(),
-                        tab_active_background: rgba(0x817c9c14).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x111113ff).into(),
-                        terminal_ansi_bright_black: rgba(0x908caaff).into(),
-                        terminal_ansi_bright_red: rgba(0xeb6f92ff).into(),
-                        terminal_ansi_bright_green: rgba(0x3d8fb0ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xf5c177ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x9ccfd8ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0xc4a7e7ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0xea9a97ff).into(),
-                        terminal_ansi_bright_white: rgba(0xe0def4ff).into(),
-                        terminal_ansi_black: rgba(0x393552ff).into(),
-                        terminal_ansi_red: rgba(0xeb6f92ff).into(),
-                        terminal_ansi_green: rgba(0x3d8fb0ff).into(),
-                        terminal_ansi_yellow: rgba(0xf5c177ff).into(),
-                        terminal_ansi_blue: rgba(0x9ccfd8ff).into(),
-                        terminal_ansi_magenta: rgba(0xc4a7e7ff).into(),
-                        terminal_ansi_cyan: rgba(0xea9a97ff).into(),
-                        terminal_ansi_white: rgba(0xe0def4ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x000000ff).into()),
+                        border_variant: Some(rgba(0x000000ff).into()),
+                        border_focused: Some(rgba(0x000000ff).into()),
+                        border_selected: Some(rgba(0x000000ff).into()),
+                        border_transparent: Some(rgba(0x000000ff).into()),
+                        border_disabled: Some(rgba(0x000000ff).into()),
+                        elevated_surface_background: Some(rgba(0x2a273eff).into()),
+                        surface_background: Some(rgba(0x2a273eff).into()),
+                        background: Some(rgba(0x232136ff).into()),
+                        element_background: Some(rgba(0xea9a97ff).into()),
+                        text: Some(rgba(0xe0def4ff).into()),
+                        tab_inactive_background: Some(rgba(0x000000ff).into()),
+                        tab_active_background: Some(rgba(0x817c9c14).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()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xf5c177ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x9ccfd8ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0xc4a7e7ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0xea9a97ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xe0def4ff).into()),
+                        terminal_ansi_black: Some(rgba(0x393552ff).into()),
+                        terminal_ansi_red: Some(rgba(0xeb6f92ff).into()),
+                        terminal_ansi_green: Some(rgba(0x3d8fb0ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xf5c177ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x9ccfd8ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xc4a7e7ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0xea9a97ff).into()),
+                        terminal_ansi_white: Some(rgba(0xe0def4ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "00cc7f69-9658-443e-b643-1c8dbffa047d".into(),
+            UserTheme {
                 name: "Rose Pine Dawn".into(),
                 appearance: Appearance::Light,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x000000ff).into(),
-                        border_variant: rgba(0x000000ff).into(),
-                        border_focused: rgba(0x000000ff).into(),
-                        border_selected: rgba(0x000000ff).into(),
-                        border_transparent: rgba(0x000000ff).into(),
-                        border_disabled: rgba(0x000000ff).into(),
-                        elevated_surface_background: rgba(0xfffaf3ff).into(),
-                        surface_background: rgba(0xfffaf3ff).into(),
-                        background: rgba(0xfaf4edff).into(),
-                        element_background: rgba(0xd7827dff).into(),
-                        element_hover: rgba(0xe8e8ecff).into(),
-                        element_active: rgba(0xe0e1e6ff).into(),
-                        element_selected: rgba(0xe0e1e6ff).into(),
-                        element_disabled: rgba(0x0000320f).into(),
-                        element_placeholder: rgba(0x60646cff).into(),
-                        element_drop_target: rgba(0x008bff0b).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0xe8e8ecff).into(),
-                        ghost_element_active: rgba(0xe0e1e6ff).into(),
-                        ghost_element_selected: rgba(0xe0e1e6ff).into(),
-                        ghost_element_disabled: rgba(0x0000320f).into(),
-                        text: rgba(0x575279ff).into(),
-                        text_muted: rgba(0x60646cff).into(),
-                        text_placeholder: rgba(0x80838dff).into(),
-                        text_disabled: rgba(0x8b8d98ff).into(),
-                        text_accent: rgba(0x0c73ceff).into(),
-                        icon: rgba(0x60646cff).into(),
-                        icon_muted: rgba(0x80838dff).into(),
-                        icon_disabled: rgba(0x8b8d98ff).into(),
-                        icon_placeholder: rgba(0x80838dff).into(),
-                        icon_accent: rgba(0x0c73ceff).into(),
-                        status_bar_background: rgba(0xf9f9fbff).into(),
-                        title_bar_background: rgba(0xf9f9fbff).into(),
-                        toolbar_background: rgba(0xfcfcfdff).into(),
-                        tab_bar_background: rgba(0xf9f9fbff).into(),
-                        tab_inactive_background: rgba(0x000000ff).into(),
-                        tab_active_background: rgba(0x6e6a860d).into(),
-                        editor_background: rgba(0xfcfcfdff).into(),
-                        editor_gutter_background: rgba(0xfcfcfdff).into(),
-                        editor_subheader_background: rgba(0xf9f9fbff).into(),
-                        editor_active_line_background: rgba(0x0000320f).into(),
-                        editor_highlighted_line_background: rgba(0x00002c17).into(),
-                        editor_line_number: rgba(0x0000320f).into(),
-                        editor_active_line_number: rgba(0x0000320f).into(),
-                        editor_invisible: rgba(0x00002c17).into(),
-                        editor_wrap_guide: rgba(0x00002c17).into(),
-                        editor_active_wrap_guide: rgba(0x00002c17).into(),
-                        editor_document_highlight_read_background: rgba(0x00002c17).into(),
-                        editor_document_highlight_write_background: rgba(0x00002c17).into(),
-                        terminal_background: rgba(0xfcfcfdff).into(),
-                        terminal_ansi_bright_black: rgba(0x797593ff).into(),
-                        terminal_ansi_bright_red: rgba(0xb3627aff).into(),
-                        terminal_ansi_bright_green: rgba(0x276983ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0xea9d34ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x55949fff).into(),
-                        terminal_ansi_bright_magenta: rgba(0x9079a9ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0xd7827dff).into(),
-                        terminal_ansi_bright_white: rgba(0x575279ff).into(),
-                        terminal_ansi_black: rgba(0xf2e9e1ff).into(),
-                        terminal_ansi_red: rgba(0xb3627aff).into(),
-                        terminal_ansi_green: rgba(0x276983ff).into(),
-                        terminal_ansi_yellow: rgba(0xea9d34ff).into(),
-                        terminal_ansi_blue: rgba(0x55949fff).into(),
-                        terminal_ansi_magenta: rgba(0x9079a9ff).into(),
-                        terminal_ansi_cyan: rgba(0xd7827dff).into(),
-                        terminal_ansi_white: rgba(0x575279ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x000000ff).into()),
+                        border_variant: Some(rgba(0x000000ff).into()),
+                        border_focused: Some(rgba(0x000000ff).into()),
+                        border_selected: Some(rgba(0x000000ff).into()),
+                        border_transparent: Some(rgba(0x000000ff).into()),
+                        border_disabled: Some(rgba(0x000000ff).into()),
+                        elevated_surface_background: Some(rgba(0xfffaf3ff).into()),
+                        surface_background: Some(rgba(0xfffaf3ff).into()),
+                        background: Some(rgba(0xfaf4edff).into()),
+                        element_background: Some(rgba(0xd7827dff).into()),
+                        text: Some(rgba(0x575279ff).into()),
+                        tab_inactive_background: Some(rgba(0x000000ff).into()),
+                        tab_active_background: Some(rgba(0x6e6a860d).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()),
+                        terminal_ansi_bright_yellow: Some(rgba(0xea9d34ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x55949fff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0x9079a9ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0xd7827dff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0x575279ff).into()),
+                        terminal_ansi_black: Some(rgba(0xf2e9e1ff).into()),
+                        terminal_ansi_red: Some(rgba(0xb3627aff).into()),
+                        terminal_ansi_green: Some(rgba(0x276983ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xea9d34ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x55949fff).into()),
+                        terminal_ansi_magenta: Some(rgba(0x9079a9ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0xd7827dff).into()),
+                        terminal_ansi_white: Some(rgba(0x575279ff).into()),
+                        ..Default::default()
                     },
                 },
             },
         ],
-        scales: default_color_scales(),
     }
 }

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

@@ -1,351 +1,84 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn solarized() -> ThemeFamily {
-    ThemeFamily {
-        id: "96299b3e-c749-478c-bfc9-c96cdaea8630".into(),
+pub fn solarized() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Solarized".into(),
         author: "Ethan Schoonover (altercation)".into(),
         themes: vec![
-            ThemeVariant {
-                id: "265f93c5-c8e7-4962-b083-8550f4b5c2ff".into(),
+            UserTheme {
                 name: "Solarized Dark".into(),
                 appearance: Appearance::Dark,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0x003847ff).into(),
-                        border_variant: rgba(0x003847ff).into(),
-                        border_focused: rgba(0x003847ff).into(),
-                        border_selected: rgba(0x003847ff).into(),
-                        border_transparent: rgba(0x003847ff).into(),
-                        border_disabled: rgba(0x003847ff).into(),
-                        elevated_surface_background: rgba(0x18191bff).into(),
-                        surface_background: rgba(0x18191bff).into(),
-                        background: rgba(0x002a35ff).into(),
-                        element_background: rgba(0x29a19899).into(),
-                        element_hover: rgba(0x272a2dff).into(),
-                        element_active: rgba(0x2e3135ff).into(),
-                        element_selected: rgba(0x2e3135ff).into(),
-                        element_disabled: rgba(0xddeaf814).into(),
-                        element_placeholder: rgba(0xb0b4baff).into(),
-                        element_drop_target: rgba(0x1166fb18).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0x272a2dff).into(),
-                        ghost_element_active: rgba(0x2e3135ff).into(),
-                        ghost_element_selected: rgba(0x2e3135ff).into(),
-                        ghost_element_disabled: rgba(0xddeaf814).into(),
-                        text: rgba(0xedeef0ff).into(),
-                        text_muted: rgba(0xb0b4baff).into(),
-                        text_placeholder: rgba(0x767a83ff).into(),
-                        text_disabled: rgba(0x696e77ff).into(),
-                        text_accent: rgba(0x6fb8ffff).into(),
-                        icon: rgba(0xb0b4baff).into(),
-                        icon_muted: rgba(0x767a83ff).into(),
-                        icon_disabled: rgba(0x696e77ff).into(),
-                        icon_placeholder: rgba(0x767a83ff).into(),
-                        icon_accent: rgba(0x6fb8ffff).into(),
-                        status_bar_background: rgba(0x18191bff).into(),
-                        title_bar_background: rgba(0x18191bff).into(),
-                        toolbar_background: rgba(0x111113ff).into(),
-                        tab_bar_background: rgba(0x18191bff).into(),
-                        tab_inactive_background: rgba(0x003f51ff).into(),
-                        tab_active_background: rgba(0x002a36ff).into(),
-                        editor_background: rgba(0x111113ff).into(),
-                        editor_gutter_background: rgba(0x111113ff).into(),
-                        editor_subheader_background: rgba(0x18191bff).into(),
-                        editor_active_line_background: rgba(0xddeaf814).into(),
-                        editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                        editor_line_number: rgba(0xddeaf814).into(),
-                        editor_active_line_number: rgba(0xddeaf814).into(),
-                        editor_invisible: rgba(0xd3edf81d).into(),
-                        editor_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                        editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                        terminal_background: rgba(0x111113ff).into(),
-                        terminal_ansi_bright_black: rgba(0x586e75ff).into(),
-                        terminal_ansi_bright_red: rgba(0xcb4b15ff).into(),
-                        terminal_ansi_bright_green: rgba(0x859900ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0x657b83ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x839496ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0x6c71c4ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x93a1a1ff).into(),
-                        terminal_ansi_bright_white: rgba(0x839496ff).into(),
-                        terminal_ansi_black: rgba(0x063642ff).into(),
-                        terminal_ansi_red: rgba(0xdc312eff).into(),
-                        terminal_ansi_green: rgba(0x859900ff).into(),
-                        terminal_ansi_yellow: rgba(0xb58800ff).into(),
-                        terminal_ansi_blue: rgba(0x258ad2ff).into(),
-                        terminal_ansi_magenta: rgba(0xd33582ff).into(),
-                        terminal_ansi_cyan: rgba(0x29a198ff).into(),
-                        terminal_ansi_white: rgba(0x839496ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0x003847ff).into()),
+                        border_variant: Some(rgba(0x003847ff).into()),
+                        border_focused: Some(rgba(0x003847ff).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()),
+                        tab_inactive_background: Some(rgba(0x003f51ff).into()),
+                        tab_active_background: Some(rgba(0x002a36ff).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()),
+                        terminal_ansi_bright_yellow: Some(rgba(0x657b83ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x839496ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0x6c71c4ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x93a1a1ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0x839496ff).into()),
+                        terminal_ansi_black: Some(rgba(0x063642ff).into()),
+                        terminal_ansi_red: Some(rgba(0xdc312eff).into()),
+                        terminal_ansi_green: Some(rgba(0x859900ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xb58800ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x258ad2ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xd33582ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x29a198ff).into()),
+                        terminal_ansi_white: Some(rgba(0x839496ff).into()),
+                        ..Default::default()
                     },
                 },
             },
-            ThemeVariant {
-                id: "40e2070d-5846-4182-9dc9-bf56badf019f".into(),
+            UserTheme {
                 name: "Solarized Light".into(),
                 appearance: Appearance::Light,
-                styles: ThemeStyles {
-                    system: SystemColors {
-                        transparent: rgba(0x00000000).into(),
-                        mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                        mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                        mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                    },
-                    colors: ThemeColors {
-                        border: rgba(0xddd6c1ff).into(),
-                        border_variant: rgba(0xddd6c1ff).into(),
-                        border_focused: rgba(0xddd6c1ff).into(),
-                        border_selected: rgba(0xddd6c1ff).into(),
-                        border_transparent: rgba(0xddd6c1ff).into(),
-                        border_disabled: rgba(0xddd6c1ff).into(),
-                        elevated_surface_background: rgba(0xf9f9fbff).into(),
-                        surface_background: rgba(0xf9f9fbff).into(),
-                        background: rgba(0xfdf6e3ff).into(),
-                        element_background: rgba(0xab9d56ff).into(),
-                        element_hover: rgba(0xe8e8ecff).into(),
-                        element_active: rgba(0xe0e1e6ff).into(),
-                        element_selected: rgba(0xe0e1e6ff).into(),
-                        element_disabled: rgba(0x0000320f).into(),
-                        element_placeholder: rgba(0x60646cff).into(),
-                        element_drop_target: rgba(0x008bff0b).into(),
-                        ghost_element_background: rgba(0x00000000).into(),
-                        ghost_element_hover: rgba(0xe8e8ecff).into(),
-                        ghost_element_active: rgba(0xe0e1e6ff).into(),
-                        ghost_element_selected: rgba(0xe0e1e6ff).into(),
-                        ghost_element_disabled: rgba(0x0000320f).into(),
-                        text: rgba(0x1c2024ff).into(),
-                        text_muted: rgba(0x60646cff).into(),
-                        text_placeholder: rgba(0x80838dff).into(),
-                        text_disabled: rgba(0x8b8d98ff).into(),
-                        text_accent: rgba(0x0c73ceff).into(),
-                        icon: rgba(0x60646cff).into(),
-                        icon_muted: rgba(0x80838dff).into(),
-                        icon_disabled: rgba(0x8b8d98ff).into(),
-                        icon_placeholder: rgba(0x80838dff).into(),
-                        icon_accent: rgba(0x0c73ceff).into(),
-                        status_bar_background: rgba(0xf9f9fbff).into(),
-                        title_bar_background: rgba(0xf9f9fbff).into(),
-                        toolbar_background: rgba(0xfcfcfdff).into(),
-                        tab_bar_background: rgba(0xf9f9fbff).into(),
-                        tab_inactive_background: rgba(0xd3cbb7ff).into(),
-                        tab_active_background: rgba(0xfdf6e3ff).into(),
-                        editor_background: rgba(0xfcfcfdff).into(),
-                        editor_gutter_background: rgba(0xfcfcfdff).into(),
-                        editor_subheader_background: rgba(0xf9f9fbff).into(),
-                        editor_active_line_background: rgba(0x0000320f).into(),
-                        editor_highlighted_line_background: rgba(0x00002c17).into(),
-                        editor_line_number: rgba(0x0000320f).into(),
-                        editor_active_line_number: rgba(0x0000320f).into(),
-                        editor_invisible: rgba(0x00002c17).into(),
-                        editor_wrap_guide: rgba(0x00002c17).into(),
-                        editor_active_wrap_guide: rgba(0x00002c17).into(),
-                        editor_document_highlight_read_background: rgba(0x00002c17).into(),
-                        editor_document_highlight_write_background: rgba(0x00002c17).into(),
-                        terminal_background: rgba(0xfcfcfdff).into(),
-                        terminal_ansi_bright_black: rgba(0x657b83ff).into(),
-                        terminal_ansi_bright_red: rgba(0xcb4b15ff).into(),
-                        terminal_ansi_bright_green: rgba(0x859900ff).into(),
-                        terminal_ansi_bright_yellow: rgba(0x657b83ff).into(),
-                        terminal_ansi_bright_blue: rgba(0x839496ff).into(),
-                        terminal_ansi_bright_magenta: rgba(0x6c71c4ff).into(),
-                        terminal_ansi_bright_cyan: rgba(0x93a1a1ff).into(),
-                        terminal_ansi_bright_white: rgba(0xeee8d5ff).into(),
-                        terminal_ansi_black: rgba(0x657b83ff).into(),
-                        terminal_ansi_red: rgba(0xdc312eff).into(),
-                        terminal_ansi_green: rgba(0x859900ff).into(),
-                        terminal_ansi_yellow: rgba(0xb58800ff).into(),
-                        terminal_ansi_blue: rgba(0x258ad2ff).into(),
-                        terminal_ansi_magenta: rgba(0xd33582ff).into(),
-                        terminal_ansi_cyan: rgba(0x29a198ff).into(),
-                        terminal_ansi_white: rgba(0xeee8d5ff).into(),
-                    },
-                    status: StatusColors {
-                        conflict: rgba(0xff9592ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        error: rgba(0xff9592ff).into(),
-                        hidden: rgba(0xb0b4baff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        info: rgba(0x6fb8ffff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                        success: rgba(0x70cf82ff).into(),
-                        warning: rgba(0xf5e147ff).into(),
-                    },
-                    git: GitStatusColors {
-                        conflict: rgba(0xffa057ff).into(),
-                        created: rgba(0x70cf82ff).into(),
-                        deleted: rgba(0xff9592ff).into(),
-                        ignored: rgba(0xb0b4baff).into(),
-                        modified: rgba(0xf5e147ff).into(),
-                        renamed: rgba(0x6fb8ffff).into(),
-                    },
-                    player: PlayerColors(vec![
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                        PlayerColor {
-                            cursor: rgba(0x000000ff).into(),
-                            background: rgba(0x000000ff).into(),
-                            selection: rgba(0x000000ff).into(),
-                        },
-                    ]),
-                    syntax: SyntaxTheme {
-                        highlights: vec![
-                            ("attribute".into(), rgba(0x4ccce6ff).into()),
-                            ("boolean".into(), rgba(0xff977dff).into()),
-                            ("comment".into(), rgba(0xb0b4baff).into()),
-                            ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                            ("constant".into(), rgba(0x8c323aff).into()),
-                            ("constructor".into(), rgba(0x8c323aff).into()),
-                            ("embedded".into(), rgba(0x8c323aff).into()),
-                            ("emphasis".into(), rgba(0x8c323aff).into()),
-                            ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                            ("enum".into(), rgba(0x8c323aff).into()),
-                            ("function".into(), rgba(0x8c323aff).into()),
-                            ("hint".into(), rgba(0x8c323aff).into()),
-                            ("keyword".into(), rgba(0xffa057ff).into()),
-                            ("label".into(), rgba(0x8c323aff).into()),
-                            ("link_text".into(), rgba(0x8c323aff).into()),
-                            ("link_uri".into(), rgba(0x8c323aff).into()),
-                            ("number".into(), rgba(0x8c323aff).into()),
-                            ("operator".into(), rgba(0x8c323aff).into()),
-                            ("predictive".into(), rgba(0x8c323aff).into()),
-                            ("preproc".into(), rgba(0x8c323aff).into()),
-                            ("primary".into(), rgba(0x8c323aff).into()),
-                            ("property".into(), rgba(0x8c323aff).into()),
-                            ("punctuation".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                            ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                            ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                            ("string".into(), rgba(0x1ed8a3ff).into()),
-                            ("string.escape".into(), rgba(0x8c323aff).into()),
-                            ("string.regex".into(), rgba(0xff977dff).into()),
-                            ("string.special".into(), rgba(0x8c323aff).into()),
-                            ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                            ("tag".into(), rgba(0x8c323aff).into()),
-                            ("text.literal".into(), rgba(0x8c323aff).into()),
-                            ("title".into(), rgba(0x8c323aff).into()),
-                            ("type".into(), rgba(0x8c323aff).into()),
-                            ("variable".into(), rgba(0x8c323aff).into()),
-                            ("variable.special".into(), rgba(0x8c323aff).into()),
-                            ("variant".into(), rgba(0x8c323aff).into()),
-                        ],
+                styles: UserThemeStylesRefinement {
+                    colors: ThemeColorsRefinement {
+                        border: Some(rgba(0xddd6c1ff).into()),
+                        border_variant: Some(rgba(0xddd6c1ff).into()),
+                        border_focused: Some(rgba(0xddd6c1ff).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()),
+                        tab_inactive_background: Some(rgba(0xd3cbb7ff).into()),
+                        tab_active_background: Some(rgba(0xfdf6e3ff).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()),
+                        terminal_ansi_bright_yellow: Some(rgba(0x657b83ff).into()),
+                        terminal_ansi_bright_blue: Some(rgba(0x839496ff).into()),
+                        terminal_ansi_bright_magenta: Some(rgba(0x6c71c4ff).into()),
+                        terminal_ansi_bright_cyan: Some(rgba(0x93a1a1ff).into()),
+                        terminal_ansi_bright_white: Some(rgba(0xeee8d5ff).into()),
+                        terminal_ansi_black: Some(rgba(0x657b83ff).into()),
+                        terminal_ansi_red: Some(rgba(0xdc312eff).into()),
+                        terminal_ansi_green: Some(rgba(0x859900ff).into()),
+                        terminal_ansi_yellow: Some(rgba(0xb58800ff).into()),
+                        terminal_ansi_blue: Some(rgba(0x258ad2ff).into()),
+                        terminal_ansi_magenta: Some(rgba(0xd33582ff).into()),
+                        terminal_ansi_cyan: Some(rgba(0x29a198ff).into()),
+                        terminal_ansi_white: Some(rgba(0xeee8d5ff).into()),
+                        ..Default::default()
                     },
                 },
             },
         ],
-        scales: default_color_scales(),
     }
 }

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

@@ -1,182 +1,37 @@
 use gpui::rgba;
 
 use crate::{
-    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
-pub fn synthwave_84() -> ThemeFamily {
-    ThemeFamily {
-        id: "161a14a0-533c-4df1-b909-2bac37ac807d".into(),
+pub fn synthwave_84() -> UserThemeFamily {
+    UserThemeFamily {
         name: "Synthwave 84".into(),
         author: "Robb Owen (robb0wen)".into(),
-        themes: vec![ThemeVariant {
-            id: "7a7102b7-8778-4c24-ba79-7407857b4f8c".into(),
+        themes: vec![UserTheme {
             name: "Synthwave 84".into(),
             appearance: Appearance::Dark,
-            styles: ThemeStyles {
-                system: SystemColors {
-                    transparent: rgba(0x00000000).into(),
-                    mac_os_traffic_light_red: rgba(0xec6b5fff).into(),
-                    mac_os_traffic_light_yellow: rgba(0xf3bf4dff).into(),
-                    mac_os_traffic_light_green: rgba(0x61c454ff).into(),
-                },
-                colors: ThemeColors {
-                    border: rgba(0x363a3fff).into(),
-                    border_variant: rgba(0x2e3135ff).into(),
-                    border_focused: rgba(0x004073ff).into(),
-                    border_selected: rgba(0x004073ff).into(),
-                    border_transparent: rgba(0x00000000).into(),
-                    border_disabled: rgba(0x212225ff).into(),
-                    elevated_surface_background: rgba(0x18191bff).into(),
-                    surface_background: rgba(0x18191bff).into(),
-                    background: rgba(0x252334ff).into(),
-                    element_background: rgba(0x614d85ff).into(),
-                    element_hover: rgba(0x272a2dff).into(),
-                    element_active: rgba(0x2e3135ff).into(),
-                    element_selected: rgba(0x2e3135ff).into(),
-                    element_disabled: rgba(0xddeaf814).into(),
-                    element_placeholder: rgba(0xb0b4baff).into(),
-                    element_drop_target: rgba(0x1166fb18).into(),
-                    ghost_element_background: rgba(0x00000000).into(),
-                    ghost_element_hover: rgba(0x272a2dff).into(),
-                    ghost_element_active: rgba(0x2e3135ff).into(),
-                    ghost_element_selected: rgba(0x2e3135ff).into(),
-                    ghost_element_disabled: rgba(0xddeaf814).into(),
-                    text: rgba(0xffffffff).into(),
-                    text_muted: rgba(0xb0b4baff).into(),
-                    text_placeholder: rgba(0x767a83ff).into(),
-                    text_disabled: rgba(0x696e77ff).into(),
-                    text_accent: rgba(0x6fb8ffff).into(),
-                    icon: rgba(0xb0b4baff).into(),
-                    icon_muted: rgba(0x767a83ff).into(),
-                    icon_disabled: rgba(0x696e77ff).into(),
-                    icon_placeholder: rgba(0x767a83ff).into(),
-                    icon_accent: rgba(0x6fb8ffff).into(),
-                    status_bar_background: rgba(0x18191bff).into(),
-                    title_bar_background: rgba(0x18191bff).into(),
-                    toolbar_background: rgba(0x111113ff).into(),
-                    tab_bar_background: rgba(0x18191bff).into(),
-                    tab_inactive_background: rgba(0x252334ff).into(),
-                    tab_active_background: rgba(0x111113ff).into(),
-                    editor_background: rgba(0x111113ff).into(),
-                    editor_gutter_background: rgba(0x111113ff).into(),
-                    editor_subheader_background: rgba(0x18191bff).into(),
-                    editor_active_line_background: rgba(0xddeaf814).into(),
-                    editor_highlighted_line_background: rgba(0xd3edf81d).into(),
-                    editor_line_number: rgba(0xddeaf814).into(),
-                    editor_active_line_number: rgba(0xddeaf814).into(),
-                    editor_invisible: rgba(0xd3edf81d).into(),
-                    editor_wrap_guide: rgba(0xd3edf81d).into(),
-                    editor_active_wrap_guide: rgba(0xd3edf81d).into(),
-                    editor_document_highlight_read_background: rgba(0xd3edf81d).into(),
-                    editor_document_highlight_write_background: rgba(0xd3edf81d).into(),
-                    terminal_background: rgba(0x111113ff).into(),
-                    terminal_ansi_bright_black: rgba(0x000000e6).into(),
-                    terminal_ansi_bright_red: rgba(0xfe444fff).into(),
-                    terminal_ansi_bright_green: rgba(0x71f1b7ff).into(),
-                    terminal_ansi_bright_yellow: rgba(0xfede5cff).into(),
-                    terminal_ansi_bright_blue: rgba(0x02edf9ff).into(),
-                    terminal_ansi_bright_magenta: rgba(0xff7ddaff).into(),
-                    terminal_ansi_bright_cyan: rgba(0x02edf9ff).into(),
-                    terminal_ansi_bright_white: rgba(0xb0b4baff).into(),
-                    terminal_ansi_black: rgba(0x000000f2).into(),
-                    terminal_ansi_red: rgba(0xfe444fff).into(),
-                    terminal_ansi_green: rgba(0x71f1b7ff).into(),
-                    terminal_ansi_yellow: rgba(0xf3e70fff).into(),
-                    terminal_ansi_blue: rgba(0x02edf9ff).into(),
-                    terminal_ansi_magenta: rgba(0xff7ddaff).into(),
-                    terminal_ansi_cyan: rgba(0x02edf9ff).into(),
-                    terminal_ansi_white: rgba(0xedeef0ff).into(),
-                },
-                status: StatusColors {
-                    conflict: rgba(0xff9592ff).into(),
-                    created: rgba(0x70cf82ff).into(),
-                    deleted: rgba(0xff9592ff).into(),
-                    error: rgba(0xff9592ff).into(),
-                    hidden: rgba(0xb0b4baff).into(),
-                    ignored: rgba(0xb0b4baff).into(),
-                    info: rgba(0x6fb8ffff).into(),
-                    modified: rgba(0xf5e147ff).into(),
-                    renamed: rgba(0x6fb8ffff).into(),
-                    success: rgba(0x70cf82ff).into(),
-                    warning: rgba(0xf5e147ff).into(),
-                },
-                git: GitStatusColors {
-                    conflict: rgba(0xffa057ff).into(),
-                    created: rgba(0x70cf82ff).into(),
-                    deleted: rgba(0xff9592ff).into(),
-                    ignored: rgba(0xb0b4baff).into(),
-                    modified: rgba(0xf5e147ff).into(),
-                    renamed: rgba(0x6fb8ffff).into(),
-                },
-                player: PlayerColors(vec![
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                    PlayerColor {
-                        cursor: rgba(0x000000ff).into(),
-                        background: rgba(0x000000ff).into(),
-                        selection: rgba(0x000000ff).into(),
-                    },
-                ]),
-                syntax: SyntaxTheme {
-                    highlights: vec![
-                        ("attribute".into(), rgba(0x4ccce6ff).into()),
-                        ("boolean".into(), rgba(0xff977dff).into()),
-                        ("comment".into(), rgba(0xb0b4baff).into()),
-                        ("comment.doc".into(), rgba(0xe0dffeff).into()),
-                        ("constant".into(), rgba(0x8c323aff).into()),
-                        ("constructor".into(), rgba(0x8c323aff).into()),
-                        ("embedded".into(), rgba(0x8c323aff).into()),
-                        ("emphasis".into(), rgba(0x8c323aff).into()),
-                        ("emphasis.strong".into(), rgba(0x8c323aff).into()),
-                        ("enum".into(), rgba(0x8c323aff).into()),
-                        ("function".into(), rgba(0x8c323aff).into()),
-                        ("hint".into(), rgba(0x8c323aff).into()),
-                        ("keyword".into(), rgba(0xffa057ff).into()),
-                        ("label".into(), rgba(0x8c323aff).into()),
-                        ("link_text".into(), rgba(0x8c323aff).into()),
-                        ("link_uri".into(), rgba(0x8c323aff).into()),
-                        ("number".into(), rgba(0x8c323aff).into()),
-                        ("operator".into(), rgba(0x8c323aff).into()),
-                        ("predictive".into(), rgba(0x8c323aff).into()),
-                        ("preproc".into(), rgba(0x8c323aff).into()),
-                        ("primary".into(), rgba(0x8c323aff).into()),
-                        ("property".into(), rgba(0x8c323aff).into()),
-                        ("punctuation".into(), rgba(0xb0b4baff).into()),
-                        ("punctuation.bracket".into(), rgba(0xb0b4baff).into()),
-                        ("punctuation.delimiter".into(), rgba(0xb0b4baff).into()),
-                        ("punctuation.list_marker".into(), rgba(0x6fb8ffff).into()),
-                        ("punctuation.special".into(), rgba(0x8c323aff).into()),
-                        ("string".into(), rgba(0x1ed8a3ff).into()),
-                        ("string.escape".into(), rgba(0x8c323aff).into()),
-                        ("string.regex".into(), rgba(0xff977dff).into()),
-                        ("string.special".into(), rgba(0x8c323aff).into()),
-                        ("string.special.symbol".into(), rgba(0x8c323aff).into()),
-                        ("tag".into(), rgba(0x8c323aff).into()),
-                        ("text.literal".into(), rgba(0x8c323aff).into()),
-                        ("title".into(), rgba(0x8c323aff).into()),
-                        ("type".into(), rgba(0x8c323aff).into()),
-                        ("variable".into(), rgba(0x8c323aff).into()),
-                        ("variable.special".into(), rgba(0x8c323aff).into()),
-                        ("variant".into(), rgba(0x8c323aff).into()),
-                    ],
+            styles: UserThemeStylesRefinement {
+                colors: ThemeColorsRefinement {
+                    background: Some(rgba(0x252334ff).into()),
+                    element_background: Some(rgba(0x614d85ff).into()),
+                    text: Some(rgba(0xffffffff).into()),
+                    tab_inactive_background: Some(rgba(0x252334ff).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()),
+                    terminal_ansi_bright_blue: Some(rgba(0x02edf9ff).into()),
+                    terminal_ansi_bright_magenta: Some(rgba(0xff7ddaff).into()),
+                    terminal_ansi_bright_cyan: Some(rgba(0x02edf9ff).into()),
+                    terminal_ansi_red: Some(rgba(0xfe444fff).into()),
+                    terminal_ansi_green: Some(rgba(0x71f1b7ff).into()),
+                    terminal_ansi_yellow: Some(rgba(0xf3e70fff).into()),
+                    terminal_ansi_blue: Some(rgba(0x02edf9ff).into()),
+                    terminal_ansi_magenta: Some(rgba(0xff7ddaff).into()),
+                    terminal_ansi_cyan: Some(rgba(0x02edf9ff).into()),
+                    ..Default::default()
                 },
             },
         }],
-        scales: default_color_scales(),
     }
 }

crates/theme2/src/user_theme.rs 🔗

@@ -0,0 +1,25 @@
+use refineable::Refineable;
+use serde::Deserialize;
+
+use crate::{Appearance, ThemeColors, ThemeColorsRefinement};
+
+#[derive(Deserialize)]
+pub struct UserThemeFamily {
+    pub name: String,
+    pub author: String,
+    pub themes: Vec<UserTheme>,
+}
+
+#[derive(Deserialize)]
+pub struct UserTheme {
+    pub name: String,
+    pub appearance: Appearance,
+    pub styles: UserThemeStylesRefinement,
+}
+
+#[derive(Refineable, Clone)]
+#[refineable(deserialize)]
+pub struct UserThemeStyles {
+    #[refineable]
+    pub colors: ThemeColors,
+}

crates/theme_importer/src/main.rs 🔗

@@ -13,10 +13,10 @@ use gpui::serde_json;
 use log::LevelFilter;
 use serde::Deserialize;
 use simplelog::SimpleLogger;
-use theme::{default_color_scales, Appearance, ThemeFamily};
+use theme::{Appearance, UserThemeFamily};
 use vscode::VsCodeThemeConverter;
 
-use crate::theme_printer::ThemeFamilyPrinter;
+use crate::theme_printer::UserThemeFamilyPrinter;
 use crate::vscode::VsCodeTheme;
 
 #[derive(Debug, Deserialize)]
@@ -120,12 +120,10 @@ fn main() -> Result<()> {
             themes.push(theme);
         }
 
-        let theme_family = ThemeFamily {
-            id: uuid::Uuid::new_v4().to_string(),
+        let theme_family = UserThemeFamily {
             name: family_metadata.name.into(),
             author: family_metadata.author.into(),
             themes,
-            scales: default_color_scales(),
         };
 
         theme_families.push(theme_family);
@@ -157,15 +155,14 @@ fn main() -> Result<()> {
             use gpui::rgba;
 
             use crate::{{
-                default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
-                SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+                Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
             }};
 
-            pub fn {theme_family_slug}() -> ThemeFamily {{
+            pub fn {theme_family_slug}() -> UserThemeFamily {{
                 {theme_family_definition}
             }}
             "#,
-            theme_family_definition = format!("{:#?}", ThemeFamilyPrinter::new(theme_family))
+            theme_family_definition = format!("{:#?}", UserThemeFamilyPrinter::new(theme_family))
         );
 
         output_file.write_all(theme_module.as_bytes())?;
@@ -175,9 +172,9 @@ fn main() -> Result<()> {
 
     let themes_vector_contents = format!(
         r#"
-        use crate::ThemeFamily;
+        use crate::UserThemeFamily;
 
-        pub(crate) fn all_imported_themes() -> Vec<ThemeFamily> {{
+        pub(crate) fn all_imported_themes() -> Vec<UserThemeFamily> {{
             vec![{all_themes}]
         }}
         "#,

crates/theme_importer/src/theme_printer.rs 🔗

@@ -3,7 +3,7 @@ use std::fmt::{self, Debug};
 use gpui::{Hsla, Rgba};
 use theme::{
     Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors, SyntaxTheme,
-    SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+    SystemColors, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
 };
 
 struct RawSyntaxPrinter<'a>(&'a str);
@@ -38,18 +38,17 @@ impl<'a, T: Debug> Debug for VecPrinter<'a, T> {
     }
 }
 
-pub struct ThemeFamilyPrinter(ThemeFamily);
+pub struct UserThemeFamilyPrinter(UserThemeFamily);
 
-impl ThemeFamilyPrinter {
-    pub fn new(theme_family: ThemeFamily) -> Self {
+impl UserThemeFamilyPrinter {
+    pub fn new(theme_family: UserThemeFamily) -> Self {
         Self(theme_family)
     }
 }
 
-impl Debug for ThemeFamilyPrinter {
+impl Debug for UserThemeFamilyPrinter {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.debug_struct("ThemeFamily")
-            .field("id", &IntoPrinter(&self.0.id))
+        f.debug_struct("UserThemeFamily")
             .field("name", &IntoPrinter(&self.0.name))
             .field("author", &IntoPrinter(&self.0.author))
             .field(
@@ -59,24 +58,22 @@ impl Debug for ThemeFamilyPrinter {
                         .0
                         .themes
                         .iter()
-                        .map(|theme| ThemeVariantPrinter(theme))
+                        .map(|theme| UserThemePrinter(theme))
                         .collect(),
                 ),
             )
-            .field("scales", &RawSyntaxPrinter("default_color_scales()"))
             .finish()
     }
 }
 
-pub struct ThemeVariantPrinter<'a>(&'a ThemeVariant);
+pub struct UserThemePrinter<'a>(&'a UserTheme);
 
-impl<'a> Debug for ThemeVariantPrinter<'a> {
+impl<'a> Debug for UserThemePrinter<'a> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.debug_struct("ThemeVariant")
-            .field("id", &IntoPrinter(&self.0.id))
+        f.debug_struct("UserTheme")
             .field("name", &IntoPrinter(&self.0.name))
             .field("appearance", &AppearancePrinter(self.0.appearance))
-            .field("styles", &ThemeStylesPrinter(&self.0.styles))
+            .field("styles", &UserThemeStylesRefinementPrinter(&self.0.styles))
             .finish()
     }
 }
@@ -89,17 +86,12 @@ impl Debug for AppearancePrinter {
     }
 }
 
-pub struct ThemeStylesPrinter<'a>(&'a ThemeStyles);
+pub struct UserThemeStylesRefinementPrinter<'a>(&'a UserThemeStylesRefinement);
 
-impl<'a> Debug for ThemeStylesPrinter<'a> {
+impl<'a> Debug for UserThemeStylesRefinementPrinter<'a> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.debug_struct("ThemeStyles")
-            .field("system", &SystemColorsPrinter(&self.0.system))
-            .field("colors", &ThemeColorsPrinter(&self.0.colors))
-            .field("status", &StatusColorsPrinter(&self.0.status))
-            .field("git", &GitStatusColorsPrinter(&self.0.git))
-            .field("player", &PlayerColorsPrinter(&self.0.player))
-            .field("syntax", &SyntaxThemePrinter(&self.0.syntax))
+        f.debug_struct("UserThemeStylesRefinement")
+            .field("colors", &ThemeColorsRefinementPrinter(&self.0.colors))
             .finish()
     }
 }
@@ -126,204 +118,136 @@ impl<'a> Debug for SystemColorsPrinter<'a> {
     }
 }
 
-pub struct ThemeColorsPrinter<'a>(&'a ThemeColors);
+pub struct ThemeColorsRefinementPrinter<'a>(&'a ThemeColorsRefinement);
 
-impl<'a> Debug for ThemeColorsPrinter<'a> {
+impl<'a> Debug for ThemeColorsRefinementPrinter<'a> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.debug_struct("ThemeColors")
-            .field("border", &HslaPrinter(self.0.border))
-            .field("border_variant", &HslaPrinter(self.0.border_variant))
-            .field("border_focused", &HslaPrinter(self.0.border_focused))
-            .field("border_selected", &HslaPrinter(self.0.border_selected))
-            .field(
-                "border_transparent",
-                &HslaPrinter(self.0.border_transparent),
-            )
-            .field("border_disabled", &HslaPrinter(self.0.border_disabled))
-            .field(
+        let theme_colors = vec![
+            ("border", self.0.border),
+            ("border_variant", self.0.border_variant),
+            ("border_focused", self.0.border_focused),
+            ("border_selected", self.0.border_selected),
+            ("border_transparent", self.0.border_transparent),
+            ("border_disabled", self.0.border_disabled),
+            (
                 "elevated_surface_background",
-                &HslaPrinter(self.0.elevated_surface_background),
-            )
-            .field(
-                "surface_background",
-                &HslaPrinter(self.0.surface_background),
-            )
-            .field("background", &HslaPrinter(self.0.background))
-            .field(
-                "element_background",
-                &HslaPrinter(self.0.element_background),
-            )
-            .field("element_hover", &HslaPrinter(self.0.element_hover))
-            .field("element_active", &HslaPrinter(self.0.element_active))
-            .field("element_selected", &HslaPrinter(self.0.element_selected))
-            .field("element_disabled", &HslaPrinter(self.0.element_disabled))
-            .field(
-                "element_placeholder",
-                &HslaPrinter(self.0.element_placeholder),
-            )
-            .field(
-                "element_drop_target",
-                &HslaPrinter(self.0.element_drop_target),
-            )
-            .field(
-                "ghost_element_background",
-                &HslaPrinter(self.0.ghost_element_background),
-            )
-            .field(
-                "ghost_element_hover",
-                &HslaPrinter(self.0.ghost_element_hover),
-            )
-            .field(
-                "ghost_element_active",
-                &HslaPrinter(self.0.ghost_element_active),
-            )
-            .field(
-                "ghost_element_selected",
-                &HslaPrinter(self.0.ghost_element_selected),
-            )
-            .field(
-                "ghost_element_disabled",
-                &HslaPrinter(self.0.ghost_element_disabled),
-            )
-            .field("text", &HslaPrinter(self.0.text))
-            .field("text_muted", &HslaPrinter(self.0.text_muted))
-            .field("text_placeholder", &HslaPrinter(self.0.text_placeholder))
-            .field("text_disabled", &HslaPrinter(self.0.text_disabled))
-            .field("text_accent", &HslaPrinter(self.0.text_accent))
-            .field("icon", &HslaPrinter(self.0.icon))
-            .field("icon_muted", &HslaPrinter(self.0.icon_muted))
-            .field("icon_disabled", &HslaPrinter(self.0.icon_disabled))
-            .field("icon_placeholder", &HslaPrinter(self.0.icon_placeholder))
-            .field("icon_accent", &HslaPrinter(self.0.icon_accent))
-            .field(
-                "status_bar_background",
-                &HslaPrinter(self.0.status_bar_background),
-            )
-            .field(
-                "title_bar_background",
-                &HslaPrinter(self.0.title_bar_background),
-            )
-            .field(
-                "toolbar_background",
-                &HslaPrinter(self.0.toolbar_background),
-            )
-            .field(
-                "tab_bar_background",
-                &HslaPrinter(self.0.tab_bar_background),
-            )
-            .field(
-                "tab_inactive_background",
-                &HslaPrinter(self.0.tab_inactive_background),
-            )
-            .field(
-                "tab_active_background",
-                &HslaPrinter(self.0.tab_active_background),
-            )
-            .field("editor_background", &HslaPrinter(self.0.editor_background))
-            .field(
-                "editor_gutter_background",
-                &HslaPrinter(self.0.editor_gutter_background),
-            )
-            .field(
+                self.0.elevated_surface_background,
+            ),
+            ("surface_background", self.0.surface_background),
+            ("background", self.0.background),
+            ("element_background", self.0.element_background),
+            ("element_hover", self.0.element_hover),
+            ("element_active", self.0.element_active),
+            ("element_selected", self.0.element_selected),
+            ("element_disabled", self.0.element_disabled),
+            ("element_placeholder", self.0.element_placeholder),
+            ("element_drop_target", self.0.element_drop_target),
+            ("ghost_element_background", self.0.ghost_element_background),
+            ("ghost_element_hover", self.0.ghost_element_hover),
+            ("ghost_element_active", self.0.ghost_element_active),
+            ("ghost_element_selected", self.0.ghost_element_selected),
+            ("ghost_element_disabled", self.0.ghost_element_disabled),
+            ("text", self.0.text),
+            ("text_muted", self.0.text_muted),
+            ("text_placeholder", self.0.text_placeholder),
+            ("text_disabled", self.0.text_disabled),
+            ("text_accent", self.0.text_accent),
+            ("icon", self.0.icon),
+            ("icon_muted", self.0.icon_muted),
+            ("icon_disabled", self.0.icon_disabled),
+            ("icon_placeholder", self.0.icon_placeholder),
+            ("icon_accent", self.0.icon_accent),
+            ("status_bar_background", self.0.status_bar_background),
+            ("title_bar_background", self.0.title_bar_background),
+            ("toolbar_background", self.0.toolbar_background),
+            ("tab_bar_background", self.0.tab_bar_background),
+            ("tab_inactive_background", self.0.tab_inactive_background),
+            ("tab_active_background", self.0.tab_active_background),
+            ("editor_background", self.0.editor_background),
+            ("editor_gutter_background", self.0.editor_gutter_background),
+            (
                 "editor_subheader_background",
-                &HslaPrinter(self.0.editor_subheader_background),
-            )
-            .field(
+                self.0.editor_subheader_background,
+            ),
+            (
                 "editor_active_line_background",
-                &HslaPrinter(self.0.editor_active_line_background),
-            )
-            .field(
+                self.0.editor_active_line_background,
+            ),
+            (
                 "editor_highlighted_line_background",
-                &HslaPrinter(self.0.editor_highlighted_line_background),
-            )
-            .field(
-                "editor_line_number",
-                &HslaPrinter(self.0.editor_line_number),
-            )
-            .field(
+                self.0.editor_highlighted_line_background,
+            ),
+            ("editor_line_number", self.0.editor_line_number),
+            (
                 "editor_active_line_number",
-                &HslaPrinter(self.0.editor_active_line_number),
-            )
-            .field("editor_invisible", &HslaPrinter(self.0.editor_invisible))
-            .field("editor_wrap_guide", &HslaPrinter(self.0.editor_wrap_guide))
-            .field(
-                "editor_active_wrap_guide",
-                &HslaPrinter(self.0.editor_active_wrap_guide),
-            )
-            .field(
+                self.0.editor_active_line_number,
+            ),
+            ("editor_invisible", self.0.editor_invisible),
+            ("editor_wrap_guide", self.0.editor_wrap_guide),
+            ("editor_active_wrap_guide", self.0.editor_active_wrap_guide),
+            (
                 "editor_document_highlight_read_background",
-                &HslaPrinter(self.0.editor_document_highlight_read_background),
-            )
-            .field(
+                self.0.editor_document_highlight_read_background,
+            ),
+            (
                 "editor_document_highlight_write_background",
-                &HslaPrinter(self.0.editor_document_highlight_write_background),
-            )
-            .field(
-                "terminal_background",
-                &HslaPrinter(self.0.terminal_background),
-            )
-            .field(
+                self.0.editor_document_highlight_write_background,
+            ),
+            ("terminal_background", self.0.terminal_background),
+            (
                 "terminal_ansi_bright_black",
-                &HslaPrinter(self.0.terminal_ansi_bright_black),
-            )
-            .field(
-                "terminal_ansi_bright_red",
-                &HslaPrinter(self.0.terminal_ansi_bright_red),
-            )
-            .field(
+                self.0.terminal_ansi_bright_black,
+            ),
+            ("terminal_ansi_bright_red", self.0.terminal_ansi_bright_red),
+            (
                 "terminal_ansi_bright_green",
-                &HslaPrinter(self.0.terminal_ansi_bright_green),
-            )
-            .field(
+                self.0.terminal_ansi_bright_green,
+            ),
+            (
                 "terminal_ansi_bright_yellow",
-                &HslaPrinter(self.0.terminal_ansi_bright_yellow),
-            )
-            .field(
+                self.0.terminal_ansi_bright_yellow,
+            ),
+            (
                 "terminal_ansi_bright_blue",
-                &HslaPrinter(self.0.terminal_ansi_bright_blue),
-            )
-            .field(
+                self.0.terminal_ansi_bright_blue,
+            ),
+            (
                 "terminal_ansi_bright_magenta",
-                &HslaPrinter(self.0.terminal_ansi_bright_magenta),
-            )
-            .field(
+                self.0.terminal_ansi_bright_magenta,
+            ),
+            (
                 "terminal_ansi_bright_cyan",
-                &HslaPrinter(self.0.terminal_ansi_bright_cyan),
-            )
-            .field(
+                self.0.terminal_ansi_bright_cyan,
+            ),
+            (
                 "terminal_ansi_bright_white",
-                &HslaPrinter(self.0.terminal_ansi_bright_white),
-            )
-            .field(
-                "terminal_ansi_black",
-                &HslaPrinter(self.0.terminal_ansi_black),
-            )
-            .field("terminal_ansi_red", &HslaPrinter(self.0.terminal_ansi_red))
-            .field(
-                "terminal_ansi_green",
-                &HslaPrinter(self.0.terminal_ansi_green),
-            )
-            .field(
-                "terminal_ansi_yellow",
-                &HslaPrinter(self.0.terminal_ansi_yellow),
-            )
-            .field(
-                "terminal_ansi_blue",
-                &HslaPrinter(self.0.terminal_ansi_blue),
-            )
-            .field(
-                "terminal_ansi_magenta",
-                &HslaPrinter(self.0.terminal_ansi_magenta),
-            )
-            .field(
-                "terminal_ansi_cyan",
-                &HslaPrinter(self.0.terminal_ansi_cyan),
-            )
-            .field(
-                "terminal_ansi_white",
-                &HslaPrinter(self.0.terminal_ansi_white),
-            )
-            .finish()
+                self.0.terminal_ansi_bright_white,
+            ),
+            ("terminal_ansi_black", self.0.terminal_ansi_black),
+            ("terminal_ansi_red", self.0.terminal_ansi_red),
+            ("terminal_ansi_green", self.0.terminal_ansi_green),
+            ("terminal_ansi_yellow", self.0.terminal_ansi_yellow),
+            ("terminal_ansi_blue", self.0.terminal_ansi_blue),
+            ("terminal_ansi_magenta", self.0.terminal_ansi_magenta),
+            ("terminal_ansi_cyan", self.0.terminal_ansi_cyan),
+            ("terminal_ansi_white", self.0.terminal_ansi_white),
+        ];
+
+        f.write_str("ThemeColorsRefinement {")?;
+
+        for (color_name, color) in theme_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,10 +1,7 @@
 use anyhow::Result;
-use gpui::{Hsla, Refineable, Rgba};
+use gpui::{Hsla, Rgba};
 use serde::Deserialize;
-use theme::{
-    Appearance, GitStatusColors, PlayerColors, StatusColors, SyntaxTheme, SystemColors,
-    ThemeColors, ThemeColorsRefinement, ThemeStyles, ThemeVariant,
-};
+use theme::{ThemeColorsRefinement, UserTheme, UserThemeStylesRefinement};
 
 use crate::util::Traverse;
 use crate::ThemeMetadata;
@@ -433,14 +430,9 @@ impl VsCodeThemeConverter {
         }
     }
 
-    pub fn convert(self) -> Result<ThemeVariant> {
+    pub fn convert(self) -> Result<UserTheme> {
         let appearance = self.theme_metadata.appearance.into();
 
-        let mut theme_colors = match appearance {
-            Appearance::Light => ThemeColors::default_light(),
-            Appearance::Dark => ThemeColors::default_dark(),
-        };
-
         let vscode_colors = &self.theme.colors;
 
         let theme_colors_refinements = ThemeColorsRefinement {
@@ -567,40 +559,12 @@ impl VsCodeThemeConverter {
             ..Default::default()
         };
 
-        theme_colors.refine(&theme_colors_refinements);
-
-        Ok(ThemeVariant {
-            id: uuid::Uuid::new_v4().to_string(),
+        Ok(UserTheme {
             name: self.theme_metadata.name.into(),
             appearance,
-            styles: ThemeStyles {
-                system: SystemColors::default(),
-                colors: theme_colors,
-                status: StatusColors::default(),
-                git: GitStatusColors::default(),
-                player: PlayerColors::default(),
-                syntax: SyntaxTheme::default_dark(),
+            styles: UserThemeStylesRefinement {
+                colors: theme_colors_refinements,
             },
         })
     }
 }
-
-// #[cfg(test)]
-// mod tests {
-//     use super::*;
-//     use std::path::PathBuf;
-
-//     #[test]
-//     fn test_deserialize_theme() {
-//         let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
-//         let root_dir = manifest_dir.parent().unwrap().parent().unwrap();
-
-//         let mut d = root_dir.to_path_buf();
-//         d.push("assets/themes/src/vsc/dracula/dracula.json");
-
-//         let data = std::fs::read_to_string(d).expect("Unable to read file");
-
-//         let result: Theme = serde_json::from_str(&data).unwrap();
-//         println!("{:#?}", result);
-//     }
-// }

crates/workspace2/src/item.rs 🔗

@@ -32,7 +32,7 @@ use std::{
     },
     time::Duration,
 };
-use theme2::ThemeVariant;
+use theme2::Theme;
 
 #[derive(Deserialize)]
 pub struct ItemSettings {
@@ -184,7 +184,7 @@ pub trait Item: Render + EventEmitter {
         ToolbarItemLocation::Hidden
     }
 
-    fn breadcrumbs(&self, _theme: &ThemeVariant, _cx: &AppContext) -> Option<Vec<BreadcrumbText>> {
+    fn breadcrumbs(&self, _theme: &Theme, _cx: &AppContext) -> Option<Vec<BreadcrumbText>> {
         None
     }
 
@@ -270,7 +270,7 @@ pub trait ItemHandle: 'static + Send {
     ) -> gpui::Subscription;
     fn to_searchable_item_handle(&self, cx: &AppContext) -> Option<Box<dyn SearchableItemHandle>>;
     fn breadcrumb_location(&self, cx: &AppContext) -> ToolbarItemLocation;
-    fn breadcrumbs(&self, theme: &ThemeVariant, cx: &AppContext) -> Option<Vec<BreadcrumbText>>;
+    fn breadcrumbs(&self, theme: &Theme, cx: &AppContext) -> Option<Vec<BreadcrumbText>>;
     fn serialized_item_kind(&self) -> Option<&'static str>;
     fn show_toolbar(&self, cx: &AppContext) -> bool;
     fn pixel_position_of_cursor(&self, cx: &AppContext) -> Option<Point<Pixels>>;
@@ -603,7 +603,7 @@ impl<T: Item> ItemHandle for View<T> {
         self.read(cx).breadcrumb_location()
     }
 
-    fn breadcrumbs(&self, theme: &ThemeVariant, cx: &AppContext) -> Option<Vec<BreadcrumbText>> {
+    fn breadcrumbs(&self, theme: &Theme, cx: &AppContext) -> Option<Vec<BreadcrumbText>> {
         self.read(cx).breadcrumbs(theme, cx)
     }
 

script/bundle 🔗

@@ -86,14 +86,8 @@ if [ "$local_arch" = true ]; then
     cargo build ${build_flag} --package zed
     cargo build ${build_flag} --package cli
 else
-    echo "Compiling zed binary for aarch64-apple-darwin"
-    cargo build ${build_flag} --package zed --target aarch64-apple-darwin
-    echo "Compiling zed binary for x86_64-apple-darwin"
-    cargo build ${build_flag} --package zed --target x86_64-apple-darwin
-    echo "Compiling cli binary for aarch64-apple-darwin"
-    cargo build ${build_flag} --package cli --target aarch64-apple-darwin
-    echo "Compiling cli binary for x86_64-apple-darwin"
-    cargo build ${build_flag} --package cli --target x86_64-apple-darwin
+    echo "Compiling zed binaries"
+    cargo build ${build_flag} --package zed --package cli --target aarch64-apple-darwin --target x86_64-apple-darwin
 fi
 
 echo "Creating application bundle"